diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2013-03-17 10:19:30 +0100 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2013-03-17 16:05:55 +0100 |
| commit | 1c9bd69ff045cf304fcfe127eac53e8712d33d75 (patch) | |
| tree | 2446631fd5e91b45dcd20a8533cbd9c9a3850a7a | |
| parent | 2757d492bb6920ad1b98f19872c19ee0d8b4223d (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.py | 18 | ||||
| -rw-r--r-- | django/test/_doctest.py | 4 |
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): |
