X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Frecord.py;h=512381ceef8fcd455334c072cb4d17b757cf6f65;hb=1f96bfc77a793cc88422c967e12102211523e459;hp=4b01edf21d5fadc6b017c39c7d582485493ba52e;hpb=df432c2cbb7993f0e6c4a5d44b765de195639ba8;p=sfa.git diff --git a/sfa/util/record.py b/sfa/util/record.py index 4b01edf2..512381ce 100644 --- a/sfa/util/record.py +++ b/sfa/util/record.py @@ -14,8 +14,10 @@ from sfa.trust.gid import * import sfa.util.report from sfa.util.rspec import * from sfa.util.parameter import * +from sfa.util.misc import * +from sfa.util.row import Row -class GeniRecord(dict): +class GeniRecord(Row): """ The GeniRecord class implements a Geni Record. A GeniRecord is a tuple (Hrn, GID, Type, Info). @@ -35,15 +37,26 @@ class GeniRecord(dict): of different types. """ + table_name = 'sfa' + + primary_key = 'record_id' + ### the wsdl generator assumes this is named 'fields' + internal_fields = { + 'record_id': Parameter(int, 'An id that uniquely identifies this record', ro=True), + 'pointer': Parameter(int, 'An id that uniquely identifies this record in an external database ') + } + fields = { + 'authority': Parameter(str, "The authority for this record"), + 'peer_authority': Parameter(str, "The peer authority for this record"), 'hrn': Parameter(str, "Human readable name of object"), 'gid': Parameter(str, "GID of the object"), 'type': Parameter(str, "Record type"), - 'last_updated': Parameter(int, 'Date and time of last update'), - 'date_created': Parameter(int, 'Date and time this record was created'), + 'last_updated': Parameter(int, 'Date and time of last update', ro=True), + 'date_created': Parameter(int, 'Date and time this record was created', ro=True), } - + all_fields = dict(fields.items() + internal_fields.items()) ## # Create a Geni Record # @@ -53,12 +66,13 @@ class GeniRecord(dict): # @param pointer is a pointer to a PLC record # @param dict if !=None, then fill in this record from the dictionary - def __init__(self, hrn=None, gid=None, type=None, pointer=None, dict=None, string=None): + def __init__(self, hrn=None, gid=None, type=None, pointer=None, peer_authority=None, dict=None, string=None): self.dirty = True self.hrn = None self.gid = None self.type = None self.pointer = None + self.set_peer_auth(peer_authority) if hrn: self.set_name(hrn) if gid: @@ -72,7 +86,10 @@ class GeniRecord(dict): if string: self.load_from_string(string) - + + def validate_last_updated(self, last_updated): + return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) + def update(self, new_dict): if isinstance(new_dict, list): new_dict = new_dict[0] @@ -96,6 +113,7 @@ class GeniRecord(dict): Set the name of the record """ self.hrn = hrn + self['hrn'] = hrn self.dirty = True ## @@ -110,8 +128,10 @@ class GeniRecord(dict): if isinstance(gid, StringTypes): self.gid = gid + self['gid'] = gid else: self.gid = gid.save_to_string(save_parents=True) + self['gid'] = gid.save_to_string(save_parents=True) self.dirty = True ## @@ -124,6 +144,7 @@ class GeniRecord(dict): Set the type of the record """ self.type = type + self['type'] = type self.dirty = True ## @@ -136,6 +157,13 @@ class GeniRecord(dict): Set the pointer of the record """ self.pointer = pointer + self['pointer'] = pointer + self.dirty = True + + + def set_peer_auth(self, peer_authority): + self.peer_authority = peer_authority + self['peer_authority'] = peer_authority self.dirty = True ## @@ -180,19 +208,6 @@ class GeniRecord(dict): """ return GID(string=self.gid) - ## - # Return a key that uniquely identifies this record among all records in - # Geni. This key is used to uniquely identify the record in the Geni - # database. - - def get_key(self): - """ - Return a key that uniquely identifies this record among all records in - Geni. This key is used to uniquely identify the record in the Geni - database. - """ - return self.hrn + "#" + self.type - ## # Returns a list of field names in this record. @@ -211,8 +226,8 @@ class GeniRecord(dict): """ Given a field name ("hrn", "gid", ...) return the value of that field. """ - if fieldname == "key": - val = self.get_key() + if fieldname == "authority": + val = get_authority(self['hrn']) else: try: val = getattr(self, fieldname) @@ -321,7 +336,7 @@ class GeniRecord(dict): if key not in order: order.append(key) for key in order: - if key in (self and self.fields): + if key in self and key in self.fields: if key in 'gid' and self[key]: gid = GID(string=self[key]) print " %s:" % key