X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fstorage%2Fmodel.py;h=18029d10a6669facec15a21a0caeae3a29eeb96f;hb=90271586b9b2a315e1ff8106b95a3233f0a46db6;hp=810af6b0760e947eaa73dd46a6f3747591fe8591;hpb=f69270a701959bd4ed0604a7d4cb9093c0b23906;p=sfa.git diff --git a/sfa/storage/model.py b/sfa/storage/model.py index 810af6b0..18029d10 100644 --- a/sfa/storage/model.py +++ b/sfa/storage/model.py @@ -165,25 +165,6 @@ class RegRecord (Base,AlchemyObj): self.last_updated=now ############################## -class RegUser (RegRecord): - __tablename__ = 'users' - # these objects will have type='user' in the records table - __mapper_args__ = { 'polymorphic_identity' : 'user' } - record_id = Column (Integer, ForeignKey ("records.record_id"), primary_key=True) - email = Column ('email', String) - - # append stuff at the end of the record __repr__ - def __repr__ (self): - result = RegRecord.__repr__(self).replace("Record","User") - result.replace ("]"," email=%s"%self.email) - result += "]" - return result - - @validates('email') - def validate_email(self, key, address): - assert '@' in address - return address - class RegAuthority (RegRecord): __tablename__ = 'authorities' __mapper_args__ = { 'polymorphic_identity' : 'authority' } @@ -193,6 +174,7 @@ class RegAuthority (RegRecord): def __repr__ (self): return RegRecord.__repr__(self).replace("Record","Authority") +############################## class RegSlice (RegRecord): __tablename__ = 'slices' __mapper_args__ = { 'polymorphic_identity' : 'slice' } @@ -201,6 +183,7 @@ class RegSlice (RegRecord): def __repr__ (self): return RegRecord.__repr__(self).replace("Record","Slice") +############################## class RegNode (RegRecord): __tablename__ = 'nodes' __mapper_args__ = { 'polymorphic_identity' : 'node' } @@ -209,6 +192,56 @@ class RegNode (RegRecord): def __repr__ (self): return RegRecord.__repr__(self).replace("Record","Node") +############################## +class RegUser (RegRecord): + __tablename__ = 'users' + # these objects will have type='user' in the records table + __mapper_args__ = { 'polymorphic_identity' : 'user' } + record_id = Column (Integer, ForeignKey ("records.record_id"), primary_key=True) + email = Column ('email', String) + keys = relationship ('RegKey', backref='user') + + def __init__ (self, **kwds): + # handle local settings + if 'email' in kwds: self.email=kwds.pop('email') + # fill in type if not previously set + if 'type' not in kwds: kwds['type']='user' + RegRecord.__init__(self, **kwds) + + # append stuff at the end of the record __repr__ + def __repr__ (self): + result = RegRecord.__repr__(self).replace("Record","User") + result.replace ("]"," email=%s"%self.email) + result += "]" + return result + + @validates('email') + def validate_email(self, key, address): + assert '@' in address + return address + +#################### +# xxx tocheck : not sure about eager loading of this one +# meaning, when querying the whole records, we expect there should +# be a single query to fetch all the keys +class RegKey (Base): + __tablename__ = 'keys' + key_id = Column (Integer, primary_key=True) + record_id = Column (Integer, ForeignKey ("records.record_id")) + key = Column (String) + pointer = Column (Integer, default = -1) + + def __init__ (self, key, pointer=None): + self.key=key + if pointer: self.pointer=pointer + + def __repr__ (self): + result="[key key=%s..."%self.key[8:16] + try: result += " user=%s"%self.user.record_id + except: result += " " + result += "]" + return result + ############################## # although the db needs of course to be reachable, # the schema management functions are here and not in alchemy @@ -245,6 +278,7 @@ def make_record_dict (record_dict): elif type=='node': result=RegNode (dict=record_dict) else: + logger.debug("Untyped RegRecord instance") result=RegRecord (dict=record_dict) logger.info ("converting dict into Reg* with type=%s"%type) logger.info ("returning=%s"%result)