Removing GeniClient
[sfa.git] / sfa / util / genitable.py
index 4aae797..bf436bc 100644 (file)
@@ -62,6 +62,7 @@ class GeniTable(list):
 
         return False
 
+
     def create(self):
         
         querystr = "CREATE TABLE " + self.tablename + " ( \
@@ -91,8 +92,16 @@ class GeniTable(list):
             self.cnx.query(index)
 
     def remove(self, record):
-        query_str = "DELETE FROM %s WHERE record_id = %s" % (self.tablename, record['record_id']) 
+        query_str = "DELETE FROM %s WHERE record_id = %s" % \
+                    (self.tablename, record['record_id']) 
         self.cnx.query(query_str)
+        
+        # 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.cnx.query(sql) 
 
     def insert(self, record):
         db_fields = self.db_fields(record)
@@ -117,16 +126,15 @@ class GeniTable(list):
         db_fields = self.db_fields(record)
         keys = db_fields.keys()
         values = [self.db.param(key, value) for (key, value) in db_fields.items()]
-        pairs = []
-        for (key, value) in db_fields.items():
-            pairs.append(key + " = " + value)
-        update = ", ".join(pairs)
-
+        columns = ["%s = %s" % (key, value) for (key, value) in zip(keys, values)]
         query_str = "UPDATE %s SET %s WHERE record_id = %s" % \
-                    (self.tablename, update, record['record_id'])
+                    (self.tablename, ", ".join(columns), record['record_id'])
         self.db.do(query_str, db_fields)
         self.db.commit()
 
+    def quote_string(self, value):
+        return str(self.quote(value))
+
     def quote(self, value):
         """
         Returns quoted version of the specified value.
@@ -135,12 +143,16 @@ class GeniTable(list):
         # 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, value)
+            return "ARRAY[%s]" % ", ".join(map, self.quote_string, value)
         else:
             return pgdb._quote(value)
 
-    def find(self, record_filter = None):
-        sql = "SELECT * FROM %s WHERE True " % self.tablename
+    def find(self, record_filter = None, columns=None):
+        if not columns:
+            columns = "*"
+        else:
+            columns = ",".join(columns)
+        sql = "SELECT %s FROM %s WHERE True " % (columns, self.tablename)
         
         if isinstance(record_filter, (list, tuple, set)):
             ints = filter(lambda x: isinstance(x, (int, long)), record_filter)
@@ -162,9 +174,9 @@ class GeniTable(list):
             results = [results]
         return results
 
-    def findObjects(self, record_filter = None):
+    def findObjects(self, record_filter = None, columns=None):
         
-        results = self.find(record_filter) 
+        results = self.find(record_filter, columns
         result_rec_list = []
         for result in results:
             if result['type'] in ['authority']: