refactor decorator to separate file
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Type
|
from typing import Any, Dict, List, Optional, TYPE_CHECKING
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
|
|
||||||
@ -8,27 +8,6 @@ if TYPE_CHECKING: # pragma no cover
|
|||||||
from orm.models import Model
|
from orm.models import Model
|
||||||
|
|
||||||
|
|
||||||
class RequiredParams:
|
|
||||||
def __init__(self, *args: str) -> None:
|
|
||||||
self._required = list(args)
|
|
||||||
|
|
||||||
def __call__(self, model_field_class: Type["BaseField"]) -> Type["BaseField"]:
|
|
||||||
old_init = model_field_class.__init__
|
|
||||||
model_field_class._old_init = old_init
|
|
||||||
|
|
||||||
def __init__(instance: "BaseField", *args: Any, **kwargs: Any) -> None:
|
|
||||||
super(instance.__class__, instance).__init__(*args, **kwargs)
|
|
||||||
for arg in self._required:
|
|
||||||
if arg not in kwargs:
|
|
||||||
raise ModelDefinitionError(
|
|
||||||
f"{instance.__class__.__name__} field requires parameter: {arg}"
|
|
||||||
)
|
|
||||||
setattr(instance, arg, kwargs.pop(arg))
|
|
||||||
|
|
||||||
model_field_class.__init__ = __init__
|
|
||||||
return model_field_class
|
|
||||||
|
|
||||||
|
|
||||||
class BaseField:
|
class BaseField:
|
||||||
__type__ = None
|
__type__ = None
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ if TYPE_CHECKING: # pragma no cover
|
|||||||
from orm.models import Model
|
from orm.models import Model
|
||||||
|
|
||||||
|
|
||||||
def create_dummy_instance(fk: Type["Model"], pk: int = None) -> "Model":
|
def create_dummy_instance(fk: Type["Model"], pk: Any = None) -> "Model":
|
||||||
init_dict = {
|
init_dict = {
|
||||||
**{fk.__pkname__: pk or -1},
|
**{fk.__pkname__: pk or -1},
|
||||||
**{
|
**{
|
||||||
|
|||||||
@ -4,7 +4,8 @@ import decimal
|
|||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from pydantic import Json
|
from pydantic import Json
|
||||||
|
|
||||||
from orm.fields.base import BaseField, RequiredParams # noqa I101
|
from orm.fields.base import BaseField # noqa I101
|
||||||
|
from orm.fields.required_decorator import RequiredParams
|
||||||
|
|
||||||
|
|
||||||
@RequiredParams("length")
|
@RequiredParams("length")
|
||||||
|
|||||||
27
orm/fields/required_decorator.py
Normal file
27
orm/fields/required_decorator.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from typing import Any, TYPE_CHECKING, Type
|
||||||
|
|
||||||
|
from orm import ModelDefinitionError
|
||||||
|
|
||||||
|
if TYPE_CHECKING: # pragma no cover
|
||||||
|
from orm.fields import BaseField
|
||||||
|
|
||||||
|
|
||||||
|
class RequiredParams:
|
||||||
|
def __init__(self, *args: str) -> None:
|
||||||
|
self._required = list(args)
|
||||||
|
|
||||||
|
def __call__(self, model_field_class: Type["BaseField"]) -> Type["BaseField"]:
|
||||||
|
old_init = model_field_class.__init__
|
||||||
|
model_field_class._old_init = old_init
|
||||||
|
|
||||||
|
def __init__(instance: "BaseField", *args: Any, **kwargs: Any) -> None:
|
||||||
|
super(instance.__class__, instance).__init__(*args, **kwargs)
|
||||||
|
for arg in self._required:
|
||||||
|
if arg not in kwargs:
|
||||||
|
raise ModelDefinitionError(
|
||||||
|
f"{instance.__class__.__name__} field requires parameter: {arg}"
|
||||||
|
)
|
||||||
|
setattr(instance, arg, kwargs.pop(arg))
|
||||||
|
|
||||||
|
model_field_class.__init__ = __init__
|
||||||
|
return model_field_class
|
||||||
Reference in New Issue
Block a user