Files
sqlalchemy/test/base/test_inspect.py
Federico Caselli 0b95f0055b Remove object in class definition
References: #4600
Change-Id: I2a62ddfe00bc562720f0eae700a497495d7a987a
2021-11-22 15:03:17 +00:00

77 lines
1.9 KiB
Python

"""test the inspection registry system."""
from sqlalchemy import exc
from sqlalchemy import inspect
from sqlalchemy import inspection
from sqlalchemy.testing import assert_raises_message
from sqlalchemy.testing import eq_
from sqlalchemy.testing import fixtures
class TestFixture:
pass
class TestInspection(fixtures.TestBase):
def teardown_test(self):
for type_ in list(inspection._registrars):
if issubclass(type_, TestFixture):
del inspection._registrars[type_]
def test_def_insp(self):
class SomeFoo(TestFixture):
pass
@inspection._inspects(SomeFoo)
def insp_somefoo(subject):
return {"insp": subject}
somefoo = SomeFoo()
insp = inspect(somefoo)
assert insp["insp"] is somefoo
def test_no_inspect(self):
class SomeFoo(TestFixture):
pass
assert_raises_message(
exc.NoInspectionAvailable,
"No inspection system is available for object of type ",
inspect,
SomeFoo,
)
def test_class_insp(self):
class SomeFoo(TestFixture):
pass
class SomeFooInspect:
def __init__(self, target):
self.target = target
SomeFooInspect = inspection._inspects(SomeFoo)(SomeFooInspect)
somefoo = SomeFoo()
insp = inspect(somefoo)
assert isinstance(insp, SomeFooInspect)
assert insp.target is somefoo
def test_hierarchy_insp(self):
class SomeFoo(TestFixture):
pass
class SomeSubFoo(SomeFoo):
pass
@inspection._inspects(SomeFoo)
def insp_somefoo(subject):
return 1
@inspection._inspects(SomeSubFoo)
def insp_somesubfoo(subject):
return 2
SomeFoo()
eq_(inspect(SomeFoo()), 1)
eq_(inspect(SomeSubFoo()), 2)