1212 Generic ,
1313 get_args ,
1414 get_origin ,
15+ Hashable ,
1516 Optional ,
1617 SupportsIndex ,
1718 Type ,
4647 RestorableContents )
4748from omnipy .util .tabulate import tabulate
4849
49- _KeyT = TypeVar ('_KeyT' )
50+ _KeyT = TypeVar ('_KeyT' , bound = Hashable )
5051_ValT = TypeVar ('_ValT' )
5152_IdxT = TypeVar ('_IdxT' , bound = SupportsIndex )
52- RootT = TypeVar ('RootT ' , covariant = True , bound = object )
53+ _RootT = TypeVar ('_RootT ' , covariant = True , bound = object )
5354
5455ROOT_KEY = '__root__'
5556
@@ -132,7 +133,7 @@ def __instancecheck__(self, instance: Any) -> bool:
132133 return super ().__instancecheck__ (instance )
133134
134135
135- class Model (GenericModel , Generic [RootT ], metaclass = MyModelMetaclass ):
136+ class Model (GenericModel , Generic [_RootT ], metaclass = MyModelMetaclass ):
136137 """
137138 A data model containing a value parsed according to the model.
138139
@@ -168,7 +169,7 @@ class MyNumberList(Model[list[int]]):
168169 See also docs of the Dataset class for more usage examples.
169170 """
170171
171- __root__ : RootT | None
172+ __root__ : _RootT | None
172173
173174 class Config :
174175 arbitrary_types_allowed = True
@@ -179,7 +180,7 @@ class Config:
179180 # json_dumps = orjson_dumps
180181
181182 @classmethod
182- def _get_bound_if_typevar (cls , model : Type [RootT ]) -> RootT :
183+ def _get_bound_if_typevar (cls , model : Type [_RootT ]) -> _RootT :
183184 if isinstance (model , TypeVar ):
184185 if model .__bound__ is None : # noqa
185186 raise TypeError ('The TypeVar "{}" needs to be bound to a ' .format (model .__name__ )
@@ -189,7 +190,7 @@ def _get_bound_if_typevar(cls, model: Type[RootT]) -> RootT:
189190 return model
190191
191192 @classmethod
192- def _get_default_value_from_model (cls , model : Type [RootT ]) -> RootT : # noqa: C901
193+ def _get_default_value_from_model (cls , model : Type [_RootT ]) -> _RootT : # noqa: C901
193194 model = cls ._get_bound_if_typevar (model )
194195 origin_type = get_origin (model )
195196 args = get_args (model )
@@ -219,10 +220,10 @@ def _get_default_value_from_model(cls, model: Type[RootT]) -> RootT: # noqa: C9
219220 return origin_type ()
220221
221222 @classmethod
222- def _populate_root_field (cls , model : Type [RootT ]) -> None :
223+ def _populate_root_field (cls , model : Type [_RootT ]) -> None :
223224 default_val = cls ._get_default_value_from_model (model )
224225
225- def get_default_val () -> RootT :
226+ def get_default_val () -> _RootT :
226227 return default_val
227228
228229 if ROOT_KEY in cls .__config__ .fields :
@@ -251,7 +252,7 @@ def _depopulate_root_field(cls):
251252 del cls .__fields__ [ROOT_KEY ]
252253 del cls .__annotations__ [ROOT_KEY ]
253254
254- def __class_getitem__ (cls , model : Type [RootT ] | TypeVar ) -> 'Model[Type[RootT ] | TypeVar]' :
255+ def __class_getitem__ (cls , model : Type [_RootT ] | TypeVar ) -> 'Model[Type[_RootT ] | TypeVar]' :
255256 # TODO: change model type to params: Type[Any], tuple[Type[Any], ...]]
256257 # as in GenericModel
257258
@@ -311,20 +312,20 @@ def __init__(
311312 __root__ : Any | UndefinedType = Undefined ,
312313 ** kwargs : Any ,
313314 ) -> None :
314- super_kwargs : dict [str , RootT ] = {}
315+ super_kwargs : dict [str , _RootT ] = {}
315316 num_root_vals = 0
316317
317318 if value is not Undefined :
318- super_kwargs [ROOT_KEY ] = cast (RootT , value )
319+ super_kwargs [ROOT_KEY ] = cast (_RootT , value )
319320 num_root_vals += 1
320321
321322 if __root__ is not Undefined :
322- super_kwargs [ROOT_KEY ] = cast (RootT , __root__ )
323+ super_kwargs [ROOT_KEY ] = cast (_RootT , __root__ )
323324 num_root_vals += 1
324325
325326 if kwargs :
326327 if num_root_vals == 0 or not self .is_param_model ():
327- super_kwargs [ROOT_KEY ] = cast (RootT , kwargs )
328+ super_kwargs [ROOT_KEY ] = cast (_RootT , kwargs )
328329 kwargs = {}
329330 num_root_vals += 1
330331
@@ -399,11 +400,11 @@ def update_forward_refs(cls, **localns: Any) -> None:
399400 def validate_contents (self ) -> None :
400401 self ._validate_and_set_contents (self .contents )
401402
402- def _validate_and_set_contents (self , new_contents : RootT ) -> None :
403+ def _validate_and_set_contents (self , new_contents : _RootT ) -> None :
403404 self .contents = self ._validate_contents_from_value (new_contents )
404405 self ._take_snapshot_of_validated_contents ()
405406
406- def _validate_contents_from_value (self , value : RootT ) -> RootT :
407+ def _validate_contents_from_value (self , value : _RootT ) -> _RootT :
407408 if is_model_instance (value ):
408409 value = value .to_data ()
409410 elif is_pure_pydantic_model (value ):
@@ -428,7 +429,7 @@ def _parse_data(cls, data: Any) -> Any:
428429 return data
429430
430431 @root_validator
431- def _parse_root_object (cls , root_obj : dict [str , RootT ]) -> Any : # noqa
432+ def _parse_root_object (cls , root_obj : dict [str , _RootT ]) -> Any : # noqa
432433 assert ROOT_KEY in root_obj
433434 value = root_obj [ROOT_KEY ]
434435 value = cls ._parse_none_value_with_root_type_if_model (value )
@@ -484,11 +485,11 @@ def _parse_with_root_type_if_model(cls, value: Any, root_field: ModelField,
484485 return value
485486
486487 @property
487- def contents (self ) -> RootT :
488+ def contents (self ) -> _RootT :
488489 return self .__dict__ .get (ROOT_KEY )
489490
490491 @contents .setter
491- def contents (self , value : RootT ) -> None :
492+ def contents (self , value : _RootT ) -> None :
492493 super ().__setattr__ (ROOT_KEY , value )
493494
494495 def dict (self , * args , ** kwargs ) -> dict [str , dict [Any , Any ]]:
@@ -805,34 +806,34 @@ def _is_table():
805806ParamModelT = TypeVar ('ParamModelT' , bound = 'ParamModel' )
806807
807808
808- class DataWithParams (GenericModel , Generic [RootT , KwargValT ]):
809- data : RootT
809+ class DataWithParams (GenericModel , Generic [_RootT , KwargValT ]):
810+ data : _RootT
810811 params : dict [str , KwargValT ]
811812
812813
813- class ParamModel (Model [RootT | DataWithParams [RootT , KwargValT ]], Generic [RootT , KwargValT ]):
814+ class ParamModel (Model [_RootT | DataWithParams [_RootT , KwargValT ]], Generic [_RootT , KwargValT ]):
814815 def __class_getitem__ (
815- cls , model : tuple [Type [RootT ], Type [KwargValT ]]) -> 'ParamModel[RootT , KwargValT]' :
816+ cls , model : tuple [Type [_RootT ], Type [KwargValT ]]) -> 'ParamModel[_RootT , KwargValT]' :
816817 created_model = super ().__class_getitem__ (model )
817818 outer_type = created_model ._get_root_type (outer = True , with_args = True )
818819 default_val = cls ._get_default_value_from_model (outer_type )
819820
820- def get_default_val () -> RootT | DataWithParams [RootT , KwargValT ]:
821+ def get_default_val () -> _RootT | DataWithParams [_RootT , KwargValT ]:
821822 return default_val
822823
823824 root_field = created_model ._get_root_field ()
824825 root_field .default_factory = get_default_val
825826
826827 return created_model
827828
828- def _init (self , super_kwargs : dict [str , RootT ], ** kwargs : KwargValT ) -> None :
829+ def _init (self , super_kwargs : dict [str , _RootT ], ** kwargs : KwargValT ) -> None :
829830 if kwargs and ROOT_KEY in super_kwargs :
830831 super_kwargs [ROOT_KEY ] = cast (
831- RootT , DataWithParams (data = super_kwargs [ROOT_KEY ], params = kwargs ))
832+ _RootT , DataWithParams (data = super_kwargs [ROOT_KEY ], params = kwargs ))
832833
833834 @root_validator
834835 def _parse_root_object (cls , root_obj : dict [str ,
835- RootT | DataWithParams [RootT , KwargValT ]]) -> Any :
836+ _RootT | DataWithParams [_RootT , KwargValT ]]) -> Any :
836837 assert ROOT_KEY in root_obj
837838 root_val = root_obj [ROOT_KEY ]
838839
@@ -848,7 +849,7 @@ def _parse_root_object(cls, root_obj: dict[str,
848849 return {ROOT_KEY : cls ._parse_data (data , ** params )}
849850
850851 @classmethod
851- def _parse_data (cls , data : RootT , ** params : KwargValT ) -> RootT :
852+ def _parse_data (cls , data : _RootT , ** params : KwargValT ) -> _RootT :
852853 return data
853854
854855 def from_data (self , value : object , ** kwargs : KwargValT ) -> None :
@@ -861,7 +862,7 @@ def from_json(self, json_contents: str, **kwargs: KwargValT) -> None:
861862 if kwargs :
862863 self ._validate_and_set_contents_with_params (self .contents , ** kwargs )
863864
864- def _validate_and_set_contents_with_params (self , contents : RootT , ** kwargs : KwargValT ):
865+ def _validate_and_set_contents_with_params (self , contents : _RootT , ** kwargs : KwargValT ):
865866 self ._validate_and_set_contents (DataWithParams (data = contents , params = kwargs ))
866867
867868
0 commit comments