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,
apply_pos=apply_pos,
apply_kw=apply_kw,
apply_pos_proxied=apply_pos_proxied,
+ apply_kw_proxied=apply_kw_proxied,
)
else:
return dict(
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],
)
apply_pos=args,
apply_kw=args,
apply_pos_proxied=proxied,
+ apply_kw_proxied=proxied,
)
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"],
}
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
)
"apply_kw": "()",
"apply_pos": "()",
"apply_pos_proxied": "()",
+ "apply_kw_proxied": "()",
},
True,
),
"apply_kw": "",
"apply_pos": "",
"apply_pos_proxied": "",
+ "apply_kw_proxied": "",
},
False,
),
"apply_kw": "(self)",
"apply_pos": "(self)",
"apply_pos_proxied": "()",
+ "apply_kw_proxied": "()",
},
True,
),
"apply_kw": "self",
"apply_pos": "self",
"apply_pos_proxied": "",
+ "apply_kw_proxied": "",
},
False,
),
"apply_kw": "(*a)",
"apply_pos": "(*a)",
"apply_pos_proxied": "(*a)",
+ "apply_kw_proxied": "(*a)",
},
True,
),
"apply_kw": "(**kw)",
"apply_pos": "(**kw)",
"apply_pos_proxied": "(**kw)",
+ "apply_kw_proxied": "(**kw)",
},
True,
),
"apply_kw": "(*a, **kw)",
"apply_pos": "(*a, **kw)",
"apply_pos_proxied": "(*a, **kw)",
+ "apply_kw_proxied": "(*a, **kw)",
},
True,
),
"apply_kw": "(a, *b)",
"apply_pos": "(a, *b)",
"apply_pos_proxied": "(*b)",
+ "apply_kw_proxied": "(*b)",
},
True,
),
"apply_kw": "(a, **b)",
"apply_pos": "(a, **b)",
"apply_pos_proxied": "(**b)",
+ "apply_kw_proxied": "(**b)",
},
True,
),
"apply_kw": "(a, *b, **c)",
"apply_pos": "(a, *b, **c)",
"apply_pos_proxied": "(*b, **c)",
+ "apply_kw_proxied": "(*b, **c)",
},
True,
),
"apply_kw": "(a, b=b, **c)",
"apply_pos": "(a, b, **c)",
"apply_pos_proxied": "(b, **c)",
+ "apply_kw_proxied": "(b=b, **c)",
},
True,
),
"apply_kw": "(a=a, b=b)",
"apply_pos": "(a, b)",
"apply_pos_proxied": "(b)",
+ "apply_kw_proxied": "(b=b)",
},
True,
),
"apply_kw": "a=a, b=b",
"apply_pos": "a, b",
"apply_pos_proxied": "b",
+ "apply_kw_proxied": "b=b",
},
False,
),
"apply_pos": "self, a, *, b, c",
"apply_kw": "self, a, b=b, c=c",
"apply_pos_proxied": "a, *, b, c",
+ "apply_kw_proxied": "a, b=b, c=c",
},
False,
testing.requires.python3,
"apply_pos": "self, a, *args, b, c",
"apply_kw": "self, a, b=b, c=c, *args",
"apply_pos_proxied": "a, *args, b, c",
+ "apply_kw_proxied": "a, b=b, c=c, *args",
},
False,
testing.requires.python3,
"apply_pos": "self, a, *, b, c",
"apply_kw": "self, a, b=b, c=c",
"apply_pos_proxied": "a, *, b, c",
+ "apply_kw_proxied": "a, b=b, c=c",
},
False,
testing.requires.python3,
"apply_pos": "(self)",
"apply_kw": "(self)",
"apply_pos_proxied": "()",
+ "apply_kw_proxied": "()",
}
wrapper_spec = {
"args": "(self, *args, **kwargs)",
"apply_pos": "(self, *args, **kwargs)",
"apply_kw": "(self, *args, **kwargs)",
"apply_pos_proxied": "(*args, **kwargs)",
+ "apply_kw_proxied": "(*args, **kwargs)",
}
custom_spec = {
"args": "(slef, a=123)",
"self_arg": "slef", # yes, slef
"apply_pos": "(slef, a)",
"apply_pos_proxied": "(a)",
+ "apply_kw_proxied": "(a=a)",
"apply_kw": "(slef, a=a)",
}
"apply_pos": "self",
"apply_kw": "self",
"apply_pos_proxied": "",
+ "apply_kw_proxied": "",
}
wrapper_spec = {
"args": "self, *args, **kwargs",
"apply_pos": "self, *args, **kwargs",
"apply_kw": "self, *args, **kwargs",
"apply_pos_proxied": "*args, **kwargs",
+ "apply_kw_proxied": "*args, **kwargs",
}
custom_spec = {
"args": "slef, a=123",
"apply_pos": "slef, a",
"apply_kw": "slef, a=a",
"apply_pos_proxied": "a",
+ "apply_kw_proxied": "a=a",
}
self._test_init(False, object_spec, wrapper_spec, custom_spec)
from sqlalchemy.orm import query
from sqlalchemy.orm import relationship
from sqlalchemy.orm import scoped_session
+from sqlalchemy.orm import Session
+from sqlalchemy.orm import sessionmaker
from sqlalchemy.testing import assert_raises_message
from sqlalchemy.testing import eq_
from sqlalchemy.testing import fixtures
+from sqlalchemy.testing import is_
from sqlalchemy.testing import mock
from sqlalchemy.testing.mock import Mock
from sqlalchemy.testing.schema import Column
eq_(
mock_session.mock_calls,
[
- mock.call.add("add", True),
+ mock.call.add("add", _warn=True),
mock.call.delete("delete"),
mock.call.get(
- "Cls", 5, mock.ANY, mock.ANY, mock.ANY, mock.ANY
+ "Cls",
+ 5,
+ options=None,
+ populate_existing=False,
+ with_for_update=None,
+ identity_token=None,
),
],
)
sess.object_session("foo")
eq_(mock_object_session.mock_calls, [mock.call("foo")])
+
+ @testing.combinations(
+ ("style1", testing.requires.python3),
+ ("style2", testing.requires.python3),
+ "style3",
+ "style4",
+ )
+ def test_get_bind_custom_session_subclass(self, style):
+ """test #6285"""
+
+ class MySession(Session):
+ if style == "style1":
+
+ def get_bind(self, mapper=None, **kwargs):
+ return super().get_bind(mapper=mapper, **kwargs)
+
+ elif style == "style2":
+ # this was the workaround for #6285, ensure it continues
+ # working as well
+ def get_bind(self, mapper=None, *args, **kwargs):
+ return super().get_bind(mapper, *args, **kwargs)
+
+ elif style == "style3":
+ # py2k style
+ def get_bind(self, mapper=None, *args, **kwargs):
+ return super(MySession, self).get_bind(
+ mapper, *args, **kwargs
+ )
+
+ elif style == "style4":
+ # py2k style
+ def get_bind(self, mapper=None, **kwargs):
+ return super(MySession, self).get_bind(
+ mapper=mapper, **kwargs
+ )
+
+ s1 = MySession(testing.db)
+ is_(s1.get_bind(), testing.db)
+
+ ss = scoped_session(sessionmaker(testing.db, class_=MySession))
+
+ is_(ss.get_bind(), testing.db)