summaryrefslogtreecommitdiff
path: root/test/ext/test_mutable.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/ext/test_mutable.py')
-rw-r--r--test/ext/test_mutable.py44
1 files changed, 34 insertions, 10 deletions
diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py
index 290518dd6..6c428fa85 100644
--- a/test/ext/test_mutable.py
+++ b/test/ext/test_mutable.py
@@ -1,6 +1,10 @@
+from __future__ import annotations
+
import copy
import dataclasses
import pickle
+from typing import Any
+from typing import Dict
from sqlalchemy import event
from sqlalchemy import ForeignKey
@@ -19,6 +23,8 @@ from sqlalchemy.orm import attributes
from sqlalchemy.orm import column_property
from sqlalchemy.orm import composite
from sqlalchemy.orm import declarative_base
+from sqlalchemy.orm import Mapped
+from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import Session
from sqlalchemy.orm.instrumentation import ClassManager
from sqlalchemy.orm.mapper import Mapper
@@ -168,7 +174,6 @@ class MiscTest(fixtures.TestBase):
registry.metadata.create_all(connection)
with Session(connection) as sess:
-
data = dict(
j1={"a": 1},
j2={"b": 2},
@@ -243,6 +248,34 @@ class MiscTest(fixtures.TestBase):
is_true(inspect(t1_merged).attrs.data.history.added)
+ def test_no_duplicate_reg_w_inheritance(self, decl_base):
+ """test #9676"""
+
+ class A(decl_base):
+ __tablename__ = "a"
+
+ id: Mapped[int] = mapped_column(primary_key=True)
+
+ json: Mapped[Dict[str, Any]] = mapped_column(
+ MutableDict.as_mutable(JSON())
+ )
+
+ class B(A):
+ pass
+
+ class C(B):
+ pass
+
+ decl_base.registry.configure()
+
+ # the event hook itself doesnt do anything for repeated calls
+ # already, so there's really nothing else to assert other than there's
+ # only one "set" event listener
+
+ eq_(len(A.json.dispatch.set), 1)
+ eq_(len(B.json.dispatch.set), 1)
+ eq_(len(C.json.dispatch.set), 1)
+
class _MutableDictTestBase(_MutableDictTestFixture):
run_define_tables = "each"
@@ -1252,7 +1285,6 @@ class MutableAssocWithAttrInheritTest(
):
@classmethod
def define_tables(cls, metadata):
-
Table(
"foo",
metadata,
@@ -1360,7 +1392,6 @@ class MutableAssociationScalarJSONTest(
class CustomMutableAssociationScalarJSONTest(
_MutableDictTestBase, fixtures.MappedTest
):
-
CustomMutableDict = None
@classmethod
@@ -1445,7 +1476,6 @@ class _CompositeTestBase:
@classmethod
def _type_fixture(cls):
-
return Point
@@ -1494,7 +1524,6 @@ class MutableCompositeColumnDefaultTest(
class MutableDCCompositeColumnDefaultTest(MutableCompositeColumnDefaultTest):
@classmethod
def _type_fixture(cls):
-
return DCPoint
@@ -1520,7 +1549,6 @@ class MutableCompositesUnpickleTest(_CompositeTestBase, fixtures.MappedTest):
class MutableDCCompositesUnpickleTest(MutableCompositesUnpickleTest):
@classmethod
def _type_fixture(cls):
-
return DCPoint
@@ -1638,7 +1666,6 @@ class MutableCompositesTest(_CompositeTestBase, fixtures.MappedTest):
class MutableDCCompositesTest(MutableCompositesTest):
@classmethod
def _type_fixture(cls):
-
return DCPoint
@@ -1676,7 +1703,6 @@ class MutableCompositeCustomCoerceTest(
):
@classmethod
def _type_fixture(cls):
-
return MyPoint
@classmethod
@@ -1710,7 +1736,6 @@ class MutableCompositeCustomCoerceTest(
class MutableDCCompositeCustomCoerceTest(MutableCompositeCustomCoerceTest):
@classmethod
def _type_fixture(cls):
-
return MyDCPoint
@@ -1780,5 +1805,4 @@ class MutableInheritedCompositesTest(_CompositeTestBase, fixtures.MappedTest):
class MutableInheritedDCCompositesTest(MutableInheritedCompositesTest):
@classmethod
def _type_fixture(cls):
-
return DCPoint