summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-06-03 09:37:27 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2021-06-03 10:31:57 -0400
commitdd5d6d15467b66398dd328ff43b863a057899291 (patch)
treec6b381208b1ba64d1b41763bccee1bde0e50ce3d /lib/sqlalchemy
parent52effe545fafe80570663d9c462166302efae082 (diff)
downloadsqlalchemy-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.py20
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
)