# 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 +""+str(value)+" | "
+ listHtml=listHtml +"
"
+ listHtml=listHtml+ """
"""
+ 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
+