# HG changeset patch # User fknauft # Date 1273674882 0 # Node ID 48de7c260ffeadf3a90a906dfb11919bc655eb7d # Parent 7015452299aa37d82d8fae9514464e6a868326d8 first commit diff -r 7015452299aa -r 48de7c260ffe .project --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.project Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,17 @@ + + + ChinaGisRestApi + + + + + + org.python.pydev.PyDevBuilder + + + + + + org.python.pydev.pythonNature + + diff -r 7015452299aa -r 48de7c260ffe .pydevproject --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.pydevproject Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,11 @@ + + + + + +python 2.6 +Default + +/ChinaGisRestApi/src + + diff -r 7015452299aa -r 48de7c260ffe REST_test.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/REST_test.py Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,141 @@ +''' +Created on 26.04.2010 + +@author: fknauft +''' + +from OFS.Folder import Folder +from Acquisition import Implicit +from Globals import DTMLFile,package_home,Persistent +from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from Products.ZSQLExtend import ZSQLExtend +import urllib +import re +import string + +from zope.publisher.interfaces import IPublishTraverse +from zope.interface import implements +#from zope.publisher.interfaces import NotFound +#from zope.app import zapi +#from zope.component import queryMultiAdapter +try: + from ZPublisher.BaseRequest import DefaultPublishTraverse +except: + pass + + +class RESTclass(Folder,Persistent, Implicit): + """Klasse die Methoden fuer die RESTful Abfragen zur Verfuegung stellt. """ + + meta_type="RESTclass" + + def publishTraverse(self,request,name): + """change the traversal if literature object""" + + #actual_url=request['ACTUAL_URL'] + #lastActual=actual_url.split("/")[-1] + + + tr=DefaultPublishTraverse(self, request) + ob= tr.publishTraverse(request, name) + + return ob + + def RESTwrite2File(self,datadir, name,text): +# try: + fileid=name + if fileid in datadir.objectIds(): + datadir.manage_delObjects(fileid) + newfile=open(name,'w') + newfile.write(text) + newfile.close() + file4Read=open(name,'r') + fileInZope=datadir.manage_addFile(id=fileid,file=file4Read) + return "Write successful" +# except: +# return "Could not write" + + def RESTexecuteString(self, function, params=[] ): + + try: + return eval(str(function))(params) + except: + return eval("self."+ str(function))(params) + + + def REST_result2XML(self,data): + listXML= """""" + for line in data: + listXML=listXML+"" + for value in line: + listXML=listXML +str(value) + listXML=listXML +"" + return listXML + + def REST_result2HtmlTable(self,data): + listHtml= "" + for line in data: + listHtml=listHtml+"" + for value in line: + listHtml=listHtml +"" + listHtml=listHtml +"" + listHtml=listHtml+ """
"+str(value)+"
""" + return listHtml + + def REST_getTableNames(self,schema,username,c_string,container): + + results=container.ZSQLSimpleSearch("SELECT oid FROM pg_namespace WHERE nspname LIKE '"+schema+"'") + schema_id=0 + for result in results: + schema_id=getattr(result,'oid') + + SQL="""SELECT relname FROM pg_class WHERE relhaspkey + AND relname NOT LIKE 'pg/_toast%' ESCAPE '/' + AND relname NOT LIKE 'spatial_ref_sys' + AND relname NOT LIKE 'geometry_columns' + AND relname NOT LIKE 'markierung'""" + # AND tablename NOT LIKE 'sql/_%' ESCAPE '/' + if username!={}: + uid='' + username=container.getVar('username') + results=container.ZSQLSimpleSearch("SELECT uid FROM chgis.usernames WHERE username LIKE '"+ str(username) +"'") + for result in results: + uid=container.getAttr(result,'uid') + SQL=SQL+"""AND relowner ="""+str(uid) + + if c_string == 'empty': + SQL = SQL + """ AND int4(reltuples)=0""" + if schema_id != 0: + SQL = SQL + """ AND int4(relnamespace)=""" + str(schema_id) + data=container.ZSQLSimpleSearch(SQL) + return data + + + +manage_addRESTclassForm=PageTemplateFile('zpt/RESTzopetemplate',globals()) + +def manage_addRESTclass(self, id, title='', label='', description='', + createPublic=0, + createUserF=0, + REQUEST=None): + """Add a new Folder object with id *id*. + + If the 'createPublic' and 'createUserF' parameters are set to any true + value, an 'index_html' and a 'UserFolder' objects are created respectively + in the new folder. + """ + + + ob=RESTclass() + ob.id=str(id) + ob.title=title + self._setObject(id, ob) + ob=self._getOb(id) + setattr(ob,'label',label) +# setattr(ob,'description',description) +# setattr(ob,'connection_id',connection_id) + +# checkPermission=getSecurityManager().checkPermission + REQUEST.RESPONSE.redirect('manage_main') + + \ No newline at end of file diff -r 7015452299aa -r 48de7c260ffe RESTinterface.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RESTinterface.py Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,33 @@ +''' +Created on 26.04.2010 + +@author: fknauft +''' + +from zope.publisher.interfaces import IPublishTraverse +from zope.interface import implements +#from zope.publisher.interfaces import NotFound +#from zope.app import zapi +#from zope.component import queryMultiAdapter +try: + from ZPublisher.BaseRequest import DefaultPublishTraverse +except: + pass +class RESTinterface(DefaultPublishTraverse): + """VLP spezifische Erweiterung der Collection""" + + implements(IPublishTraverse) + + def publishTraverse(self,request,name): + """change the traversal if literature object""" + + actual_url=request['ACTUAL_URL'] + lastActual=actual_url.split("/")[-1] + + + tr=DefaultPublishTraverse(self, request) + ob= tr.publishTraverse(request, name) + + return ob + #raise NotFound(self.context, name, request) + #return repr(request) \ No newline at end of file diff -r 7015452299aa -r 48de7c260ffe __init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/__init__.py Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,30 @@ + +import REST_test + +#class RESTinterface(DefaultPublishTraverse): +# """VLP spezifische Erweiterung der Collection""" +# +# meta_type="RESTinterface" +# +# implements(IPublishTraverse) +# +# def publishTraverse(self,request,name): +# """change the traversal if literature object""" +# +# actual_url=request['ACTUAL_URL'] +# lastActual=actual_url.split("/")[-1] +# +# +# tr=DefaultPublishTraverse(self, request) +# ob= tr.publishTraverse(request, name) +# +# return ob + +def initialize(context): + context.registerClass( + REST_test.RESTclass, + constructors = ( + REST_test.manage_addRESTclassForm, + REST_test.manage_addRESTclass + ) + ) diff -r 7015452299aa -r 48de7c260ffe zpt/RESTzopetemplate.zpt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/RESTzopetemplate.zpt Wed May 12 14:34:42 2010 +0000 @@ -0,0 +1,9 @@ +
Header
+

Add a RESTclass

+
+

ID

+

+

Titel

+

+

+