diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-03 09:37:27 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-03 10:31:57 -0400 |
| commit | dd5d6d15467b66398dd328ff43b863a057899291 (patch) | |
| tree | c6b381208b1ba64d1b41763bccee1bde0e50ce3d /lib/sqlalchemy | |
| parent | 52effe545fafe80570663d9c462166302efae082 (diff) | |
| download | sqlalchemy-dd5d6d15467b66398dd328ff43b863a057899291.tar.gz | |
Adjust create_proxy_methods() to use kw arguments
Adjusted the means by which classes such as :class:`_orm.scoped_session`
and :class:`_asyncio.AsyncSession` are generated from the base
:class:`_orm.Session` class, such that custom :class:`_orm.Session`
subclasses such as that used by Flask-SQLAlchemy don't need to implement
positional arguments when they call into the superclass method, and can
continue using the same argument styles as in previous releases.
Fixes: #6285
References: https://github.com/pallets/flask-sqlalchemy/issues/953
Change-Id: I8612ab33743625e70eb158efceb0636d783c92a5
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/util/langhelpers.py | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py index 7796d4106..1308ee7e0 100644 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@ -562,6 +562,18 @@ def format_argspec_plus(fn, grouped=True): defaulted_vals, formatvalue=lambda x: "=" + x, ) + + if spec[0]: + apply_kw_proxied = compat.inspect_formatargspec( + name_args[1:], + spec[1], + spec[2], + defaulted_vals, + formatvalue=lambda x: "=" + x, + ) + else: + apply_kw_proxied = apply_kw + if grouped: return dict( args=args, @@ -569,6 +581,7 @@ def format_argspec_plus(fn, grouped=True): apply_pos=apply_pos, apply_kw=apply_kw, apply_pos_proxied=apply_pos_proxied, + apply_kw_proxied=apply_kw_proxied, ) else: return dict( @@ -577,6 +590,7 @@ def format_argspec_plus(fn, grouped=True): apply_pos=apply_pos[1:-1], apply_kw=apply_kw[1:-1], apply_pos_proxied=apply_pos_proxied[1:-1], + apply_kw_proxied=apply_kw_proxied[1:-1], ) @@ -609,6 +623,7 @@ def format_argspec_init(method, grouped=True): apply_pos=args, apply_kw=args, apply_pos_proxied=proxied, + apply_kw_proxied=proxied, ) @@ -638,6 +653,7 @@ def create_proxy_methods( metadata = { "name": fn.__name__, "apply_pos_proxied": caller_argspec["apply_pos_proxied"], + "apply_kw_proxied": caller_argspec["apply_kw_proxied"], "args": caller_argspec["args"], "self_arg": caller_argspec["self_arg"], } @@ -645,14 +661,14 @@ def create_proxy_methods( if clslevel: code = ( "def %(name)s(%(args)s):\n" - " return target_cls.%(name)s(%(apply_pos_proxied)s)" + " return target_cls.%(name)s(%(apply_kw_proxied)s)" % metadata ) env["target_cls"] = target_cls else: code = ( "def %(name)s(%(args)s):\n" - " return %(self_arg)s._proxied.%(name)s(%(apply_pos_proxied)s)" # noqa E501 + " return %(self_arg)s._proxied.%(name)s(%(apply_kw_proxied)s)" # noqa E501 % metadata ) |
