X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=sfa%2Futil%2Fgenitable.py;h=4ad582ba612ff4fed8fcea62623dc7f4989e2d4b;hb=2d017e5431b49461821979dedae59cfce9df0c05;hp=942848f4394e127add312ad83bae6da5179bbdfc;hpb=2eb0f4f09e3a876adea748deada0db84bbe0148c;p=sfa.git diff --git a/sfa/util/genitable.py b/sfa/util/genitable.py index 942848f4..4ad582ba 100644 --- a/sfa/util/genitable.py +++ b/sfa/util/genitable.py @@ -17,11 +17,14 @@ from sfa.util.debug import * class GeniTable: - GENI_TABLE_PREFIX = "sfa" + GENI_TABLE_PREFIX = "sfa$" - def __init__(self, create=False, cninfo=None): + def __init__(self, create=False, hrn="unspecified.default.registry", cninfo=None): - self.tablename = GeniTable.GENI_TABLE_PREFIX + self.hrn = hrn + + # pgsql doesn't like table names with "." in them, to replace it with "$" + self.tablename = GeniTable.GENI_TABLE_PREFIX + self.hrn.replace(".", "$") # establish a connection to the pgsql server self.cnx = DB(cninfo['dbname'], cninfo['address'], port=cninfo['port'], user=cninfo['user'], passwd=cninfo['password']) @@ -39,13 +42,9 @@ class GeniTable: return False def create(self): - seln't like table names with "." in them, to - - # pgsql doesn't like table names with "." in them, to.hrn = hrn querystr = "CREATE TABLE " + self.tablename + " ( \ key text, \ - authority text, \ hrn text, \ gid text, \ type text, \ @@ -54,7 +53,7 @@ class GeniTable: last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP);" template = "CREATE INDEX %s_%s_idx ON %s (%s);" indexes = [template % ( self.tablename, field, self.tablename, field) \ - for field in ['key', 'authority', 'hrn', 'type','pointer']] + for field in ['key', 'hrn', 'type','pointer']] # IF EXISTS doenst exist in postgres < 8.2 try: self.cnx.query('DROP TABLE IF EXISTS ' + self.tablename) @@ -85,12 +84,12 @@ class GeniTable: def update(self, record): dont_update = ['date_created', 'last_updated'] - names = record.get_field_names() - names = [name for name in names if name not in dont_update] + fields = [field for field in record.fields.keys() if field not in dont_update] + fieldvals = record.get_field_value_strings(fields) pairs = [] - for name in names: - val = record.get_field_value_string(name) - pairs.append(name + " = " + val) + for field in fields: + val = record.get_field_value_string(field) + pairs.append(field + " = " + val) update = ", ".join(pairs) query_str = "UPDATE " + self.tablename+ " SET " + update + " WHERE key = '" + record.get_key() + "'" @@ -140,6 +139,15 @@ class GeniTable: result_rec_list.append(GeniRecord(dict=dict).as_dict()) return result_rec_list + def drop(self): + try: + self.cnx.query('DROP TABLE IF EXISTS ' + self.tablename) + except ProgrammingError: + try: + self.cnx.query('DROP TABLE ' + self.tablename) + except ProgrammingError: + pass + @staticmethod def geni_records_purge(cninfo):