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).
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
#
# @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:
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]
Set the name of the record
"""
self.hrn = hrn
+ self['hrn'] = hrn
self.dirty = True
##
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
##
Set the type of the record
"""
self.type = type
+ self['type'] = type
self.dirty = True
##
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
##
"""
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.
"""
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)
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