Compare commits

...

12 Commits

Author SHA1 Message Date
Sebastián Ramírez
00b30c65c9 Add test to ensure sa_type is not passed with sa_column 2023-10-29 12:00:58 +04:00
Sebastián Ramírez
9509313eaf ♻️ Refactor checking for sa_type 2023-10-29 12:00:37 +04:00
Sebastián Ramírez
a1833901f5
Merge branch 'main' into main 2023-10-29 11:55:17 +04:00
Sebastián Ramírez
54d1816a9f
Merge branch 'main' into main 2022-12-17 00:52:07 +04:00
Maruo
c4c58cc2be
fix error in no Field Column 2022-12-14 23:58:43 +09:00
Maruo
8fa01150f4
fix typo 2022-12-14 23:57:57 +09:00
Maruo
55098b25a3
Merge branch 'main' into main 2022-11-23 13:42:01 +09:00
Maruo
793af1a1f1
Update main.py 2022-10-06 11:35:02 +09:00
Maruo
689885ffa4
Update main.py 2022-10-06 11:20:53 +09:00
Maruo
a07316da6e
Update main.py 2022-10-06 11:10:35 +09:00
Maruo
eb1732b7a1
fix error 2022-10-06 10:46:03 +09:00
Maruo
e1049fa78c
Add sa_type to Field 2022-09-26 15:57:32 +09:00
2 changed files with 25 additions and 2 deletions

View File

@ -74,6 +74,7 @@ class FieldInfo(PydanticFieldInfo):
foreign_key = kwargs.pop("foreign_key", Undefined)
unique = kwargs.pop("unique", False)
index = kwargs.pop("index", Undefined)
sa_type = kwargs.pop("sa_type", Undefined)
sa_column = kwargs.pop("sa_column", Undefined)
sa_column_args = kwargs.pop("sa_column_args", Undefined)
sa_column_kwargs = kwargs.pop("sa_column_kwargs", Undefined)
@ -104,11 +105,15 @@ class FieldInfo(PydanticFieldInfo):
)
if unique is not Undefined:
raise RuntimeError(
"Passing unique is not supported when " "also passing a sa_column"
"Passing unique is not supported when also passing a sa_column"
)
if index is not Undefined:
raise RuntimeError(
"Passing index is not supported when " "also passing a sa_column"
"Passing index is not supported when also passing a sa_column"
)
if sa_type is not Undefined:
raise RuntimeError(
"Passing sa_type is not supported when also passing a sa_column"
)
super().__init__(default=default, **kwargs)
self.primary_key = primary_key
@ -116,6 +121,7 @@ class FieldInfo(PydanticFieldInfo):
self.foreign_key = foreign_key
self.unique = unique
self.index = index
self.sa_type = sa_type
self.sa_column = sa_column
self.sa_column_args = sa_column_args
self.sa_column_kwargs = sa_column_kwargs
@ -185,6 +191,7 @@ def Field(
unique: Union[bool, UndefinedType] = Undefined,
nullable: Union[bool, UndefinedType] = Undefined,
index: Union[bool, UndefinedType] = Undefined,
sa_type: Union[Type[Any], UndefinedType] = Undefined,
sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined,
sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined,
schema_extra: Optional[Dict[str, Any]] = None,
@ -264,6 +271,7 @@ def Field(
unique: Union[bool, UndefinedType] = Undefined,
nullable: Union[bool, UndefinedType] = Undefined,
index: Union[bool, UndefinedType] = Undefined,
sa_type: Union[Type[Any], UndefinedType] = Undefined,
sa_column: Union[Column, UndefinedType] = Undefined, # type: ignore
sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined,
sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined,
@ -300,6 +308,7 @@ def Field(
unique=unique,
nullable=nullable,
index=index,
sa_type=sa_type,
sa_column=sa_column,
sa_column_args=sa_column_args,
sa_column_kwargs=sa_column_kwargs,
@ -515,6 +524,9 @@ class SQLModelMetaclass(ModelMetaclass, DeclarativeMeta):
def get_sqlalchemy_type(field: ModelField) -> Any:
sa_type = getattr(field.field_info, "sa_type") # noqa: B009
if sa_type is not Undefined:
return sa_type
if isinstance(field.type_, type) and field.shape == SHAPE_SINGLETON:
# Check enums first as an enum can also be a str, needed by Pydantic/FastAPI
if issubclass(field.type_, Enum):

View File

@ -39,6 +39,17 @@ def test_sa_column_no_sa_kargs() -> None:
)
def test_sa_column_no_type() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: Optional[int] = Field(
default=None,
sa_type=Integer,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_primary_key() -> None:
with pytest.raises(RuntimeError):