X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Ftable.py;h=065e8abb5d86470ee1e1cad53aa6bb36ec8d2a56;hb=57b6a99255d4a88be9c0f910f8524677e34ff4bc;hp=bccda20dcded85a53912e88c339221bfdb3ca305;hpb=c0f8a6b783387a8dfef0cec6f80a4539b175683d;p=sfa.git diff --git a/sfa/util/table.py b/sfa/util/table.py index bccda20d..065e8abb 100644 --- a/sfa/util/table.py +++ b/sfa/util/table.py @@ -1,19 +1,15 @@ -### $Id$ -### $URL$ # # implements support for SFA records stored in db tables # # TODO: Use existing PLC database methods? or keep this separate? -import report -import pgdb +from types import StringTypes -from sfa.util.PostgreSQL import * -from sfa.trust.gid import * -from sfa.util.record import * -from sfa.util.debug import * -from sfa.util.config import * -from sfa.util.filter import * +from sfa.util.config import Config +from sfa.util.parameter import Parameter +from sfa.util.filter import Filter +from sfa.util.PostgreSQL import PostgreSQL +from sfa.util.record import SfaRecord, AuthorityRecord, NodeRecord, SliceRecord, UserRecord class SfaTable(list): @@ -28,7 +24,7 @@ class SfaTable(list): if record_filter: records = self.find(record_filter) - for record in reocrds: + for record in records: self.append(record) def exists(self): @@ -41,7 +37,7 @@ class SfaTable(list): def db_fields(self, obj=None): db_fields = self.db.fields(self.SFA_TABLE_PREFIX) - return dict( [ (key,value) for (key, value) in obj.items() \ + return dict( [ (key,value) for (key, value) in obj.iteritems() \ if key in db_fields and self.is_writable(key, value, SfaRecord.fields)] ) @@ -84,23 +80,27 @@ class SfaTable(list): self.db.do(querystr) for index in indexes: self.db.do(index) - + + self.db.commit() + def remove(self, record): - query_str = "DELETE FROM %s WHERE record_id = %s" % \ - (self.tablename, record['record_id']) - self.db.do(query_str) + params = {'record_id': record['record_id']} + template = "DELETE FROM %s " % self.tablename + sql = template + "WHERE record_id = %(record_id)s" + self.db.do(sql, params) # if this is a site, remove all records where 'authority' == the # site's hrn - if record['type'] == 'site': - sql = " DELETE FROM %s WHERE authority = %s" % \ - (self.tablename, record['hrn']) - self.db.do(sql) + if record['type'] == 'authority': + params = {'authority': record['hrn']} + sql = template + "WHERE authority = %(authority)s" + self.db.do(sql, params) + self.db.commit() def insert(self, record): db_fields = self.db_fields(record) keys = db_fields.keys() - values = [self.db.param(key, value) for (key, value) in db_fields.items()] + values = [self.db.param(key, value) for (key, value) in db_fields.iteritems()] query_str = "INSERT INTO " + self.tablename + \ "(" + ",".join(keys) + ") " + \ "VALUES(" + ",".join(values) + ")" @@ -119,7 +119,7 @@ class SfaTable(list): def update(self, record): db_fields = self.db_fields(record) keys = db_fields.keys() - values = [self.db.param(key, value) for (key, value) in db_fields.items()] + values = [self.db.param(key, value) for (key, value) in db_fields.iteritems()] columns = ["%s = %s" % (key, value) for (key, value) in zip(keys, values)] query_str = "UPDATE %s SET %s WHERE record_id = %s" % \ (self.tablename, ", ".join(columns), record['record_id']) @@ -180,9 +180,11 @@ class SfaTable(list): def drop(self): try: self.db.do('DROP TABLE IF EXISTS ' + self.tablename) + self.db.commit() except: try: self.db.do('DROP TABLE ' + self.tablename) + self.db.commit() except: pass