]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix repr for MySQL SET, generic Enum
authorpetit87 <west12capri12@gmail.com>
Sat, 26 Feb 2022 21:46:32 +0000 (16:46 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 4 Mar 2022 18:01:20 +0000 (13:01 -0500)
Fixed issues in :class:`_mysql.SET` datatype as well as :class:`.Enum`
where the ``__repr__()`` method would not render all optional parameters in
the string output, impacting the use of these types in Alembic
autogenerate. Pull request for MySQL courtesy Yuki Nishimine.

Fixes: #7720
Fixes: #7789
Closes: #7772
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7772
Pull-request-sha: d58845479f497f6b2e12d7df2e9eb2d6ac22109b
Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Change-Id: Idcec23eab4258511d9f32f4e3d78e511ea6021f1

doc/build/changelog/unreleased_14/7720_7789.rst [new file with mode: 0644]
lib/sqlalchemy/dialects/mysql/enumerated.py
lib/sqlalchemy/sql/sqltypes.py
test/dialect/mysql/test_types.py
test/sql/test_types.py

diff --git a/doc/build/changelog/unreleased_14/7720_7789.rst b/doc/build/changelog/unreleased_14/7720_7789.rst
new file mode 100644 (file)
index 0000000..5c1026e
--- /dev/null
@@ -0,0 +1,9 @@
+.. change::
+    :tags: bug, sql, mysql
+    :tickets: 7720, 7789
+
+    Fixed issues in :class:`_mysql.SET` datatype as well as :class:`.Enum`
+    where the ``__repr__()`` method would not render all optional parameters in
+    the string output, impacting the use of these types in Alembic
+    autogenerate. Pull request for MySQL courtesy Yuki Nishimine.
+
index 875858871521419b43bb65b564d57abfac6975ed..c35b7226d8dc20e5da12a1970925bd9999b6f38e 100644 (file)
@@ -233,3 +233,12 @@ class SET(_StringType):
     def adapt(self, impltype, **kw):
         kw["retrieve_as_bitwise"] = self.retrieve_as_bitwise
         return util.constructor_copy(self, impltype, *self.values, **kw)
+
+    def __repr__(self):
+        return util.generic_repr(
+            self,
+            to_inspect=[SET, _StringType],
+            additional_kw=[
+                ("retrieve_as_bitwise", False),
+            ],
+        )
index d022a24caada7d6bef0055d49a1eb3e272ade504..3794fd8f793c80e7363456280f83336528a47237 100644 (file)
@@ -1453,7 +1453,10 @@ class Enum(Emulated, String, TypeEngine[Union[str, enum.Enum]], SchemaType):
     def __repr__(self):
         return util.generic_repr(
             self,
-            additional_kw=[("native_enum", True)],
+            additional_kw=[
+                ("native_enum", True),
+                ("create_constraint", False),
+            ],
             to_inspect=[Enum, SchemaType],
         )
 
index 3d26e1d07f2e878215a465d7457dde0cc572cc73..de93a97a4a78b58f4eccd7c719e509f3107ca5ea 100644 (file)
@@ -1310,6 +1310,24 @@ class EnumSetTest(
             [("", ""), ("", ""), ("two", "two"), (None, None)],
         )
 
+    @testing.combinations(
+        (
+            [""],
+            {"retrieve_as_bitwise": True},
+            "SET('', retrieve_as_bitwise=True)",
+        ),
+        (["a"], {}, "SET('a')"),
+        (["a", "b", "c"], {}, "SET('a', 'b', 'c')"),
+        (
+            ["a", "b", "c"],
+            {"collation": "utf8_bin"},
+            "SET('a', 'b', 'c', collation='utf8_bin')",
+        ),
+        argnames="value,kw,expected",
+    )
+    def test_set_repr(self, value, kw, expected):
+        eq_(repr(mysql.SET(*value, **kw)), expected)
+
 
 def colspec(c):
     return testing.db.dialect.ddl_compiler(
index 4e1048cb69bfc036a2cc78cced20dc50cb3b4668..58dfa4dd8aee64cab367cad201ba2794f36530c3 100644 (file)
@@ -2479,6 +2479,13 @@ class EnumTest(AssertsCompiledSQL, fixtures.TablesTest):
             "inherit_schema=True, native_enum=False)",
         )
 
+    def test_repr_two(self):
+        e = Enum("x", "y", name="somename", create_constraint=True)
+        eq_(
+            repr(e),
+            "Enum('x', 'y', name='somename', create_constraint=True)",
+        )
+
     def test_length_native(self):
         e = Enum("x", "y", "long", length=42)