Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions sqlmodel/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
__version__ = "0.0.42"

# Re-export from Pydantic
from pydantic import ConfigDict as ConfigDict
from pydantic import Discriminator as Discriminator
from pydantic import Tag as Tag

Expand Down Expand Up @@ -121,6 +122,7 @@
from .main import Field as Field
from .main import Relationship as Relationship
from .main import SQLModel as SQLModel
from .main import SQLModelConfig as SQLModelConfig
from .orm.session import Session as Session
from .sql.expression import all_ as all_
from .sql.expression import and_ as and_
Expand Down
7 changes: 5 additions & 2 deletions sqlmodel/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@
from ._compat import (
PYDANTIC_MINOR_VERSION,
BaseConfig,
ConfigDict,
ModelMetaclass,
Representation,
SQLModelConfig,
Undefined,
UndefinedType,
finish_init,
Expand All @@ -73,6 +73,9 @@
sqlmodel_init,
sqlmodel_validate,
)
from ._compat import (
SQLModelConfig as SQLModelConfig,
)
from .sql.sqltypes import AutoString

if TYPE_CHECKING:
Expand Down Expand Up @@ -561,7 +564,7 @@ def Relationship(
@__dataclass_transform__(kw_only_default=True, field_descriptors=(Field, FieldInfo))
class SQLModelMetaclass(ModelMetaclass, DeclarativeMeta):
__sqlmodel_relationships__: dict[str, RelationshipInfo]
model_config: SQLModelConfig
model_config: SQLModelConfig | ConfigDict | dict[str, Any]
model_fields: ClassVar[dict[str, FieldInfo]]

# Replicate SQLAlchemy
Expand Down
59 changes: 59 additions & 0 deletions tests/test_pydantic/test_model_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from pydantic import ConfigDict as PydanticConfigDict
from sqlmodel import ConfigDict, Field, SQLModel, SQLModelConfig


def test_sqlmodel_config_export():
import sqlmodel
import sqlmodel.main

assert hasattr(sqlmodel, "SQLModelConfig")
assert hasattr(sqlmodel.main, "SQLModelConfig")
assert hasattr(sqlmodel, "ConfigDict")
assert sqlmodel.SQLModelConfig is SQLModelConfig
assert sqlmodel.ConfigDict is ConfigDict


def test_model_with_sqlmodel_config():
class Item(SQLModel):
id: int
name: str
model_config = SQLModelConfig(from_attributes=True)

assert Item.model_config.get("from_attributes") is True


def test_model_with_sqlmodel_reexported_config_dict():
class Item(SQLModel):
id: int
name: str
model_config = ConfigDict(from_attributes=True)

assert Item.model_config.get("from_attributes") is True


def test_model_with_pydantic_config_dict():
class Item(SQLModel):
id: int
name: str
model_config = PydanticConfigDict(from_attributes=True)

assert Item.model_config.get("from_attributes") is True


def test_model_with_plain_dict_config():
class Item(SQLModel):
id: int
name: str
model_config = {"from_attributes": True}

assert Item.model_config.get("from_attributes") is True


def test_table_model_with_sqlmodel_config():
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
model_config = SQLModelConfig(extra="ignore")

assert Hero.model_config.get("extra") == "ignore"
assert Hero.model_config.get("table") is True
Loading