class GelBand(db.Model, MGIModel): __tablename__ = "gxd_gelband" _gelband_key = db.Column(db.Integer, primary_key=True) _gelrow_key = db.Column(db.Integer, mgi_fk("gxd_gelrow._gelrow_key")) _gellane_key = db.Column(db.Integer, mgi_fk("gxd_gellane._gellane_key")) _strength_key = db.Column(db.Integer) bandnote = db.Column(db.String()) strength = db.column_property( db.select([GxdStrength.strength ]).where(GxdStrength._strength_key == _strength_key)) gelrow_sequencenum = db.column_property( db.select([GelRow.sequencenum ]).where(GelRow._gelrow_key == _gelrow_key)) gelrow = db.relationship("GelRow", uselist=False)
class GelRow(db.Model, MGIModel): __tablename__ = "gxd_gelrow" _gelrow_key = db.Column(db.Integer, primary_key=True) _assay_key = db.Column(db.Integer, mgi_fk("gxd_assay._assay_key")) _gelunits_key = db.Column(db.Integer) sequencenum = db.Column(db.Integer) rownote = db.Column(db.String()) size = db.Column(db.Float()) gelunits = db.column_property( db.select([GelUnits.units ]).where(GelUnits._gelunits_key == _gelunits_key)) @property def size_and_units(self): return "%s %s" % (self.size, self.gelunits)
class Sequence(db.Model, MGIModel): __tablename__ = "seq_sequence" _sequence_key = db.Column(db.Integer, primary_key=True) _sequencetype_key = db.Column(db.Integer) _sequencequality_key = db.Column(db.Integer) _sequencestatus_key = db.Column(db.Integer) _sequenceprovider_key = db.Column(db.Integer) _organism_key = db.Column(db.Integer, mgi_fk("mgi_organism._organism_key")) length = db.Column(db.String()) description = db.Column(db.String()) version = db.Column(db.String()) division = db.Column(db.String()) # constants _mgitype_key = 19 # column definitions type = db.column_property( db.select([VocTerm.term ]).where(VocTerm._term_key == _sequencetype_key)) #relationships markers = db.relationship( "Marker", secondary=SeqMarkerCache.__table__, primaryjoin="Sequence._sequence_key==SeqMarkerCache._sequence_key", secondaryjoin="SeqMarkerCache._marker_key==Marker._marker_key", foreign_keys="[Sequence._sequence_key,Marker._marker_key]", backref="sequences", order_by="Marker.symbol") # sequence can have multiple IDs accession_objects = db.relationship( "Accession", primaryjoin="and_(Accession._object_key==Sequence._sequence_key," "Accession.preferred==1," "Accession._mgitype_key==%s)" % (_mgitype_key), foreign_keys="[Accession._object_key]", order_by="Accession.accid") source = db.relationship("ProbeSource", secondary=SeqSourceAssoc.__table__, uselist=False)
class Note(db.Model, MGIModel): __tablename__ = "mgi_note" _note_key = db.Column(db.Integer, primary_key=True) _object_key = db.Column(db.Integer) _mgitype_key = db.Column(db.Integer) _notetype_key = db.Column(db.Integer) notetype = db.column_property( db.select([NoteType.notetype ]).where(NoteType._notetype_key == _notetype_key)) chunks = db.relationship("NoteChunk", order_by="NoteChunk.sequencenum") @property def text(self): return ''.join([c.note for c in self.chunks]) def __repr__(self): return self.text
class SeqMarkerCache(db.Model, MGIModel): __tablename__ = "seq_marker_cache" _cache_key = db.Column(db.Integer, primary_key=True) _sequence_key = db.Column(db.Integer, mgi_fk("seq_sequence._sequence_key")) _marker_key = db.Column(db.Integer, mgi_fk("mrk_marker._marker_key")) _organism_key = db.Column(db.Integer) _logicaldb_key = db.Column(db.Integer, mgi_fk("acc_logicaldb._logicaldb_key")) accid = db.Column(db.String()) rawbiotype = db.Column(db.String()) _sequenceprovider_key = db.Column(db.Integer) _biotypeconflict_key = db.Column(db.Integer, mgi_fk("voc_term._term_key")) annotation_date = db.Column(db.DateTime) # constants # the biotype conflict term _biotypeconflict_yes_key = 5420767 # column properties sequenceprovider = db.column_property( db.select([VocTerm.term ]).where(VocTerm._term_key == _sequenceprovider_key)) marker = db.relationship("Marker") logicaldb_obj = db.relationship("LogicalDb") @property def sequence_url(self): """ This requires loading logicaldb_obj and logicaldb_obj.actualdb """ url = "" if self.logicaldb_obj and \ self.logicaldb_obj.actualdb: url = self.logicaldb_obj.actualdb.url.replace("@@@@", self.accid) return url