X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=sfa%2Futil%2Frecord.py;h=8a50a65e2e6086201a77f4ef78ca5bd8df5a0833;hb=ce4645a2d3deea2616a2ae3cc0933c6a6b9ec17a;hp=de221fc685944fdf85d361e8de6cd34ac77ddf89;hpb=657e8290ebbb4d6b6bcf337a3bc03aff9b42e62b;p=sfa.git diff --git a/sfa/util/record.py b/sfa/util/record.py index de221fc6..8a50a65e 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? ## @@ -11,15 +11,14 @@ from types import StringTypes from sfa.trust.gid import * -import sfa.util.report from sfa.util.rspec import * from sfa.util.parameter import * -from sfa.util.namespace import * +from sfa.util.xrn import get_authority from sfa.util.row import Row -class GeniRecord(Row): +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 @@ -58,7 +57,7 @@ class GeniRecord(Row): } 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 @@ -208,6 +207,22 @@ class GeniRecord(Row): """ return GID(string=self.gid) + ## + # Returns the value of a field + + def get_field(self, fieldname, default=None): + # sometimes records act like classes, and sometimes they act like dicts + try: + return getattr(self, fieldname) + except AttributeError: + try: + return self[fieldname] + except KeyError: + if default != None: + return default + else: + raise + ## # Returns a list of field names in this record. @@ -309,8 +324,8 @@ class GeniRecord(Row): 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 @@ -331,7 +346,7 @@ class GeniRecord(Row): # 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) @@ -348,30 +363,31 @@ class GeniRecord(Row): return dict(self) -class UserRecord(GeniRecord): +class UserRecord(SfaRecord): fields = { 'email': Parameter(str, 'email'), 'first_name': Parameter(str, 'First name'), 'last_name': Parameter(str, 'Last name'), 'phone': Parameter(str, 'Phone Number'), - 'key': Parameter(str, 'Public key'), + 'keys': 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'), 'expires': Parameter(int, 'Date and time this slice exipres'), 'researcher': Parameter([str], 'List of users for this slice'), + 'PI': Parameter([str], 'List of PIs responsible 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'), @@ -379,10 +395,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'), @@ -393,6 +409,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)