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__"):