-
-
Notifications
You must be signed in to change notification settings - Fork 846
Expand file tree
/
Copy pathtest_type_mappings.py
More file actions
67 lines (49 loc) · 2.1 KB
/
test_type_mappings.py
File metadata and controls
67 lines (49 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""Test that Python type annotations map to correct SQLAlchemy column types"""
from typing import Dict, Optional
from sqlalchemy import JSON, Boolean, Date, DateTime, Float, Integer
from sqlalchemy.sql.sqltypes import LargeBinary
from sqlmodel import Field, SQLModel
from sqlmodel.sql.sqltypes import AutoString
from typing_extensions import TypedDict
from .conftest import needs_pydanticv2
def test_type_mappings(clear_sqlmodel):
from datetime import date, datetime
class Model(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
count: int
price: float
active: bool
created: datetime
birth_date: date
data_bytes: bytes
# Verify the type mappings
assert isinstance(Model.name.type, AutoString) # type: ignore
assert isinstance(Model.count.type, Integer) # type: ignore
assert isinstance(Model.price.type, Float) # type: ignore
assert isinstance(Model.active.type, Boolean) # type: ignore
assert isinstance(Model.created.type, DateTime) # type: ignore
assert isinstance(Model.birth_date.type, Date) # type: ignore
assert isinstance(Model.data_bytes.type, LargeBinary) # type: ignore
@needs_pydanticv2
def test_dict_maps_to_json(clear_sqlmodel):
"""Test that plain dict annotation maps to JSON column type"""
class Model(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
data: dict
assert isinstance(Model.data.type, JSON) # type: ignore
@needs_pydanticv2
def test_typing_dict_maps_to_json(clear_sqlmodel):
class Model(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
data: Dict[str, int]
assert isinstance(Model.data.type, JSON) # type: ignore
@needs_pydanticv2
def test_typeddict_maps_to_json(clear_sqlmodel):
class MyDict(TypedDict):
name: str
count: int
class Model(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
data: MyDict
assert isinstance(Model.data.type, JSON) # type: ignore