X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fstorage%2Frecord.py;h=964d65c64f5be43b74f409d1ae92cc9162b1d753;hb=37a296de43dfa860362d4482cfb2339ee55736dc;hp=46c6699e128314453a3eb0c831a49c44cc7a60f5;hpb=249afa1a443c67593d37d7c7fda336178ab484ee;p=sfa.git diff --git a/sfa/storage/record.py b/sfa/storage/record.py index 46c6699e..964d65c6 100644 --- a/sfa/storage/record.py +++ b/sfa/storage/record.py @@ -5,13 +5,12 @@ ## from types import StringTypes - from sfa.trust.gid import GID - from sfa.storage.parameter import Parameter from sfa.util.xrn import get_authority from sfa.storage.row import Row from sfa.util.xml import XML +from sfa.util.sfalogging import logger class SfaRecord(Row): """ @@ -62,13 +61,14 @@ class SfaRecord(Row): # @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, peer_authority=None, dict=None, string=None): + def __init__(self, hrn=None, gid=None, type=None, pointer=None, authority=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) + self.set_authority(authority) if hrn: self.set_name(hrn) if gid: @@ -112,6 +112,17 @@ class SfaRecord(Row): self['hrn'] = hrn self.dirty = True + def set_authority(self, authority): + """ + Set the authority + """ + if not authority: + authority = "" + self.authority = authority + self['authority'] = authority + self.dirty = True + + ## # Set the GID of the record # @@ -353,9 +364,58 @@ class SfaRecord(Row): else: print " %s: %s" % (key, self[key]) + def summary_string(self): + return "Record(record_id=%s, hrn=%s, type=%s, auth=%s, pointer=%s)" % \ + (self.get('record_id'), self.get('hrn'), self.get('type'), self.get('auth'), \ + self.get('pointer')) + def getdict(self): return dict(self) - + + def sync(self, verbose=False): + """ + Sync this record with the database. + """ + from sfa.storage.table import SfaTable + table = SfaTable() + filter = {} + if self.get('record_id'): + filter['record_id'] = self.get('record_id') + if self.get('hrn') and self.get('type'): + filter['hrn'] = self.get('hrn') + filter['type'] = self.get('type') + if self.get('pointer'): + filter['pointer'] = self.get('pointer') + existing_records = table.find(filter) + if not existing_records: + table.insert(self) + if verbose: + logger.info("Inserted record: %s" %self.summary_string()) + else: + existing_record = existing_records[0] + self['record_id'] = existing_record['record_id'] + table.upate(self) + if verbose: + logger.info("Updated record: %s" % self.summary_string()) + + def delete(self, verbose=False): + """ + Remove record from the database. + """ + from sfa.storage.table import SfaTable + table = SfaTable() + if self.get('record_id'): + filter['record_id'] = self.get('record_id') + if self.get('hrn') and self.get('type'): + filter['hrn'] = self.get('hrn') + filter['type'] = self.get('type') + if self.get('pointer'): + filter['pointer'] = self.get('pointer') + existing_records = table.find(filter) + for record in existing_records: + table.remove(record) + if verbose: + logger.info("Removed record: %s" % self.summary_string()) class UserRecord(SfaRecord):