22from concurrent .futures import ThreadPoolExecutor
33from utils import Database , Data , Metadata , ObjectStorage
44from constants import Constants
5+ import traceback
56
67
78class Parameters :
89 __DATASET_KEY_CHARACTER = "$"
10+ __CLASS_INSTANCE_CHARACTER = "#"
911 __DATASET_WITH_OBJECT_KEY_CHARACTER = "."
1012 __REMOVE_KEY_CHARACTER = ""
1113
@@ -17,23 +19,61 @@ def treat(self, method_parameters: dict) -> dict:
1719 parameters = method_parameters .copy ()
1820
1921 for name , value in parameters .items ():
20- if self .__is_dataset (value ):
21- dataset_name = self .__get_dataset_name_from_value (
22- value )
23- if self .__has_dot_in_dataset_name (value ):
24- object_name = self .__get_name_after_dot_from_value (value )
22+ if type (value ) is list :
23+ new_value = []
24+ for item in value :
25+ new_value .append (self .__treat_value (item ))
26+ parameters [name ] = new_value
27+ else :
28+ parameters [name ] = self .__treat_value (value )
2529
26- parameters [name ] = self .__data .get_object_from_dataset (
27- dataset_name , object_name )
30+ return parameters
2831
29- else :
30- parameters [name ] = self .__data .get_dataset_content (
31- dataset_name )
32+ def __treat_value (self , value : object ) -> object :
33+ if self .__is_dataset (value ):
34+ dataset_name = self .__get_dataset_name_from_value (
35+ value )
3236
33- return parameters
37+ if self .__has_dot_in_dataset_name (value ):
38+ object_name = self .__get_name_after_dot_from_value (value )
39+ return self .__data .get_object_from_dataset (
40+ dataset_name , object_name )
41+
42+ else :
43+ return self .__data .get_dataset_content (
44+ dataset_name )
45+
46+ elif self .__is_a_class_instance (value ):
47+ return self .__get_a_class_instance (value )
48+
49+ else :
50+ return value
51+
52+ def __get_a_class_instance (self , class_code : str ) -> object :
53+ class_instance_name = "class_instance"
54+ class_instance = None
55+ context_variables = {}
3456
35- def __is_dataset (self , value : str ) -> bool :
36- return self .__DATASET_KEY_CHARACTER in value
57+ class_code = class_code .replace (
58+ self .__CLASS_INSTANCE_CHARACTER ,
59+ f'{ class_instance_name } =' )
60+
61+ import tensorflow
62+ exec (class_code , locals (), context_variables )
63+
64+ return context_variables [class_instance_name ]
65+
66+ def __is_a_class_instance (self , value : object ) -> bool :
67+ if type (value ) != str :
68+ return False
69+ else :
70+ return self .__CLASS_INSTANCE_CHARACTER in value
71+
72+ def __is_dataset (self , value : object ) -> bool :
73+ if type (value ) != str :
74+ return False
75+ else :
76+ return self .__DATASET_KEY_CHARACTER in value
3777
3878 def __get_dataset_name_from_value (self , value : str ) -> str :
3979 dataset_name = value .replace (self .__DATASET_KEY_CHARACTER ,
@@ -121,6 +161,7 @@ def __pipeline(self,
121161 flag = True )
122162
123163 except Exception as exception :
164+ traceback .print_exc ()
124165 self .__metadata_creator .create_execution_document (
125166 self .executor_name ,
126167 description ,
@@ -135,7 +176,14 @@ def __pipeline(self,
135176
136177 def __execute_a_object_method (self , class_instance : object , method : str ,
137178 parameters : dict ) -> object :
138- model_method = getattr (class_instance , method )
179+ class_method = getattr (class_instance , method )
139180
140181 treated_parameters = self .__parameters_handler .treat (parameters )
141- return model_method (** treated_parameters )
182+ method_result = class_method (** treated_parameters )
183+
184+ if self .executor_service_type == Constants .TRAIN_TENSORFLOW_TYPE or \
185+ self .executor_service_type == Constants .TRAIN_SCIKITLEARN_TYPE or \
186+ method_result is None :
187+ return class_instance
188+
189+ return method_result
0 commit comments