annotate REST_test.py @ 4:e3ee1f358fe6

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