From 19859fa0a9a8297ded8214cde15232f4768fdb28 Mon Sep 17 00:00:00 2001 From: LucaGelmini <69439282+LucaGelmini@users.noreply.github.com> Date: Wed, 8 May 2024 12:53:04 -0300 Subject: [PATCH 1/4] Added typecheck to sqlalchemy JSON In sqlmodel/main.py there was missing a typecheck for the JSON type supported by sqlalchemy. So it was not possible to define a model with a JSON field. --- sqlmodel/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index a16428b192..773cfc3f73 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -51,7 +51,7 @@ from sqlalchemy.orm.decl_api import DeclarativeMeta from sqlalchemy.orm.instrumentation import is_instrumented from sqlalchemy.sql.schema import MetaData -from sqlalchemy.sql.sqltypes import LargeBinary, Time +from sqlalchemy.sql.sqltypes import LargeBinary, Time, JSON from typing_extensions import Literal, deprecated, get_origin from ._compat import ( # type: ignore[attr-defined] @@ -612,6 +612,8 @@ def get_sqlalchemy_type(field: Any) -> Any: return AutoString if issubclass(type_, uuid.UUID): return GUID + if issubclass(type_, JSON): + return JSON raise ValueError(f"{type_} has no matching SQLAlchemy type") From 87401ca9675638dda5ad8b1fcf382f8829112f91 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 15:55:40 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqlmodel/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 773cfc3f73..d38d76dfc9 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -51,7 +51,7 @@ from sqlalchemy.orm.decl_api import DeclarativeMeta from sqlalchemy.orm.instrumentation import is_instrumented from sqlalchemy.sql.schema import MetaData -from sqlalchemy.sql.sqltypes import LargeBinary, Time, JSON +from sqlalchemy.sql.sqltypes import JSON, LargeBinary, Time from typing_extensions import Literal, deprecated, get_origin from ._compat import ( # type: ignore[attr-defined] From 367b3175625f0b6a4862d0f31c66b11aeb97965c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:00:53 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqlmodel/main.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index fd3dd55c0e..27ba62cebe 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -51,8 +51,7 @@ from sqlalchemy.orm.decl_api import DeclarativeMeta from sqlalchemy.orm.instrumentation import is_instrumented from sqlalchemy.sql.schema import MetaData -from sqlalchemy.sql.sqltypes import JSON, LargeBinary, Time, Uuid - +from sqlalchemy.sql.sqltypes import JSON, LargeBinary, Time from typing_extensions import Literal, deprecated, get_origin from ._compat import ( # type: ignore[attr-defined] From 65b3c1dbe1e36eaf535edb5656c1208c319764b0 Mon Sep 17 00:00:00 2001 From: LucaGelmini <69439282+LucaGelmini@users.noreply.github.com> Date: Mon, 29 Jul 2024 15:20:46 -0300 Subject: [PATCH 4/4] Update main.py returning the sqlalchemy Uuid type --- sqlmodel/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 27ba62cebe..8d4ae29098 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -51,7 +51,7 @@ from sqlalchemy.orm.decl_api import DeclarativeMeta from sqlalchemy.orm.instrumentation import is_instrumented from sqlalchemy.sql.schema import MetaData -from sqlalchemy.sql.sqltypes import JSON, LargeBinary, Time +from sqlalchemy.sql.sqltypes import JSON, LargeBinary, Time, Uuid from typing_extensions import Literal, deprecated, get_origin from ._compat import ( # type: ignore[attr-defined] @@ -693,7 +693,7 @@ def get_sqlalchemy_type(field: Any) -> Any: scale=getattr(metadata, "decimal_places", None), ) if issubclass(type_, uuid.UUID): - return GUID + return Uuid if issubclass(type_, JSON): return JSON