From: Alex Grönholm Date: Mon, 18 Apr 2022 17:07:19 +0000 (-0400) Subject: Implement UUID.python_type X-Git-Tag: rel_1_4_36~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b41c3e7f56234b9873bbb547339b66fdcd10fd95;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Implement UUID.python_type Implemented :attr:`_postgresql.UUID.python_type` attribute for the :class:`_postgresql.UUID` type object. The attribute will return either ``str`` or ``uuid.UUID`` based on the :paramref:`_postgresql.UUID.as_uuid` parameter setting. Previously, this attribute was unimplemented. Pull request courtesy Alex Grönholm. Fixes: #7943 Closes: #7944 Change-Id: Ic4fbaeee134d586b08339801968e787cc7e14285 (cherry picked from commit 408c936c77c6aaeceab0e0b001ed745ceb9d19d4) --- diff --git a/doc/build/changelog/unreleased_14/7943.rst b/doc/build/changelog/unreleased_14/7943.rst new file mode 100644 index 0000000000..e5ed12e7f8 --- /dev/null +++ b/doc/build/changelog/unreleased_14/7943.rst @@ -0,0 +1,9 @@ +.. change:: + :tags: bug, postgresql + :tickets: 7943 + + Implemented :attr:`_postgresql.UUID.python_type` attribute for the + :class:`_postgresql.UUID` type object. The attribute will return either + ``str`` or ``uuid.UUID`` based on the :paramref:`_postgresql.UUID.as_uuid` + parameter setting. Previously, this attribute was unimplemented. Pull + request courtesy Alex Grönholm. \ No newline at end of file diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index bbc64cf710..7ba996a4a2 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -1824,6 +1824,10 @@ class UUID(sqltypes.TypeEngine): return process + @property + def python_type(self): + return _python_UUID if self.as_uuid else str + PGUuid = UUID diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 8ec345d170..fe39672627 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -2832,6 +2832,10 @@ class UUIDTest(fixtures.TestBase): ) eq_(v1.fetchone()[0], value1) + def test_python_type(self): + eq_(postgresql.UUID(as_uuid=True).python_type, uuid.UUID) + eq_(postgresql.UUID(as_uuid=False).python_type, str) + class HStoreTest(AssertsCompiledSQL, fixtures.TestBase): __dialect__ = "postgresql"