From ccb9022d8400e3eef2ef7fc1bc1fc6f1b1b2720c Mon Sep 17 00:00:00 2001 From: Russ Bubley Date: Mon, 8 Jan 2024 16:24:53 +0000 Subject: [PATCH 1/4] Expose pydantic's Field(validation_alias=...) parameter --- sqlmodel/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 10064c7116..b68ba02785 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -269,6 +269,7 @@ def Field( *, default_factory: Optional[NoArgAnyCallable] = None, alias: Optional[str] = None, + validation_alias: Optional[str] = None, title: Optional[str] = None, description: Optional[str] = None, exclude: Union[ @@ -310,6 +311,7 @@ def Field( default, default_factory=default_factory, alias=alias, + validation_alias=validation_alias, title=title, description=description, exclude=exclude, From 819795e35fd749103bd96f7dfb131393770dd325 Mon Sep 17 00:00:00 2001 From: Russ Bubley Date: Mon, 8 Jan 2024 17:14:39 +0000 Subject: [PATCH 2/4] Pydantic V1 compatibility. --- sqlmodel/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index b68ba02785..910b0ce656 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -143,6 +143,8 @@ def __init__(self, default: Any = Undefined, **kwargs: Any) -> None: raise RuntimeError( "Passing sa_type is not supported when also passing a sa_column" ) + if not hasattr(PydanticFieldInfo, "validation_alias"): + kwargs.pop("validation_alias") super().__init__(default=default, **kwargs) self.primary_key = primary_key self.nullable = nullable From 3472012536312da440018d0d51179d551d2c78f7 Mon Sep 17 00:00:00 2001 From: Evotodi Date: Tue, 18 Jun 2024 12:35:44 -0400 Subject: [PATCH 3/4] Add serialization_alias to SQLModel In the SQLModel's main file, the "serialization_alias" parameter has been added. This allows to handle serialization separately if necessary. Simultaneously, a check has been added to pop the "serialization_alias" attribute if it's not present in PydanticFieldInfo. --- sqlmodel/main.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index f0f1c33244..0b97c214bd 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -153,6 +153,8 @@ def __init__(self, default: Any = Undefined, **kwargs: Any) -> None: ) if not hasattr(PydanticFieldInfo, "validation_alias"): kwargs.pop("validation_alias") + if not hasattr(PydanticFieldInfo, "serialization_alias"): + kwargs.pop("serialization_alias") super().__init__(default=default, **kwargs) self.primary_key = primary_key self.nullable = nullable @@ -278,6 +280,7 @@ def Field( default_factory: Optional[NoArgAnyCallable] = None, alias: Optional[str] = None, validation_alias: Optional[str] = None, + serialization_alias: Optional[str] = None, title: Optional[str] = None, description: Optional[str] = None, exclude: Union[ @@ -320,6 +323,7 @@ def Field( default_factory=default_factory, alias=alias, validation_alias=validation_alias, + serialization_alias=serialization_alias, title=title, description=description, exclude=exclude, From 69883fbc07252bacca24c9ecc319186a278ce531 Mon Sep 17 00:00:00 2001 From: Evotodi Date: Tue, 18 Jun 2024 12:41:52 -0400 Subject: [PATCH 4/4] Add validation and serialization aliases to sqlmodel In the main sqlmodel, validation_alias and serialization_alias have been added as optional attributes. These aliases would provide more flexibility in handling and managing data validation and serialization respectively. --- sqlmodel/main.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 0b97c214bd..ae54d164b2 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -201,6 +201,8 @@ def Field( *, default_factory: Optional[NoArgAnyCallable] = None, alias: Optional[str] = None, + validation_alias: Optional[str] = None, + serialization_alias: Optional[str] = None, title: Optional[str] = None, description: Optional[str] = None, exclude: Union[ @@ -244,6 +246,8 @@ def Field( *, default_factory: Optional[NoArgAnyCallable] = None, alias: Optional[str] = None, + validation_alias: Optional[str] = None, + serialization_alias: Optional[str] = None, title: Optional[str] = None, description: Optional[str] = None, exclude: Union[