1
+ from typing import Type , TypeVar , Any , Union , Dict
2
+
1
3
2
4
def is_model_object (o ):
3
5
from .model_object import ModelObject
@@ -7,7 +9,10 @@ def is_model_object(o):
7
9
return isinstance (o , ModelObject ) or isinstance (o , ModelCollection ) or isinstance (o , ModelDictionary )
8
10
9
11
10
- def wrap_model_property (name , model_type ):
12
+ T = TypeVar ('T' ) # Type variable for model objects
13
+
14
+
15
+ def wrap_model_property (name : str , model_type : Type [T ]) -> Union [Type [T ], None ]:
11
16
"""
12
17
Wrap a nullable model object property so that type checks can be performed during update
13
18
:param name: Property of the derived class
@@ -18,11 +23,11 @@ def wrap_model_property(name, model_type):
18
23
STORAGE_NAME = '_' + name
19
24
20
25
@property
21
- def prop (self ):
26
+ def prop (self ) -> Union [ Type [ T ], None ] :
22
27
return getattr (self , STORAGE_NAME )
23
28
24
29
@prop .setter
25
- def prop (self , value ):
30
+ def prop (self , value : Union [ Type [ T ], str , Dict [ str , Any ], None ] ):
26
31
if value is None or isinstance (value , model_type ):
27
32
setattr (self , STORAGE_NAME , value )
28
33
elif isinstance (value , dict ): # Update from JSON
0 commit comments