fix bug in update method
[sfa.git] / sfa / util / genitable.py
index 942848f..4ad582b 100644 (file)
@@ -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):