You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-commits@quetz.apache.org by gr...@apache.org on 2006/10/29 08:07:22 UTC
svn commit: r468839 - in /httpd/mod_python/trunk: Doc/appendixc.tex
lib/python/mod_python/publisher.py
Author: grahamd
Date: Sun Oct 29 00:07:21 2006
New Revision: 468839
URL: http://svn.apache.org/viewvc?view=rev&rev=468839
Log:
(MODPYTHON-198) Fixed code supporting nested auth/access/realm details inside
of functions in mod_python.publisher that was broken by Python 2.5.
Modified:
httpd/mod_python/trunk/Doc/appendixc.tex
httpd/mod_python/trunk/lib/python/mod_python/publisher.py
Modified: httpd/mod_python/trunk/Doc/appendixc.tex
URL: http://svn.apache.org/viewvc/httpd/mod_python/trunk/Doc/appendixc.tex?view=diff&rev=468839&r1=468838&r2=468839
==============================================================================
--- httpd/mod_python/trunk/Doc/appendixc.tex (original)
+++ httpd/mod_python/trunk/Doc/appendixc.tex Sun Oct 29 00:07:21 2006
@@ -394,6 +394,10 @@
(\citetitle[http://issues.apache.org/jira/browse/MODPYTHON-194]{MODPYTHON-194})
Fixed potential memory leak due to not clearing the state of thread state
objects before deleting them.
+ \item
+ (\citetitle[http://issues.apache.org/jira/browse/MODPYTHON-198]{MODPYTHON-198})
+ Python 2.5 broke nested __auth__/__access__/__auth_realm__ in
+ mod_python.publisher.
\end{itemize}
Modified: httpd/mod_python/trunk/lib/python/mod_python/publisher.py
URL: http://svn.apache.org/viewvc/httpd/mod_python/trunk/lib/python/mod_python/publisher.py?view=diff&rev=468839&r1=468838&r2=468839
==============================================================================
--- httpd/mod_python/trunk/lib/python/mod_python/publisher.py (original)
+++ httpd/mod_python/trunk/lib/python/mod_python/publisher.py Sun Oct 29 00:07:21 2006
@@ -240,24 +240,29 @@
func_code = func_object.func_code
func_globals = func_object.func_globals
- 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
+ def lookup(name):
+ i = None
+ if name in func_code.co_names:
+ i = list(func_code.co_names).index(name)
+ elif func_code.co_argcount < len(func_code.co_varnames):
+ names = func_code.co_varnames[func_code.co_argcount:]
+ if name in names:
+ i = list(names).index(name)
+ if i is not None:
+ return (1, func_code.co_consts[i+1])
+ return (0, None)
- if "__access__" in func_code.co_names:
- # first check the constant names
- i = list(func_code.co_names).index("__access__")
- __access__ = func_code.co_consts[i+1]
- if hasattr(__access__, "co_name"):
- __access__ = new.function(__access__, func_globals)
- found_access = 1
+ (found_auth, __auth__) = lookup('__auth__')
+ if found_auth and type(__auth__) == types.CodeType:
+ __auth__ = new.function(__auth__, func_globals)
- if "__auth_realm__" in func_code.co_names:
- i = list(func_code.co_names).index("__auth_realm__")
- realm = func_code.co_consts[i+1]
+ (found_access, __access__) = lookup('__access__')
+ if found_access and type(__access__) == types.CodeType:
+ __access__ = new.function(__access__, func_globals)
+
+ (found_realm, __auth_realm__) = lookup('__auth_realm__')
+ if found_realm:
+ realm = __auth_realm__
else:
if hasattr(object, "__auth__"):