Python 2.5 nested auth functions in publisher. ----------------------------------------------
Key: MODPYTHON-198 URL: http://issues.apache.org/jira/browse/MODPYTHON-198 Project: mod_python Issue Type: Bug Components: publisher Affects Versions: 3.2.10 Reporter: Graham Dumpleton Assigned To: Graham Dumpleton Fix For: 3.3 Jim Gallacher wrote: With python 2.5 I get 2 failures: test_publisher_auth_nested test_publisher_auth_method_nested It looks like something has changed in python 2.5 introspection that is messing up publisher. Test script testme.py --------------------- def testfunc(): print 'stuff' def __auth__(): print '__auth__ called' def __access__(): print '__access__ called' def main(): func_obj = testfunc func_code = func_obj.func_code print func_code.co_names if __name__ == '__main__': main() Results ------- $ python2.3 testme.py ('__auth__', '__access__') $ python2.4 testme.py ('__auth__', '__access__') $ python2.5 testme.py () Dan Eloff points out that information is now in co_varnames. >>> fc.co_names () >>> fc.co_varnames ('__auth__', '__access__') >>> def foo(a,b): d = 5 def bar(c): return c >>> fc.co_names () >>> fc.co_varnames ('a', 'b', 'd', 'bar') To get just args, try: >>> fc.co_varnames[:fc.co_argcount] ('a', 'b') And for just local vars: >>> fc.co_varnames[fc.co_argcount:] ('d', 'bar') Still need to work out if actual code objects for the functions are available in co_consts or not. Ie., need to replace: if "__auth__" in func_code.co_names: i = list(func_code.co_names).index("__auth__") __auth__ = func_code.co_consts[i+1] if hasattr(__auth__, "co_name"): __auth__ = new.function(__auth__, func_globals) found_auth = 1 -- 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