--- /home/zope2/lib/python/Shared/DC/ZRDB/sqltest.py Tue May 30 17:46:55 2000
+++ lib/python/Shared/DC/ZRDB/sqltest.py Wed Jul 18 14:28:55 2001
@@ -151,23 +151,30 @@
optional=multiple=None
def __init__(self, args):
- args = parse_params(args, name='', type=None, column=None,
+ args = parse_params(args, name='', expr='', type=None, column=None,
multiple=1, optional=1, op=None)
- self.__name__ = name_param(args,'sqlvar')
- has_key=args.has_key
- if not has_key('type'):
+
+ name,expr = name_param(args,'sqlvar',1)
+
+ if expr is None: expr=name
+ else: expr=expr.eval
+ self.__name__, self.expr = name, expr
+
+ self.args=args
+ if not args.has_key('type'):
raise ParseError, ('the type attribute is required', 'sqltest')
- self.type=t=args['type']
+ t=args['type']
if not valid_type(t):
raise ParseError, ('invalid type, %s' % t, 'sqltest')
- if has_key('optional'): self.optional=args['optional']
- if has_key('multiple'): self.multiple=args['multiple']
- if has_key('column'): self.column=args['column']
+
+ if args.has_key('optional'): self.optional=args['optional']
+ if args.has_key('multiple'): self.multiple=args['multiple']
+ if args.has_key('column'): self.column=args['column']
else: self.column=self.__name__
# Deal with optional operator specification
op = '=' # Default
- if has_key('op'):
+ if args.has_key('op'):
op = args['op']
# Try to get it from the chart, otherwise use the one provided
op = comparison_operators.get(op, op)
@@ -175,13 +182,16 @@
def render(self, md):
name=self.__name__
- t=self.type
- try: v = md[name]
- except KeyError, key:
- if str(key)==name and self.optional: return ''
- raise KeyError, key, sys.exc_info()[2]
+ args=self.args
+ t=args['type']
+ try:
+ expr=self.expr
+ if type(expr) is type(''): v=md[expr]
+ else: v=expr(md)
+ except:
+ if args.has_key('optional') and args['optional']: return ''
+ raise 'Missing Input', 'Missing input variable, %s' % name
-
if type(v) in (ListType, TupleType):
if len(v) > 1 and not self.multiple:
raise 'Multiple Values', (
@@ -194,21 +204,36 @@
if not v and type(v) is StringType and t != 'string': continue
if t=='int':
try:
- if type(v) is StringType: atoi(v)
+ if type(v) is StringType:
+ if v[-1:]=='L':
+ v=v[:-1]
+ atoi(v)
else: v=str(int(v))
except:
+ if not v and args.has_key('optional') and args['optional']:
+ return ''
raise ValueError, (
'Invalid integer value for %s' % name)
elif t=='float':
- if not v and type(v) is StringType: continue
try:
- if type(v) is StringType: atof(v)
+ if type(v) is StringType:
+ if v[-1:]=='L':
+ v=v[:-1]
+ atof(v)
else: v=str(float(v))
except:
+ if not v and args.has_key('optional') and args['optional']:
+ return ''
raise ValueError, (
'Invalid floating-point value for %s' % name)
else:
v=str(v)
+ if not v and t=='nb':
+ if args.has_key('optional') and args['optional']:
+ return ''
+ else:
+ raise ValueError, (
+ 'Invalid empty string value for %s' % name)
v=md.getitem('sql_quote__',0)(v)
#if find(v,"\'") >= 0: v=join(split(v,"\'"),"''")
#v="'%s'" % v
@@ -216,7 +241,8 @@
vs.append(v)
if not vs:
- if self.optional: return ''
+ if args.has_key('optional') and args['optional']:
+ return ''
raise 'Missing Input', (
'No input was provided for %s' % name)