[ http://issues.apache.org/jira/browse/MODPYTHON-101?page=comments#action_12360713 ]
Graham Dumpleton commented on MODPYTHON-101: -------------------------------------------- Whoops, to be as precise as possible, instead of the suggested: if not hlist.silent or object: it should be: if not hlist.silent or object is not None: The only case this wouldn't then pick up is if PythonHandlerModule directive was used and the target handler attribute was specified, but was None. This can't be distinguished because resolve_object() returns None when silent is set and target couldn't be found. We can probably live with that. :-) > If target handler found but evaluates false, there should still be an error > if not silent. > ------------------------------------------------------------------------------------------ > > Key: MODPYTHON-101 > URL: http://issues.apache.org/jira/browse/MODPYTHON-101 > Project: mod_python > Type: Bug > Components: core > Versions: 3.2, 3.1.4 > Reporter: Graham Dumpleton > > If one specifies PythonHandler directive and the target is mistakenly set to > be something like: > handler = 0 > handler = None > handler = False > handler = [] > handler = {} > no error is raised. > As comparison, if one has: > handler = 1 > you get an error: > Traceback (most recent call last): > File > "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", > line 309, in HandlerDispatch > result = object(req) > TypeError: 'int' object is not callable > This is because if the target in any way evaluates to false, no attempt is > made to execute it, but at the same time if the silent flag is not set no > error is raised either. > In the case of HandlerDispatch in apache.py, the code currently is: > # find the object > object = resolve_object(module, object_str, > arg=req, silent=hlist.silent) > > if object: > > # call the object > .... > elif hlist.silent: > result = DECLINED > > It would make more sense that if hlist.silent is not set, that the object, > whatever it may be should be called. This would ensure that any error > response is always generated when it can be. > Thus, instead of just: > if object: > it should really be: > if not hlist.silent or object: > In the case of ConnectionDispatch() and FilterDispatch(), because silent is > fixed to "0" in those cases, there should not even be a check of whether > object evaluates true, it should just be called regardless. > Thus instead of: > if object: > # call the object > if config.has_key("PythonEnablePdb"): > result = pdb.runcall(object, conn) > else: > result = object(conn) > it should just be: > # call the object: > if config.has_key("PythonEnablePdb"): > result = pdb.runcall(object, conn) > else: > result = object(conn) > Indent level of following assertion clause in case of ConnectionDispatch() > and call to filter.flush() in FilterDispatcher() should also be shifted out > as well as appropriate. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira