Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolves issue #621 #647

Merged
merged 2 commits into from
Aug 24, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions pyramid/config/util.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import re
import traceback

from functools import update_wrapper

from zope.interface import implementer

from pyramid.interfaces import IActionInfo
Expand Down Expand Up @@ -59,9 +61,10 @@ def wrapper(self, *arg, **kw):
finally:
self._ainfo.pop()
return result
wrapper.__name__ = wrapped.__name__
wrapper.__doc__ = wrapped.__doc__
wrapper.__docobj__ = wrapped # for sphinx

if hasattr(wrapped, '__name__'):
update_wrapper(wrapper, wrapped)
wrapper.__docobj__ = wrapped
return wrapper

def make_predicates(xhr=None, request_method=None, path_info=None,
Expand Down
8 changes: 8 additions & 0 deletions pyramid/tests/test_config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,11 @@ def dummy_extend(config, discrim):
def dummy_extend2(config, discrim):
config.action(discrim, None, config.registry)

from functools import partial
dummy_partial = partial(dummy_extend, discrim='partial')

class DummyCallable(object):
def __call__(self, config, discrim):
config.action(discrim, None, config.package)
dummy_callable = DummyCallable()

26 changes: 26 additions & 0 deletions pyramid/tests/test_config/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -1414,6 +1414,32 @@ def test_extend_with_dotted_name(self):
self.assertEqual(action['callable'], None)
self.assertEqual(action['args'], test_config)

def test_add_directive_with_partial(self):
from pyramid.tests import test_config
config = self.config
config.add_directive(
'dummy_partial', 'pyramid.tests.test_config.dummy_partial')
self.assertTrue(hasattr(config, 'dummy_partial'))
config.dummy_partial()
after = config.action_state
action = after.actions[-1]
self.assertEqual(action['discriminator'], 'partial')
self.assertEqual(action['callable'], None)
self.assertEqual(action['args'], test_config)

def test_add_directive_with_custom_callable(self):
from pyramid.tests import test_config
config = self.config
config.add_directive(
'dummy_callable', 'pyramid.tests.test_config.dummy_callable')
self.assertTrue(hasattr(config, 'dummy_callable'))
config.dummy_callable('discrim')
after = config.action_state
action = after.actions[-1]
self.assertEqual(action['discriminator'], 'discrim')
self.assertEqual(action['callable'], None)
self.assertEqual(action['args'], test_config)

def test_extend_with_python_callable(self):
from pyramid.tests import test_config
config = self.config
Expand Down
Empty file.