[ensembl-dev] Release 65 - 'not a valid species name' exception thrown by get_adaptor()

Giuseppe G. G.Gallone at sms.ed.ac.uk
Fri Jan 20 17:23:44 GMT 2012


Hi Andy,

I understand the problem however the solution seems i.m.o. a bit strong 
and the message returned by the warning a bit misleading for those with 
matching api/db version. Would it maybe be possible to do these version 
checks at the registry level rather than at the adaptor level? Anyway 
thank you for your suggestion, I will use that method you suggest from 
now on.

Best,
Giuseppe

On 20/01/12 15:52, Andy Yates wrote:
> Hi Giuseppe,
>
> I'm sorry that you are encountering this issue. The reason why this change was put into place was to avoid/inform users when they fail to connect to Ensembl with the correct database version. This is why the warning mentions that you should check the DB&  API versions. Considering the amount of messages we get about this each release I am reluctant to revert this behaviour.
>
> If you want to check if a species is known you can do the following:
>
> my $species = 'ScerS288c';
> my $type = 'core';
> my $alias_exists = Bio::EnsEMBL::Registry->alias_exists($species);
> if($alias_exists) {
>    my $a = Bio::EnsEMBL::Registry->get_adaptor($species, $type, 'Gene');
> }
>
> Which would tell you if the species existed and then get the gene adaptor if it is available. You could also use:
>
> my $dba = Bio::EnsEMBL::Registry->get_DBAdaptor($species, $type, 1);
> if($dba) {
>    my $a = $dba->get_GeneAdaptor();
> }
>
> Both are valid&  would not require you to do too much recoding.
>
> Hope this has helped you out
>
> Andy
>
> On 20 Jan 2012, at 12:34, Giuseppe G. wrote:
>
>> Hi again
>>
>> I'm on release 65, Bioperl 1.6.1.
>>
>> A line like the following
>>
>> my $gene_adaptor = $registry->get_adaptor('ScerS288c', 'core', 'Gene');
>>
>> will return the exception
>>
>> -------------------- WARNING ----------------------
>> MSG: ScerS288c is not a valid species name (check DB and API version)
>> FILE: Bio/EnsEMBL/Registry.pm LINE: 1159
>> CALLED BY: Bio/EnsEMBL/Registry.pm  LINE: 953
>> Ensembl API version = 65
>> ---------------------------------------------------
>>
>> -------------------- EXCEPTION --------------------
>> MSG: Can not find internal name for species 'ScerS288c'
>> STACK Bio::EnsEMBL::Registry::get_adaptor /home/giuseppe/src/ensembl/modules/Bio/EnsEMBL/Registry.pm:955
>> STACK<MYCODE>
>> Ensembl API version = 65
>> ---------------------------------------------------
>>
>> instead of returning an undef.
>>
>> This happens whenever the query species is not contained in the genomeDB. So every time I try to get an adaptor with an unrecognised species (may be a typo, a strain name like Saccharomyces cerevisiae S288c, etc) I'll get this exception.
>>
>> The behaviour, up to v64, was different. I got  an undefined $gene_adaptor and I could then go back to the taxon object and climb up the taxonomy to get the parent taxon (in the example case, 'Saccharomyces cerevisiae') and try once more to get a gene adaptor with the parent taxon binomial name.
>>
>> I *could* get round this exception by downloading all of the available binomal species names from a genome adaptor - comparing my species name against them, then trying to get the gene adaptor only if my species is in the genome adaptor array - however this is far from optimal (as I need to deal with EnsemblGenomes species names as well).
>>
>> Would it be possible to restore the former behaviour? Thanks a lot!
>>
>> Giuseppe
>>
>> --
>>
>> The University of Edinburgh is a charitable body, registered in Scotland, with registration number SC005336.
>>
>> _______________________________________________
>> Dev mailing list    Dev at ensembl.org
>> List admin (including subscribe/unsubscribe): http://lists.ensembl.org/mailman/listinfo/dev
>> Ensembl Blog: http://www.ensembl.info/
>
>

--

The University of Edinburgh is a charitable body, registered in 
Scotland, with registration number SC005336.




More information about the Dev mailing list