summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2013-03-17 10:19:30 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2013-03-17 16:05:55 +0100
commit1c9bd69ff045cf304fcfe127eac53e8712d33d75 (patch)
tree2446631fd5e91b45dcd20a8533cbd9c9a3850a7a
parent2757d492bb6920ad1b98f19872c19ee0d8b4223d (diff)
[1.5.x] Stopped using non-standard __globals__ and __code__ attributes.
Some alternative implementations don't have them. Closes #19944. Backport of 9d4a5b00f1977d8cddf8e241fa4bb8a9e819f188 from master.
-rw-r--r--django/contrib/syndication/views.py18
-rw-r--r--django/test/_doctest.py4
2 files changed, 11 insertions, 11 deletions
diff --git a/django/contrib/syndication/views.py b/django/contrib/syndication/views.py
index 996b7dfb40..be8fbbb8e2 100644
--- a/django/contrib/syndication/views.py
+++ b/django/contrib/syndication/views.py
@@ -11,6 +11,7 @@ from django.utils import feedgenerator, tzinfo
from django.utils.encoding import force_text, iri_to_uri, smart_text
from django.utils.html import escape
from django.utils.http import http_date
+from django.utils import six
from django.utils.timezone import is_naive
@@ -69,15 +70,14 @@ class Feed(object):
except AttributeError:
return default
if callable(attr):
- # Check __code__.co_argcount rather than try/excepting the
- # function and catching the TypeError, because something inside
- # the function may raise the TypeError. This technique is more
- # accurate.
- if hasattr(attr, '__code__'):
- argcount = attr.__code__.co_argcount
- else:
- argcount = attr.__call__.__code__.co_argcount
- if argcount == 2: # one argument is 'self'
+ # Check co_argcount rather than try/excepting the function and
+ # catching the TypeError, because something inside the function
+ # may raise the TypeError. This technique is more accurate.
+ try:
+ code = six.get_function_code(attr)
+ except AttributeError:
+ code = six.get_function_code(attr.__call__)
+ if code.co_argcount == 2: # one argument is 'self'
return attr(obj)
else:
return attr()
diff --git a/django/test/_doctest.py b/django/test/_doctest.py
index 82d4a6d08e..9b8ddc9696 100644
--- a/django/test/_doctest.py
+++ b/django/test/_doctest.py
@@ -883,7 +883,7 @@ class DocTestFinder:
if module is None:
return True
elif inspect.isfunction(object):
- return module.__dict__ is object.__globals__
+ return module.__dict__ is six.get_function_globals(object)
elif inspect.isclass(object):
return module.__name__ == object.__module__
elif inspect.getmodule(object) is not None:
@@ -1021,7 +1021,7 @@ class DocTestFinder:
# Find the line number for functions & methods.
if inspect.ismethod(obj): obj = obj.__func__
- if inspect.isfunction(obj): obj = obj.__code__
+ if inspect.isfunction(obj): obj = six.get_function_code(obj)
if inspect.istraceback(obj): obj = obj.tb_frame
if inspect.isframe(obj): obj = obj.f_code
if inspect.iscode(obj):