Show
Ignore:
Timestamp:
10/18/09 21:40:10 (3 years ago)
Author:
mauro
Message:

* rebuild catalog action on biosqlroot's view and triggered by modify event
* choice seqrecord key field (fix #6)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • plone4bio.biosql/trunk/src/plone4bio/biosql/content/database.py

    r94 r112  
    5252    #         del(kwargs['parent']) 
    5353    #    super(BioSQLDatabase, self).__init__(*args, **kwargs) 
     54 
     55    # def __getattr__(self, name): 
     56    #     if self.has_key(name): 
     57    #         return self[name] 
     58    #     else: 
     59    #         raise AttributeError, name 
     60 
     61    def invalidateCache(self): 
     62        self._v_database = None 
     63        self._v_keys = None 
    5464 
    5565    # @ram.cache(_cachekey) 
     
    122132        if not database: 
    123133            raise StopIteration 
    124         for name in database.get_all_primary_ids(): # -- bioentry_id 
    125             yield str(name) 
     134        if self.getBioSQLRoot().seqrecord_key == 'accession': 
     135            for name in database.adaptor.list_bioentry_accessions(database.dbid): 
     136                yield str(name) 
     137        elif self.getBioSQLRoot().seqrecord_key == 'version': 
     138            for name in database.adaptor.list_bioentry_versions(database.dbid): 
     139                yield str(name) 
     140        else: # default = 'bioentry_id': 
     141            for name in database.get_all_primary_ids(): # -- bioentry_id 
     142                yield str(name) 
    126143     
    127144    def keys(self, reload=False): 
     
    136153        if not isinstance(key, basestring): 
    137154            return False 
    138         try: 
    139             key = int(key) 
    140         except ValueError: 
    141             return False 
     155        if self.getBioSQLRoot().seqrecord_key == 'accession': 
     156            pass 
     157        elif self.getBioSQLRoot().seqrecord_key == 'version': 
     158            rv = key.split(".") 
     159            if len(rv) > 2: 
     160                return False 
     161            if len(rv) == 2: 
     162                try: 
     163                    int(rv[1]) 
     164                except ValueError: 
     165                    return False 
     166        else: # default = 'bioentry_id': 
     167            try: 
     168                key = int(key) 
     169            except ValueError: 
     170                return False 
    142171        try: 
    143172            database = self.getDatabase() 
     
    145174            # No acquisition context, fail silently 
    146175            return False 
    147         # TODO: bug in get_Seq_by_primary_id ??? see #XXX 
    148         if database.get_Seq_by_primary_id(key): 
    149             return True 
    150         else: 
     176        try: 
     177            if self.getBioSQLRoot().seqrecord_key == 'accession': 
     178                return bool(database.get_Seq_by_acc(key)) 
     179            if self.getBioSQLRoot().seqrecord_key == 'version': 
     180                return bool(database.get_Seq_by_ver(key)) 
     181            else: # default = 'bioentry_id': 
     182                return bool(database.get_Seq_by_primary_id(key)) # biopython's bug ??? 
     183        except IndexError: 
    151184            return False 
    152         # return key in [str(id) for id in self.keys()] 
    153         #try: 
    154         #    return key in self.keys() 
    155         #except: 
    156         #    return False 
    157185     
    158186    # Acquisition wrappers don't support the __iter__ slot, so re-implement