add other valid field types, better parse model fields to pydantic model with optional values
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
from typing import Any
|
||||
from typing import Any, Optional
|
||||
|
||||
import sqlalchemy
|
||||
from pydantic import create_model
|
||||
@ -6,6 +6,17 @@ from pydantic import create_model
|
||||
from orm.fields import BaseField
|
||||
|
||||
|
||||
def parse_pydantic_field_from_model_fields(object_dict: dict):
|
||||
pydantic_fields = {field_name: (
|
||||
base_field.__type__,
|
||||
... if (not base_field.nullable and not base_field.default) else (
|
||||
base_field.default() if callable(base_field.default) else base_field.default)
|
||||
)
|
||||
for field_name, base_field in object_dict.items()
|
||||
if isinstance(base_field, BaseField)}
|
||||
return pydantic_fields
|
||||
|
||||
|
||||
class ModelMetaclass(type):
|
||||
def __new__(
|
||||
mcs: type, name: str, bases: Any, attrs: dict
|
||||
@ -28,9 +39,7 @@ class ModelMetaclass(type):
|
||||
pkname = field_name
|
||||
columns.append(field.get_column(field_name))
|
||||
|
||||
pydantic_fields = {field_name: (base_field.__type__, base_field.default or ...)
|
||||
for field_name, base_field in new_model.__dict__.items()
|
||||
if isinstance(base_field, BaseField)}
|
||||
pydantic_fields = parse_pydantic_field_from_model_fields(new_model.__dict__)
|
||||
|
||||
new_model.__table__ = sqlalchemy.Table(tablename, metadata, *columns)
|
||||
new_model.__columns__ = columns
|
||||
|
||||
Reference in New Issue
Block a user