From 408c936c77c6aaeceab0e0b001ed745ceb9d19d4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alex=20Gr=C3=B6nholm?= Date: Mon, 18 Apr 2022 13:07:19 -0400 Subject: [PATCH] Implement UUID.python_type MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- doc/build/changelog/unreleased_14/7943.rst | 9 +++++++++ lib/sqlalchemy/dialects/postgresql/base.py | 4 ++++ test/dialect/postgresql/test_types.py | 4 ++++ 3 files changed, 17 insertions(+) create mode 100644 doc/build/changelog/unreleased_14/7943.rst 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 6c3bc4e7cb..5d1298cf77 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -1815,6 +1815,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 a59dd0ac7e..8c4bb7fe73 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" -- 2.47.2