Skip to content

Commit 46b8400

Browse files
author
DYNOSuprovo
committed
fix(typing): export SQLModelConfig and allow ConfigDict for model_config (#2091)
Signed-off-by: DYNOSuprovo <DYNOSuprovo@users.noreply.github.com>
1 parent 72bca1e commit 46b8400

3 files changed

Lines changed: 66 additions & 2 deletions

File tree

‎sqlmodel/__init__.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
__version__ = "0.0.46"
22

33
# Re-export from Pydantic
4+
from pydantic import ConfigDict as ConfigDict
45
from pydantic import Discriminator as Discriminator
56
from pydantic import Tag as Tag
67

@@ -121,6 +122,7 @@
121122
from .main import Field as Field
122123
from .main import Relationship as Relationship
123124
from .main import SQLModel as SQLModel
125+
from .main import SQLModelConfig as SQLModelConfig
124126
from .orm.session import Session as Session
125127
from .sql.expression import all_ as all_
126128
from .sql.expression import and_ as and_

‎sqlmodel/main.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@
5757
from ._compat import (
5858
PYDANTIC_MINOR_VERSION,
5959
BaseConfig,
60+
ConfigDict,
6061
ModelMetaclass,
6162
Representation,
62-
SQLModelConfig,
6363
Undefined,
6464
UndefinedType,
6565
finish_init,
@@ -74,6 +74,9 @@
7474
sqlmodel_init,
7575
sqlmodel_validate,
7676
)
77+
from ._compat import (
78+
SQLModelConfig as SQLModelConfig,
79+
)
7780
from .sql.sqltypes import AutoString, UTCDateTime
7881

7982
if TYPE_CHECKING:
@@ -557,7 +560,7 @@ def Relationship(
557560
@dataclass_transform(kw_only_default=True, field_specifiers=(Field, FieldInfo))
558561
class SQLModelMetaclass(ModelMetaclass, DeclarativeMeta):
559562
__sqlmodel_relationships__: dict[str, RelationshipInfo]
560-
model_config: SQLModelConfig
563+
model_config: SQLModelConfig | ConfigDict | dict[str, Any]
561564
model_fields: ClassVar[dict[str, FieldInfo]]
562565

563566
# Replicate SQLAlchemy
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from pydantic import ConfigDict as PydanticConfigDict
2+
from sqlmodel import ConfigDict, Field, SQLModel, SQLModelConfig
3+
4+
5+
def test_sqlmodel_config_export():
6+
import sqlmodel
7+
import sqlmodel.main
8+
9+
assert hasattr(sqlmodel, "SQLModelConfig")
10+
assert hasattr(sqlmodel.main, "SQLModelConfig")
11+
assert hasattr(sqlmodel, "ConfigDict")
12+
assert sqlmodel.SQLModelConfig is SQLModelConfig
13+
assert sqlmodel.ConfigDict is ConfigDict
14+
15+
16+
def test_model_with_sqlmodel_config():
17+
class Item(SQLModel):
18+
id: int
19+
name: str
20+
model_config = SQLModelConfig(from_attributes=True)
21+
22+
assert Item.model_config.get("from_attributes") is True
23+
24+
25+
def test_model_with_sqlmodel_reexported_config_dict():
26+
class Item(SQLModel):
27+
id: int
28+
name: str
29+
model_config = ConfigDict(from_attributes=True)
30+
31+
assert Item.model_config.get("from_attributes") is True
32+
33+
34+
def test_model_with_pydantic_config_dict():
35+
class Item(SQLModel):
36+
id: int
37+
name: str
38+
model_config = PydanticConfigDict(from_attributes=True)
39+
40+
assert Item.model_config.get("from_attributes") is True
41+
42+
43+
def test_model_with_plain_dict_config():
44+
class Item(SQLModel):
45+
id: int
46+
name: str
47+
model_config = {"from_attributes": True}
48+
49+
assert Item.model_config.get("from_attributes") is True
50+
51+
52+
def test_table_model_with_sqlmodel_config():
53+
class Hero(SQLModel, table=True):
54+
id: int | None = Field(default=None, primary_key=True)
55+
name: str
56+
model_config = SQLModelConfig(extra="ignore")
57+
58+
assert Hero.model_config.get("extra") == "ignore"
59+
assert Hero.model_config.get("table") is True

0 commit comments

Comments
 (0)