From 146dbea0151956f5724dd48314000c467e2b145d Mon Sep 17 00:00:00 2001 From: collerek Date: Tue, 11 Aug 2020 19:03:02 +0200 Subject: [PATCH] refactor decorator to separate file --- .coverage | Bin 53248 -> 53248 bytes orm/fields/base.py | 23 +---------------------- orm/fields/foreign_key.py | 2 +- orm/fields/model_fields.py | 3 ++- orm/fields/required_decorator.py | 27 +++++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 orm/fields/required_decorator.py diff --git a/.coverage b/.coverage index d8930bb67053fbd25ac27e8ab0d7f1591e81a002..b5b4f932fd3d5ebc39d84ab25846aa7fd47a3799 100644 GIT binary patch delta 774 zcmZvaUr19?9LMkN-2J)RJ?GrrR*{)F|IB}(*)rXz9-^1RJ41+Nlsa;OkQ^#uHm$UC0+y>U|CLYP*Se-FBUm2aG~9TSCxR7pe~Wsw%2{ zHv&O#Lm)_74&&~7Hg(YLVX0&%gTuH4C!rtc6?%YVln#Hx8T=9U;eJ>PosbdU3!PN5 zMj*4-ia043c!{mz&_7SAWsGTAia=-&+|P+8fj+s z((!~i`c{i-TaSJ&E-g938!L0_GS0v>xrE73d#VG`F##Jir@PHMmcN&1Cg#Wmy@@u0CUQ06IM4HRw({Al%}_MbF~vAMGFNk| z``t}-ZeB7_VmExA>{+?nxVd_!_T@5b(NmVDfA(p7V}4cH+|jB4nTnhS5^g1ihpGE; lD|Nhr4Y3+4Noreoc8aW?|siH3tT3fmZpSaYi`c$qPw7Nio`B-u0a;T{+JucG)k`u zB#pi<0?T<(pqUXIkQA+M1S!IFg;+ALG757>&>t+;HzMikd!FZg--qAVGc5EB3y*A7 zdZ)`??XuZ4SJiW+RFxMwe2sUp3q80GHenjBKmhDuB55*0V#Gxxc~Mi95joGHQr^9v z&Ya8_6@d%VM$aDl)GJBh=$W=qtg=1fK(^o%LEyswhP2hK@PtO)c3!3p-U4=@BeAx4 z{CwnG?xb9z3+@WhByc`9$#3MqOUhtRDfE#$A5xOkepcM5$cxQEOl?!;(Z(nb4FoWE;zvE3*cQweeP;wN!;>4u9e&Ok)b?P{Sl% z!zL8qGrWf-cnCM41DY9CH5BbuMc#Nwof>pxrW5ns$Fj-j=EXZ1i^AgL3T^K%v>=m* zaq2~OKKtYL*VVPP+U{@b%i0Gl12$;@`k=qWMwm2{v^|=xoeb(^=0G;(OYE(XF3tW5 zPp*Fa9q7z&EU(k+HxqeQ_qr8 z{oC2(`sL2=8}%D2L;Nls%MR-9Ki;x$Ee*Y^&pgQ{Lv(K7sGwpW)n6}R{|chkmrPh# QGDh{!a!D`JvH4Sf0R3RjZ2$lO diff --git a/orm/fields/base.py b/orm/fields/base.py index 9d321f2..d405679 100644 --- a/orm/fields/base.py +++ b/orm/fields/base.py @@ -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 @@ -8,27 +8,6 @@ if TYPE_CHECKING: # pragma no cover 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: __type__ = None diff --git a/orm/fields/foreign_key.py b/orm/fields/foreign_key.py index 0788ce2..b32a887 100644 --- a/orm/fields/foreign_key.py +++ b/orm/fields/foreign_key.py @@ -11,7 +11,7 @@ if TYPE_CHECKING: # pragma no cover 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 = { **{fk.__pkname__: pk or -1}, **{ diff --git a/orm/fields/model_fields.py b/orm/fields/model_fields.py index 813f190..4d841e1 100644 --- a/orm/fields/model_fields.py +++ b/orm/fields/model_fields.py @@ -4,7 +4,8 @@ import decimal import sqlalchemy 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") diff --git a/orm/fields/required_decorator.py b/orm/fields/required_decorator.py new file mode 100644 index 0000000..4deb597 --- /dev/null +++ b/orm/fields/required_decorator.py @@ -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