diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-10-29 14:25:58 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-10-29 14:28:00 -0400 |
commit | e31211c578854d63128a30c036e40eee5c43edc7 (patch) | |
tree | bca9bfbfd46e7dd0e2e305bf88833ec1807c93de /lib/sqlalchemy/util/langhelpers.py | |
parent | c7d04beeac6ad54d638afb01783dee2d769aef9d (diff) | |
download | sqlalchemy-e31211c578854d63128a30c036e40eee5c43edc7.tar.gz |
- convert wrap_callable() to a general purpose update_wrapper-like
function; the caller still passes in the "wrapper"
- move tests for wrap_callable() to be generic util tests
- changelog for pullreq github:204
Diffstat (limited to 'lib/sqlalchemy/util/langhelpers.py')
-rw-r--r-- | lib/sqlalchemy/util/langhelpers.py | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py index 9f259aea3..e9d4e09bc 100644 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@ -1378,28 +1378,24 @@ class EnsureKWArgType(type): return update_wrapper(wrap, fn) -def wrap_callable(fn): - """Wrap callable and set __name__, __doc__, and __module__. +def wrap_callable(wrapper, fn): + """Augment functools.update_wrapper() to work with objects with + a ``__call__()`` method. :param fn: object with __call__ method + """ if hasattr(fn, '__name__'): - _f = update_wrapper(lambda ctx: fn(), fn) - _f.__doc__ = _f.__doc__ or fn.__name__ - return _f + return update_wrapper(wrapper, fn) else: - _f = lambda ctx: fn() + _f = wrapper _f.__name__ = fn.__class__.__name__ _f.__module__ = fn.__module__ if hasattr(fn.__call__, '__doc__') and fn.__call__.__doc__: - _f.__doc__ = fn.__call__.__doc__ - elif hasattr(fn.__class__, '__doc__') and fn.__class__.__doc__: - _f.__doc__ = fn.__class__.__doc__ + _f.__doc__ = fn.__call__.__doc__ elif fn.__doc__: _f.__doc__ = fn.__doc__ - else: - _f.__doc__ = fn.__class__.__name__ return _f |