changeset 1:48de7c260ffe

first commit
author fknauft
date Wed, 12 May 2010 14:34:42 +0000
parents 7015452299aa
children 61a3764cd5fb
files .project .pydevproject REST_test.py RESTinterface.py __init__.py zpt/RESTzopetemplate.zpt
diffstat 6 files changed, 241 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.project	Wed May 12 14:34:42 2010 +0000
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ChinaGisRestApi</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.python.pydev.pythonNature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.pydevproject	Wed May 12 14:34:42 2010 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?>
+
+<pydev_project>
+
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
+<path>/ChinaGisRestApi/src</path>
+</pydev_pathproperty>
+</pydev_project>
--- /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= """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>"""
+        for line in data:
+            listXML=listXML+"<name>"
+            for value in line:
+                listXML=listXML +str(value)
+                listXML=listXML +"</name>"
+        return listXML
+    
+    def REST_result2HtmlTable(self,data):
+        listHtml= "<table>"
+        for line in data:
+            listHtml=listHtml+"<tr>"
+            for value in line:
+                listHtml=listHtml +"<td>"+str(value)+"</td>"               
+            listHtml=listHtml +"</tr>"
+        listHtml=listHtml+ """ </table> """ 
+        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
--- /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
--- /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
+          )
+        )
--- /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 @@
+  <div tal:replace="structure here/manage_page_header">Header</div>
+  <h2>Add a RESTclass</h2>
+  <form method="post" action="manage_addRESTclass">
+    <p class="form-label">ID</p>
+        <p class="form-element"><input size="80" name="id"/></p>
+    <p class="form-label">Titel</p>
+        <p class="form-element"><input size="80" name="titel"/></p>
+     <p><input type="submit" value="Add" /></p>
+  </form>