##
-# Implements support for geni records
+# Implements support for SFA records
#
# TODO: Use existing PLC database methods? or keep this separate?
##
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
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 ')
}
}
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
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):
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
# 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)
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'),
'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'),
'researcher': Parameter([str], 'List of researchers'),
'PI': Parameter([str], 'List of Principal Investigators'),
}
- fields.update(GeniRecord.fields)
+ fields.update(SfaRecord.fields)