Commit fade2d15 authored by Jim Fulton's avatar Jim Fulton

Added support for sqlvar, sqltest, and sqlgroup tags.

Changed the way template is invoked, so that the 'self' is the
folder containing the method.
parent f68bb9c3
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
__doc__='''Generic Database adapter __doc__='''Generic Database adapter
$Id: DA.py,v 1.37 1998/03/10 21:18:03 jim Exp $''' $Id: DA.py,v 1.38 1998/03/17 19:29:05 jim Exp $'''
__version__='$Revision: 1.37 $'[11:-2] __version__='$Revision: 1.38 $'[11:-2]
import OFS.SimpleItem, Aqueduct.Aqueduct, Aqueduct.RDB import OFS.SimpleItem, Aqueduct.Aqueduct, Aqueduct.RDB
import DocumentTemplate, marshal, md5, base64, DateTime, Acquisition, os import DocumentTemplate, marshal, md5, base64, DateTime, Acquisition, os
...@@ -20,16 +20,22 @@ from Aqueduct.Aqueduct import decodestring, parse, Rotor ...@@ -20,16 +20,22 @@ from Aqueduct.Aqueduct import decodestring, parse, Rotor
from Aqueduct.Aqueduct import custom_default_report, default_input_form from Aqueduct.Aqueduct import custom_default_report, default_input_form
from Globals import HTMLFile, MessageDialog from Globals import HTMLFile, MessageDialog
from cStringIO import StringIO from cStringIO import StringIO
import sys, traceback import sys, Globals, OFS.SimpleItem, AccessControl.Role, Persistence
from DocumentTemplate import HTML
import Globals, OFS.SimpleItem, AccessControl.Role, Persistence
from string import atoi, find from string import atoi, find
import IOBTree import IOBTree, DocumentTemplate, sqlvar, sqltest, sqlgroup
from time import time from time import time
from zlib import compress, decompress from zlib import compress, decompress
md5new=md5.new md5new=md5.new
import ExtensionClass import ExtensionClass
class SQL(DocumentTemplate.HTML):
commands={}
for k, v in DocumentTemplate.HTML.commands.items(): commands[k]=v
commands['sqlvar' ]=sqlvar.SQLVar
commands['sqltest']=sqltest.SQLTest
commands['sqlgroup' ]=sqlgroup.SQLGroup
class DA( class DA(
Aqueduct.Aqueduct.BaseQuery,Acquisition.Implicit, Aqueduct.Aqueduct.BaseQuery,Acquisition.Implicit,
Persistence.Persistent, Persistence.Persistent,
...@@ -39,7 +45,6 @@ class DA( ...@@ -39,7 +45,6 @@ class DA(
'Database Adapter' 'Database Adapter'
_col=None _col=None
sql_delimiter='\0'
max_rows_=1000 max_rows_=1000
cache_time_=0 cache_time_=0
max_cache_=100 max_cache_=100
...@@ -96,7 +101,8 @@ class DA( ...@@ -96,7 +101,8 @@ class DA(
self.arguments_src=arguments self.arguments_src=arguments
self._arg=parse(arguments) self._arg=parse(arguments)
self.src=template self.src=template
self.template=DocumentTemplate.HTML(template) self.template=t=SQL(template)
t.cook()
self._v_cache={}, IOBTree.Bucket() self._v_cache={}, IOBTree.Bucket()
if REQUEST: return self.manage_editedDialog(REQUEST) if REQUEST: return self.manage_editedDialog(REQUEST)
...@@ -118,7 +124,7 @@ class DA( ...@@ -118,7 +124,7 @@ class DA(
input_src=default_input_form(self.title_or_id(), input_src=default_input_form(self.title_or_id(),
self._arg, 'manage_test', self._arg, 'manage_test',
'<!--#var manage_tabs-->') '<!--#var manage_tabs-->')
return HTML(input_src)(self, REQUEST, HTTP_REFERER='') return DocumentTemplate.HTML(input_src)(self, REQUEST, HTTP_REFERER='')
def manage_test(self, REQUEST): def manage_test(self, REQUEST):
'Perform an actual query' 'Perform an actual query'
...@@ -134,7 +140,7 @@ class DA( ...@@ -134,7 +140,7 @@ class DA(
'<strong>Error, <em>%s</em>:</strong> %s' '<strong>Error, <em>%s</em>:</strong> %s'
% (sys.exc_type, sys.exc_value)) % (sys.exc_type, sys.exc_value))
report=HTML( report=DocumentTemplate.HTML(
'<html><BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">\n' '<html><BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">\n'
'<!--#var manage_tabs-->\n<hr>\n%s\n\n' '<!--#var manage_tabs-->\n<hr>\n%s\n\n'
'<hr><strong>SQL used:</strong><br>\n<pre>\n%s\n</pre>\n<hr>\n' '<hr><strong>SQL used:</strong><br>\n<pre>\n%s\n</pre>\n<hr>\n'
...@@ -196,10 +202,13 @@ class DA( ...@@ -196,10 +202,13 @@ class DA(
except: raise 'Database Error', ( except: raise 'Database Error', (
'%s is not connected to a database' % self.id) '%s is not connected to a database' % self.id)
if hasattr(REQUEST,'PARENTS'): self=self.__of__(REQUEST['PARENTS'][0]) if hasattr(REQUEST,'PARENTS'): p=REQUEST['PARENTS'][1]
elif hasattr(self, 'aq_parent'): p=self.aq_parent
else: p=None
argdata=self._argdata(REQUEST) argdata=self._argdata(REQUEST)
query=apply(self.template, (self,), argdata) argdata['sql_delimiter']='\0'
query=apply(self.template, (p,), argdata)
if src__: return query if src__: return query
...@@ -228,9 +237,14 @@ class DA( ...@@ -228,9 +237,14 @@ class DA(
if md5new(argdata).digest() != digest: if md5new(argdata).digest() != digest:
raise 'Bad Request', 'Corrupted Data' raise 'Bad Request', 'Corrupted Data'
argdata=marshal.loads(argdata) argdata=marshal.loads(argdata)
if hasattr(REQUEST,'PARENTS'):
self=self.__of__(REQUEST['PARENTS'][0]) if hasattr(REQUEST,'PARENTS'): p=REQUEST['PARENTS'][1]
query=apply(self.template,(self,),argdata) elif hasattr(self, 'aq_parent'): p=self.aq_parent
else: p=None
argdata['sql_delimiter']='\0'
query=apply(self.template,(p,),argdata)
if self.cache_time_: if self.cache_time_:
result=self._cached_result(DB__, query, 1) result=self._cached_result(DB__, query, 1)
else: else:
...@@ -355,6 +369,12 @@ def getBrain(self, ...@@ -355,6 +369,12 @@ def getBrain(self,
############################################################################## ##############################################################################
# #
# $Log: DA.py,v $ # $Log: DA.py,v $
# Revision 1.38 1998/03/17 19:29:05 jim
# Added support for sqlvar, sqltest, and sqlgroup tags.
#
# Changed the way template is invoked, so that the 'self' is the
# folder containing the method.
#
# Revision 1.37 1998/03/10 21:18:03 jim # Revision 1.37 1998/03/10 21:18:03 jim
# Traversal not stops when all arguments have been given. # Traversal not stops when all arguments have been given.
# #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment