-### $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 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 *
if record_filter:
records = self.find(record_filter)
- for record in reocrds:
+ for record in records:
self.append(record)
def exists(self):
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)] )
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) + ")"
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'])
self.db.commit()
def quote_string(self, value):
- return str(self.quote(value))
+ return str(self.db.quote(value))
def quote(self, value):
- """
- Returns quoted version of the specified value.
- """
-
- # The pgdb._quote function is good enough for general SQL
- # quoting, except for array types.
- if isinstance(value, (list, tuple, set)):
- return "ARRAY[%s]" % ", ".join(map, self.quote_string, value)
- else:
- return pgdb._quote(value)
+ return self.db.quote(value)
def find(self, record_filter = None, columns=None):
if not columns:
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
- def sfa_records_purge():
+ def sfa_records_purge(self):
self.drop()