summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-09-23 04:42:46 -0400
committerChris McDonough <chrism@plope.com>2011-09-23 04:42:46 -0400
commit2029b2fe9c3f1ee0e15348a4e5ad8ae19cff8d39 (patch)
tree782152704e9d417ee2c525b53f8d9c43342caa57
parenta83e10d04ad728f8145abc03e13dcd6c6495ae95 (diff)
downloadpyramid-2029b2fe9c3f1ee0e15348a4e5ad8ae19cff8d39.tar.gz
pyramid-2029b2fe9c3f1ee0e15348a4e5ad8ae19cff8d39.tar.bz2
pyramid-2029b2fe9c3f1ee0e15348a4e5ad8ae19cff8d39.zip
only self-loathing makes me continue
-rw-r--r--pyramid/compat.py4
-rw-r--r--pyramid/config/views.py7
-rw-r--r--pyramid/tests/test_config/test_assets.py7
3 files changed, 13 insertions, 5 deletions
diff --git a/pyramid/compat.py b/pyramid/compat.py
index a03fc893d..64648911e 100644
--- a/pyramid/compat.py
+++ b/pyramid/compat.py
@@ -196,3 +196,7 @@ else:
def is_nonstr_iter(v):
return hasattr(v, '__iter__')
+if PY3: # pragma: no cover
+ im_func = '__func__'
+else:
+ im_func = 'im_func'
diff --git a/pyramid/config/views.py b/pyramid/config/views.py
index 51f13f69f..e186d2430 100644
--- a/pyramid/config/views.py
+++ b/pyramid/config/views.py
@@ -28,6 +28,7 @@ from pyramid.interfaces import PHASE1_CONFIG
from pyramid import renderers
from pyramid.compat import string_types
from pyramid.compat import urlparse
+from pyramid.compat import im_func
from pyramid.exceptions import ConfigurationError
from pyramid.exceptions import PredicateMismatch
from pyramid.httpexceptions import HTTPForbidden
@@ -417,6 +418,7 @@ class DefaultViewMapper(object):
return _attr_view
def requestonly(view, attr=None):
+ ismethod = False
if attr is None:
attr = '__call__'
if inspect.isfunction(view):
@@ -426,6 +428,7 @@ def requestonly(view, attr=None):
fn = view.__init__
except AttributeError:
return False
+ ismethod = hasattr(fn, '__call__')
else:
try:
fn = getattr(view, attr)
@@ -439,8 +442,8 @@ def requestonly(view, attr=None):
args = argspec[0]
- if hasattr(fn, 'im_func'):
- # it's an instance method
+ if hasattr(fn, im_func) or ismethod:
+ # it's an instance method (or unbound method on py2)
if not args:
return False
args = args[1:]
diff --git a/pyramid/tests/test_config/test_assets.py b/pyramid/tests/test_config/test_assets.py
index 73f0a12ad..876a921b4 100644
--- a/pyramid/tests/test_config/test_assets.py
+++ b/pyramid/tests/test_config/test_assets.py
@@ -273,12 +273,13 @@ class TestOverrideProvider(unittest.TestCase):
self.assertEqual(result, 'value')
def test_get_resource_stream_override_returns_value(self):
- overrides = DummyOverrides('value')
+ from io import StringIO
+ overrides = DummyOverrides(StringIO('value'))
import pyramid.tests.test_config
self._registerOverrides(overrides)
provider = self._makeOne(pyramid.tests.test_config)
- with provider.get_resource_stream(None, 'test_assets.py') as result:
- self.assertEqual(result, 'value')
+ with provider.get_resource_stream(None, 'test_assets.py') as stream:
+ self.assertEqual(stream.getvalue(), 'value')
def test_get_resource_string_override_returns_value(self):
overrides = DummyOverrides('value')