|
Colin Bean
ccbean at gmail.com
Thu Jun 1 02:28:03 EDT 2006
Hi David,
I think you can accomplish what you're trying to do without using
eval; correct me if I don't understand your problem.
In order to have a function that you can address from a dictionary,
you could do just that and use a function pointer; so something like:
_states = ['AZ', 'AL', 'MO']
def testState(name):
return name in _states
_state = {'name': '',
'max-length': 2,
'validator':testState
}
Then to validate a state name, you could use:
if _state['validator'](req.form['state']):
....
If you don't want to define a separate function for doing the
validation, you could change the above example to:
I think you can accomplish what you're trying to do without using
eval; correct me if I don't understand your problem.
In order to have a function that you can address from a dictionary,
you could do just that and use a function pointer; so something like:
_states = ['AZ', 'AL', 'MO']
_state = {'name': '',
'max-length': 2,
'validator':lambda n: n in _states
}
Again, sorry if I'm missing something here, but I think this would do
what you're after. I'd definitely avoid passing user input into an
eval statement.
HTH,
Colin
On 5/31/06, David Bear <David.Bear at asu.edu> wrote:
> I am thinking of writing a validation code in the definition of a
> field that I receive from a web form. For example, if I have a field
> named 'state', I would define a dictionary like this:
>
> _states = ['AZ', 'AL', 'MO']
> _state = {'name': '',
> 'max-length': 2,
> 'validator': 'in n in _states return true'
> }
> then when I read my req.form['state'] I can say something like
>
> if eval(_state['validator']) == true:
> ok
>
> I am wondering a coupling things:
>
> 1) has anyone else done something like this?
> 2) what kind of performance penalty is there for compile and eval
> builtins
> 3) other issues unique to modpython that would make this undesireable
> 4) how to parameterize a python string that I would compile (so I
> could pass in req.form['state'] to the _state['validator'] function.
>
> Hopefully this makes sense.
>
> --
> David Bear
> phone: 480-965-8257
> fax: 480-965-9189
> College of Public Programs/ASU
> Wilson Hall 232
> Tempe, AZ 85287-0803
> "Beware the IP portfolio, everyone will be suspect of trespassing"
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>
|