X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Frecord.py;h=aad12ca6c006de9f6e16d230a1236bd5c0d2ed54;hb=3d7237fa0b5f2b4a60cb97c7fb3b6aecfd94558a;hp=f2a455bf7fb536d178b972a4ed093ea669b5d699;hpb=1971124b0a49cfbd7bce902722a1512baf8562f3;p=sfa.git diff --git a/sfa/util/record.py b/sfa/util/record.py index f2a455bf..aad12ca6 100644 --- a/sfa/util/record.py +++ b/sfa/util/record.py @@ -1,5 +1,5 @@ ## -# Implements support for geni records +# Implements support for SFA records # # TODO: Use existing PLC database methods? or keep this separate? ## @@ -14,12 +14,12 @@ 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.namespace import * +from sfa.util.row import Row - -class GeniRecord(dict): +class SfaRecord(Row): """ - The GeniRecord class implements a Geni Record. A GeniRecord is a tuple + The SfaRecord class implements an SFA Record. A SfaRecord is a tuple (Hrn, GID, Type, Info). Hrn specifies the Human Readable Name of the object @@ -37,23 +37,28 @@ 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'), + '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 + # Create an SFA Record # # @param name if !=None, assign the name of the record # @param gid if !=None, assign the gid of the record @@ -61,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: @@ -79,6 +85,10 @@ class GeniRecord(dict): self.load_from_dict(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): @@ -150,6 +160,12 @@ class GeniRecord(dict): 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 + ## # Return the name (HRN) of the record @@ -293,8 +309,8 @@ class GeniRecord(dict): record = RecordSpec() record.parseString(str) record_dict = record.toDict() - geni_dict = record_dict['record'] - self.load_from_dict(geni_dict) + sfa_dict = record_dict['record'] + self.load_from_dict(sfa_dict) ## # Dump the record to stdout @@ -315,7 +331,7 @@ class GeniRecord(dict): # self.get_gid_object().dump(8, dump_parents) #print " pointer:", self.pointer - order = GeniRecord.fields.keys() + order = SfaRecord.fields.keys() for key in self.keys(): if key not in order: order.append(key) @@ -332,7 +348,7 @@ class GeniRecord(dict): return dict(self) -class UserRecord(GeniRecord): +class UserRecord(SfaRecord): fields = { 'email': Parameter(str, 'email'), @@ -342,9 +358,9 @@ class UserRecord(GeniRecord): 'key': Parameter(str, 'Public key'), 'slices': Parameter([str], 'List of slices this user belongs to'), } - fields.update(GeniRecord.fields) + fields.update(SfaRecord.fields) -class SliceRecord(GeniRecord): +class SliceRecord(SfaRecord): fields = { 'name': Parameter(str, 'Slice name'), 'url': Parameter(str, 'Slice url'), @@ -352,10 +368,10 @@ class SliceRecord(GeniRecord): 'researcher': Parameter([str], 'List of users for this slice'), 'description': Parameter([str], 'Description of this slice'), } - fields.update(GeniRecord.fields) + fields.update(SfaRecord.fields) -class NodeRecord(GeniRecord): +class NodeRecord(SfaRecord): fields = { 'hostname': Parameter(str, 'This nodes dns name'), 'node_type': Parameter(str, 'Type of node this is'), @@ -363,10 +379,10 @@ class NodeRecord(GeniRecord): 'latitude': Parameter(str, 'latitude'), 'longitude': Parameter(str, 'longitude'), } - fields.update(GeniRecord.fields) + fields.update(SfaRecord.fields) -class AuthorityRecord(GeniRecord): +class AuthorityRecord(SfaRecord): fields = { 'name': Parameter(str, 'Name'), 'login_base': Parameter(str, 'login base'), @@ -377,6 +393,6 @@ class AuthorityRecord(GeniRecord): 'researcher': Parameter([str], 'List of researchers'), 'PI': Parameter([str], 'List of Principal Investigators'), } - fields.update(GeniRecord.fields) + fields.update(SfaRecord.fields)