1
|
1 '''
|
|
2 Created on 26.04.2010
|
|
3
|
|
4 @author: fknauft
|
|
5 '''
|
|
6
|
|
7 from OFS.Folder import Folder
|
|
8 from Acquisition import Implicit
|
|
9 from Globals import DTMLFile,package_home,Persistent
|
|
10 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
|
|
11 from Products.ZSQLExtend import ZSQLExtend
|
|
12 import urllib
|
|
13 import re
|
|
14 import string
|
|
15
|
|
16 from zope.publisher.interfaces import IPublishTraverse
|
|
17 from zope.interface import implements
|
|
18 #from zope.publisher.interfaces import NotFound
|
|
19 #from zope.app import zapi
|
|
20 #from zope.component import queryMultiAdapter
|
|
21 try:
|
|
22 from ZPublisher.BaseRequest import DefaultPublishTraverse
|
|
23 except:
|
|
24 pass
|
|
25
|
|
26
|
|
27 class RESTclass(Folder,Persistent, Implicit):
|
|
28 """Klasse die Methoden fuer die RESTful Abfragen zur Verfuegung stellt. """
|
|
29
|
|
30 meta_type="RESTclass"
|
|
31
|
|
32 def publishTraverse(self,request,name):
|
|
33 """change the traversal if literature object"""
|
|
34
|
|
35 #actual_url=request['ACTUAL_URL']
|
|
36 #lastActual=actual_url.split("/")[-1]
|
|
37
|
|
38
|
|
39 tr=DefaultPublishTraverse(self, request)
|
|
40 ob= tr.publishTraverse(request, name)
|
|
41
|
|
42 return ob
|
|
43
|
|
44 def RESTwrite2File(self,datadir, name,text):
|
|
45 # try:
|
|
46 fileid=name
|
|
47 if fileid in datadir.objectIds():
|
|
48 datadir.manage_delObjects(fileid)
|
|
49 newfile=open(name,'w')
|
|
50 newfile.write(text)
|
|
51 newfile.close()
|
|
52 file4Read=open(name,'r')
|
|
53 fileInZope=datadir.manage_addFile(id=fileid,file=file4Read)
|
|
54 return "Write successful"
|
|
55 # except:
|
|
56 # return "Could not write"
|
|
57
|
|
58 def RESTexecuteString(self, function, params=[] ):
|
|
59
|
|
60 try:
|
|
61 return eval(str(function))(params)
|
|
62 except:
|
|
63 return eval("self."+ str(function))(params)
|
|
64
|
|
65
|
|
66 def REST_result2XML(self,data):
|
|
67 listXML= """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>"""
|
|
68 for line in data:
|
|
69 listXML=listXML+"<name>"
|
|
70 for value in line:
|
|
71 listXML=listXML +str(value)
|
|
72 listXML=listXML +"</name>"
|
|
73 return listXML
|
|
74
|
|
75 def REST_result2HtmlTable(self,data):
|
|
76 listHtml= "<table>"
|
|
77 for line in data:
|
|
78 listHtml=listHtml+"<tr>"
|
|
79 for value in line:
|
|
80 listHtml=listHtml +"<td>"+str(value)+"</td>"
|
|
81 listHtml=listHtml +"</tr>"
|
|
82 listHtml=listHtml+ """ </table> """
|
|
83 return listHtml
|
|
84
|
|
85 def REST_getTableNames(self,schema,username,c_string,container):
|
|
86
|
|
87 results=container.ZSQLSimpleSearch("SELECT oid FROM pg_namespace WHERE nspname LIKE '"+schema+"'")
|
|
88 schema_id=0
|
|
89 for result in results:
|
|
90 schema_id=getattr(result,'oid')
|
|
91
|
|
92 SQL="""SELECT relname FROM pg_class WHERE relhaspkey
|
|
93 AND relname NOT LIKE 'pg/_toast%' ESCAPE '/'
|
|
94 AND relname NOT LIKE 'spatial_ref_sys'
|
|
95 AND relname NOT LIKE 'geometry_columns'
|
|
96 AND relname NOT LIKE 'markierung'"""
|
|
97 # AND tablename NOT LIKE 'sql/_%' ESCAPE '/'
|
|
98 if username!={}:
|
|
99 uid=''
|
|
100 username=container.getVar('username')
|
|
101 results=container.ZSQLSimpleSearch("SELECT uid FROM chgis.usernames WHERE username LIKE '"+ str(username) +"'")
|
|
102 for result in results:
|
|
103 uid=container.getAttr(result,'uid')
|
|
104 SQL=SQL+"""AND relowner ="""+str(uid)
|
|
105
|
|
106 if c_string == 'empty':
|
|
107 SQL = SQL + """ AND int4(reltuples)=0"""
|
|
108 if schema_id != 0:
|
|
109 SQL = SQL + """ AND int4(relnamespace)=""" + str(schema_id)
|
|
110 data=container.ZSQLSimpleSearch(SQL)
|
|
111 return data
|
|
112
|
|
113
|
|
114
|
|
115 manage_addRESTclassForm=PageTemplateFile('zpt/RESTzopetemplate',globals())
|
|
116
|
|
117 def manage_addRESTclass(self, id, title='', label='', description='',
|
|
118 createPublic=0,
|
|
119 createUserF=0,
|
|
120 REQUEST=None):
|
|
121 """Add a new Folder object with id *id*.
|
|
122
|
|
123 If the 'createPublic' and 'createUserF' parameters are set to any true
|
|
124 value, an 'index_html' and a 'UserFolder' objects are created respectively
|
|
125 in the new folder.
|
|
126 """
|
|
127
|
|
128
|
|
129 ob=RESTclass()
|
|
130 ob.id=str(id)
|
|
131 ob.title=title
|
|
132 self._setObject(id, ob)
|
|
133 ob=self._getOb(id)
|
|
134 setattr(ob,'label',label)
|
|
135 # setattr(ob,'description',description)
|
|
136 # setattr(ob,'connection_id',connection_id)
|
|
137
|
|
138 # checkPermission=getSecurityManager().checkPermission
|
|
139 REQUEST.RESPONSE.redirect('manage_main')
|
|
140
|
|
141 |