review on imports & svn keywords
[sfa.git] / geni / util / genitable.py
index 36d40e9..13ce7d9 100644 (file)
@@ -4,11 +4,15 @@
 #
 # TODO: Use existing PLC database methods? or keep this separate?
 
+### $Id$
+### $URL$
+
 import report
 
 from pg import DB, ProgrammingError
 from gid import *
 from record import *
+from geni.util.debug import *
 
 GENI_TABLE_PREFIX = "geni$"
 
@@ -37,13 +41,16 @@ class GeniTable():
         return False
 
     def create(self):
+        
         querystr = "CREATE TABLE " + self.tablename + " ( \
                 key text, \
                 name text, \
                 gid text, \
                 type text, \
                 pointer integer);"
-
+        template = "CREATE INDEX %s_%s_idx ON %s (%s);"
+        indexes = [template % ( self.tablename, field, self.tablename, field) \
+                   for field in ['name', 'type' ]]
         # IF EXISTS doenst exist in postgres < 8.2
         try:
             self.cnx.query('DROP TABLE IF EXISTS ' + self.tablename)
@@ -54,6 +61,8 @@ class GeniTable():
                 pass
         
         self.cnx.query(querystr)
+        for index in indexes:
+            self.cnx.query(index)
 
     def remove(self, record):
         query_str = "DELETE FROM " + self.tablename + " WHERE key = '" + record.get_key() + "'"
@@ -86,14 +95,24 @@ class GeniTable():
         result_dict_list = []
         for dict in dict_list:
            if (type=="*") or (dict['type'] == type):
+               dict['hrn'] = dict['name'] 
                result_dict_list.append(dict)
         return result_dict_list
 
     def find(self, type, value, searchfield):
         result_dict_list = self.find_dict(type, value, searchfield)
         result_rec_list = []
-        for dict in result_dict_list:
-            result_rec_list.append(GeniRecord(dict=dict))
+        for result in result_dict_list:
+            if result['type'] in ['authority']:
+                result_rec_list.append(AuthorityRecord(dict=result))
+            elif result['type'] in ['node']:
+                result_rec_list.append(NodeRecord(dict=result))
+            elif result['type'] in ['slice']:
+                result_rec_list.append(SliceRecord(dict=result))
+            elif result['type'] in ['user']:
+                result_rec_list.append(UserRecord(dict=result))
+            else:
+                result_rec_list.append(GeniRecord(dict=result))
         return result_rec_list
 
     def resolve_dict(self, type, hrn):
@@ -111,7 +130,7 @@ class GeniTable():
         result_dict_list = self.list_dict()
         result_rec_list = []
         for dict in result_dict_list:
-            result_rec_list.append(GeniRecord(dict=dict))
+            result_rec_list.append(GeniRecord(dict=dict).as_dict())
         return result_rec_list
 
 def set_geni_table_prefix(x):