From 7a2b7af7b98f8d0e4722b7792acae10ddf9a9996 Mon Sep 17 00:00:00 2001 From: Alexis Gaziello Date: Thu, 20 Oct 2022 12:06:37 -0400 Subject: [PATCH] Adding _init_private_attributes to SQLModel __init__ function. --- sqlmodel/main.py | 1 + tests/test_private_attributes.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 tests/test_private_attributes.py diff --git a/sqlmodel/main.py b/sqlmodel/main.py index d343c698e9..4b2df7a18b 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -514,6 +514,7 @@ def __init__(__pydantic_self__, **data: Any) -> None: for key in non_pydantic_keys: if key in __pydantic_self__.__sqlmodel_relationships__: setattr(__pydantic_self__, key, data[key]) + __pydantic_self__._init_private_attributes() def __setattr__(self, name: str, value: Any) -> None: if name in {"_sa_instance_state"}: diff --git a/tests/test_private_attributes.py b/tests/test_private_attributes.py new file mode 100644 index 0000000000..47d3017a03 --- /dev/null +++ b/tests/test_private_attributes.py @@ -0,0 +1,18 @@ +from typing import Optional + +from pydantic import PrivateAttr +from sqlmodel import Field, SQLModel + + +def test_private_attribute(): + class Hero(SQLModel, table=True): + primary_key: Optional[int] = Field( + default=None, + primary_key=True, + ) + _private_attribute: str = PrivateAttr(default="my_private_attribute") + + hero = Hero() + assert hero._private_attribute == "my_private_attribute" + assert "primary_key" in hero.dict() + assert "_private_attribute" not in hero.dict()