X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fstorage%2Fmodel.py;h=70258b65920ceef5008d4c13684486d46005095f;hb=81d7102667074faefe6e6990b30b213667039996;hp=590d294f1052ecef69ededa3187bc003f2254bc4;hpb=cd209b84643a5731d957a62d49781925f584e519;p=sfa.git diff --git a/sfa/storage/model.py b/sfa/storage/model.py index 590d294f..70258b65 100644 --- a/sfa/storage/model.py +++ b/sfa/storage/model.py @@ -148,6 +148,20 @@ class RegRecord (Base,AlchemyObj): now=datetime.now() self.last_updated=now +#################### cross-relations tables +# authority x user (pis) association +authority_pi_table = \ + Table ( 'authority_pi', Base.metadata, + Column ('authority_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + Column ('pi_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + ) +# slice x user (researchers) association +slice_researcher_table = \ + Table ( 'slice_researcher', Base.metadata, + Column ('slice_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + Column ('researcher_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + ) + ############################## # all subclasses define a convenience constructor with a default value for type, # and when applicable a way to define local fields in a kwd=value argument @@ -156,6 +170,13 @@ class RegAuthority (RegRecord): __tablename__ = 'authorities' __mapper_args__ = { 'polymorphic_identity' : 'authority' } record_id = Column (Integer, ForeignKey ("records.record_id"), primary_key=True) + #### extensions come here + reg_pis = relationship \ + ('RegUser', + secondary=authority_pi_table, + primaryjoin=RegRecord.record_id==authority_pi_table.c.authority_id, + secondaryjoin=RegRecord.record_id==authority_pi_table.c.pi_id, + backref='reg_authorities_as_pis') def __init__ (self, **kwds): # fill in type if not previously set @@ -167,14 +188,6 @@ class RegAuthority (RegRecord): def __repr__ (self): return RegRecord.__repr__(self).replace("Record","Authority") -#################### -# slice x user (researchers) association -slice_researcher_table = \ - Table ( 'slice_researcher', Base.metadata, - Column ('slice_id', Integer, ForeignKey ('records.record_id'), primary_key=True), - Column ('researcher_id', Integer, ForeignKey ('records.record_id'), primary_key=True), - ) - #################### class RegSlice (RegRecord): __tablename__ = 'slices' @@ -186,7 +199,7 @@ class RegSlice (RegRecord): secondary=slice_researcher_table, primaryjoin=RegRecord.record_id==slice_researcher_table.c.slice_id, secondaryjoin=RegRecord.record_id==slice_researcher_table.c.researcher_id, - backref="reg_slices_as_researcher") + backref='reg_slices_as_researcher') def __init__ (self, **kwds): if 'type' not in kwds: kwds['type']='slice'