summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-08-15 22:28:55 +0000
committerJason Kirtland <jek@discorporate.us>2008-08-15 22:28:55 +0000
commitd70ed586c74feb947a412f2b5aa1496e11465cdf (patch)
tree93c113e91c85d96c610d913c1c6ba6c45202baed /lib/sqlalchemy/util.py
parent2d4908e88cce5b9872f20cac66c66efd3a0c98fd (diff)
downloadsqlalchemy-d70ed586c74feb947a412f2b5aa1496e11465cdf.tar.gz
Re-use func_defaults when generating wrapper functions. [ticket:1139]
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r--lib/sqlalchemy/util.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index 735843d2d..dd1045311 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -155,6 +155,7 @@ def accepts_a_list_as_starargs(list_deprecation=None):
env = locals().copy()
exec code in env
decorated = env[fn.func_name]
+ decorated.func_defaults = fn.func_defaults
update_wrapper(decorated, fn)
decorated.generated_src = code
return decorated
@@ -188,6 +189,7 @@ def decorator(target):
code = 'lambda %(args)s: %(target)s(%(fn)s, %(apply_kw)s)' % (
metadata)
decorated = eval(code, {targ_name:target, fn_name:fn})
+ decorated.func_defaults = getattr(fn, 'im_func', fn).func_defaults
return update_wrapper(decorated, fn)
return update_wrapper(decorate, target)
@@ -547,7 +549,14 @@ def monkeypatch_proxied_specials(into_cls, from_cls, skip=None, only=None,
not hasattr(into_cls, m) and m not in skip)]
for method in dunders:
try:
- spec = inspect.getargspec(getattr(from_cls, method))
+ fn = getattr(from_cls, method)
+ if not hasattr(fn, '__call__'):
+ continue
+ fn = getattr(fn, 'im_func', fn)
+ except AttributeError:
+ continue
+ try:
+ spec = inspect.getargspec(fn)
fn_args = inspect.formatargspec(spec[0])
d_args = inspect.formatargspec(spec[0][1:])
except TypeError:
@@ -559,9 +568,12 @@ def monkeypatch_proxied_specials(into_cls, from_cls, skip=None, only=None,
env = from_instance is not None and {name: from_instance} or {}
exec py in env
+ try:
+ env[method].func_defaults = fn.func_defaults
+ except AttributeError:
+ pass
setattr(into_cls, method, env[method])
-
class SimpleProperty(object):
"""A *default* property accessor."""