@@ -18,14 +18,16 @@ def __init__(
1818 self ,
1919 task_descriptors : list [TaskDescriptor ],
2020 endpoint : str ,
21- allow_failure = False ,
21+ allow_failure = False ,
22+ payload_handler : Optional [Callable [[Any ], Any ]] = None ,
2223 * args ,
2324 ** kwargs
2425 ):
2526
2627 self .task_descriptors = task_descriptors
2728 self .endpoint = endpoint
2829 self .allow_failure = allow_failure
30+ self .payload_handler = payload_handler
2931 super ().__init__ (* args , ** kwargs )
3032
3133 def get_geolocation_from_ip (self , ip : str ):
@@ -61,21 +63,31 @@ def run(self):
6163 if isinstance (raw_task_result , Failure ):
6264 continue
6365
64- task_results = [result .unwrap () for result in raw_task_result ]
66+ raw_results = [result .unwrap () for result in raw_task_result ]
6567
6668 if task_descriptor .handler :
67- task_results = task_descriptor .handler (task_descriptor )
68-
69- execution_results .append ({"task_type" : task_descriptor .datatype , "task_results" : task_results })
69+ task_results = task_descriptor .handler (task_descriptor .datatype , raw_results )
70+ else : # no handler
71+ task_results = {
72+ "task_type" : task_descriptor .datatype ,
73+ "task_results" : raw_results
74+ }
75+ execution_results .append (task_results )
7076
7177 (location_str , * _ ) = self .get_geolocation_from_ip ("8.8.8.8" )
7278
73- response = requests .post (self .endpoint , json =
74- {
75- "client_location" : location_str ,
76- "measurement_type" : self .task_descriptors [0 ].datatype ,
77- "measurement_data" : execution_results
78- })
79+ measurement_data = {"execution_results" : execution_results }
80+
81+ payload = {
82+ "client_location" : location_str ,
83+ "measurement_type" : self .task_descriptors [0 ].datatype ,
84+ "measurement_data" : measurement_data
85+ }
86+
87+ if self .payload_handler :
88+ payload = self .payload_handler (payload )
89+
90+ response = requests .post (self .endpoint , json = payload )
7991
8092 if response .status_code == 200 :
8193 return Success (response .json ())
0 commit comments