view REST_test.py @ 5:7539a9e69365 api_v1

small fix
author casties
date Wed, 16 Jun 2010 11:47:06 +0000
parents 48de7c260ffe
children
line wrap: on
line source

'''
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')