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