# HG changeset patch # User casties # Date 1275919337 0 # Node ID e3ee1f358fe694bfc6eaf4d2d5031460721dd0e4 # Parent 0e2d167d0983390664b61414def3c7e25e502d86 new version that doesn't use ZSQLExtend but the database connection more directly. new templates to go with that (returned data structures are different) diff -r 0e2d167d0983 -r e3ee1f358fe6 RestDbInterface.py --- a/RestDbInterface.py Wed Jun 02 15:44:03 2010 +0000 +++ b/RestDbInterface.py Mon Jun 07 14:02:17 2010 +0000 @@ -15,6 +15,8 @@ #from zope.publisher.interfaces import NotFound #from zope.app import zapi #from zope.component import queryMultiAdapter +import Shared.DC.ZRDB.DA +from Products.ZSQLMethods.SQL import SQLConnectionIDs class RestDbInterface(Folder): @@ -26,6 +28,12 @@ implements(IPublishTraverse) meta_type="RESTdb" + manage_options=Folder.manage_options+( + {'label':'Config','action':'manage_editRestDbInterfaceForm'}, + ) + + # management templates + manage_editRestDbInterfaceForm=PageTemplateFile('zpt/editRestDbInterface',globals()) # data templates XML_list_schemas = PageTemplateFile('zpt/XML_list_schemas', globals()) @@ -37,13 +45,54 @@ - def __init__(self, id, title): + def __init__(self, id, title, connection_id=None): """init""" self.id = id self.title = title + # database connection id + self.connection_id = connection_id # create template folder self.manage_addFolder('template') + + def getCursor(self): + """returns fresh DB cursor""" + conn = getattr(self,"_v_database_connection",None) + if conn is None: + # create a new connection object + try: + if self.connection_id is None: + # try to take the first existing ID + connids = SQLConnectionIDs(self) + if len(connids) > 0: + connection_id = connids[0][0] + self.connection_id = connection_id + logging.debug("connection_id: %s"%repr(connection_id)) + + da = getattr(self, self.connection_id) + da.connect('') + # we copy the DAs database connection + conn = da._v_database_connection + #conn._register() # register with the Zope transaction system + self._v_database_connection = conn + except Exception, e: + raise IOError("No database connection! (%s)"%str(e)) + + cursor = conn.getCursor() + return cursor + + def executeSQL(self, query, *args): + """execute query with args on database and return all results. + result format: {"fields":fields, "rows":data}""" + cur = self.getCursor() + cur.execute(query, args) + # description of returned fields + fields = cur.description + # get all data in an array + data = cur.fetchall() + cur.close() + return {"fields":fields, "rows":data} + def publishTraverse(self,request,name): """change the traversal""" @@ -91,7 +140,7 @@ # don't know what to do return str(REQUEST) - + def showTable(self,format='XML',schema='public',table=None): """returns PageTemplate with tables""" logging.debug("showtable") @@ -106,8 +155,7 @@ def getTable(self,schema='public',table=None,username='guest'): """return table data""" logging.debug("gettable") - qstr="select * from %s"%table - data=self.ZSQLSimpleSearch(qstr) + data = self.executeSQL("select * from %s"%table) return data def showListOfTables(self,format='XML',schema='public'): @@ -129,7 +177,7 @@ WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)""" #qstr="select attname, format_type(pg_attribute.atttypid, pg_attribute.atttypmod) from pg_attribute, pg_class where attrelid = pg_class.oid and pg_attribute.attnum > 0" - data=self.ZSQLSimpleSearch(qstr) + data=self.executeSQL(qstr) return data def showListOfSchemas(self,format='XML'): @@ -146,10 +194,22 @@ """return list of schemas""" logging.debug("getlistofschemas") # TODO: really look up schemas - data=['public'] + data={'fields':'schemas','data':'public'} return data + def manage_editRestDbInterface(self, title=None, connection_id=None, + REQUEST=None): + """Change the object""" + if title is not None: + self.title = title + + if connection_id is not None: + self.connection_id = connection_id + + #checkPermission=getSecurityManager().checkPermission + REQUEST.RESPONSE.redirect('manage_main') + manage_addRestDbInterfaceForm=PageTemplateFile('zpt/addRestDbInterface',globals()) diff -r 0e2d167d0983 -r e3ee1f358fe6 zpt/HTML_list_schemas.zpt --- a/zpt/HTML_list_schemas.zpt Wed Jun 02 15:44:03 2010 +0000 +++ b/zpt/HTML_list_schemas.zpt Mon Jun 07 14:02:17 2010 +0000 @@ -1,19 +1,19 @@ - + + The title -

List of schemas

- + - - - +
+ +
diff -r 0e2d167d0983 -r e3ee1f358fe6 zpt/HTML_list_tables.zpt --- a/zpt/HTML_list_tables.zpt Wed Jun 02 15:44:03 2010 +0000 +++ b/zpt/HTML_list_tables.zpt Mon Jun 07 14:02:17 2010 +0000 @@ -1,19 +1,19 @@ - + + The title -

List of tables for schema

- + - - - +
+ +
diff -r 0e2d167d0983 -r e3ee1f358fe6 zpt/HTML_table.zpt --- a/zpt/HTML_table.zpt Wed Jun 02 15:44:03 2010 +0000 +++ b/zpt/HTML_table.zpt Mon Jun 07 14:02:17 2010 +0000 @@ -1,21 +1,21 @@ - + + The title -

table

- +
- - - +
+
+
diff -r 0e2d167d0983 -r e3ee1f358fe6 zpt/editRestDbInterface.zpt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/editRestDbInterface.zpt Mon Jun 07 14:02:17 2010 +0000 @@ -0,0 +1,9 @@ +
Header
+

Edit a RESTdb

+
+

Title

+

+

Connection ID

+

+

+