diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-06-09 09:53:43 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-06-09 09:54:04 -0400 |
| commit | cc7cc3c9ec73055703acc78c8d92eb0242e5cd20 (patch) | |
| tree | af8a2272e4749ee0afd086294c65854f00b8f7b2 /test/base | |
| parent | e1935b1711dd10d1cb30e3990fef2dd2e0435f1f (diff) | |
| download | sqlalchemy-cc7cc3c9ec73055703acc78c8d92eb0242e5cd20.tar.gz | |
dont transfer __weakref__ to regenerated class
Repaired a deprecation warning class decorator that was preventing key
objects such as :class:`_engine.Connection` from having a proper
``__weakref__`` attribute, causing operations like Python standard library
``inspect.getmembers()`` to fail.
Fixes: #8115
Change-Id: Ifd0bc2325fb9dc9e1431998c308b7fc081968373
Diffstat (limited to 'test/base')
| -rw-r--r-- | test/base/test_warnings.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/base/test_warnings.py b/test/base/test_warnings.py index e32c8f5ab..e951fcafc 100644 --- a/test/base/test_warnings.py +++ b/test/base/test_warnings.py @@ -1,6 +1,9 @@ +from sqlalchemy import testing +from sqlalchemy.exc import SADeprecationWarning from sqlalchemy.testing import eq_ from sqlalchemy.testing import expect_deprecated from sqlalchemy.testing import fixtures +from sqlalchemy.util.deprecations import _decorate_cls_with_warning from sqlalchemy.util.deprecations import warn_deprecated_limited from sqlalchemy.util.langhelpers import _hash_limit_string @@ -34,3 +37,46 @@ class WarnDeprecatedLimitedTest(fixtures.TestBase): eq_(len(printouts), occurrences) eq_(len(messages), cap) + + +class ClsWarningTest(fixtures.TestBase): + @testing.fixture + def dep_cls_fixture(self): + class Connectable(object): + """a docstring""" + + some_member = "foo" + + Connectable = _decorate_cls_with_warning( + Connectable, + None, + SADeprecationWarning, + "a message", + "2.0", + "another message", + ) + + return Connectable + + def test_dep_inspectable(self, dep_cls_fixture): + """test #8115""" + + import inspect + + class PlainClass(object): + some_member = "bar" + + pc_keys = dict(inspect.getmembers(PlainClass())) + insp_keys = dict(inspect.getmembers(dep_cls_fixture())) + + assert set(insp_keys).intersection( + ( + "__class__", + "__doc__", + "__eq__", + "__dict__", + "__weakref__", + "some_member", + ) + ) + eq_(set(pc_keys), set(insp_keys)) |
