@@ -76,6 +76,7 @@ def __init__(self, manager_def: dict):
7676 self .name = manager_def ['name' ]
7777 self .is_async = False
7878 self .supports_subscribing = False
79+ self .supports_request_headers = False
7980 self .connection = manager_def .get ('connection' )
8081 self .output_dir = manager_def .get ('output_dir' )
8182
@@ -194,7 +195,8 @@ def _execute_handler_async(self, p: BaseProcessor, job_id: str,
194195 data_dict : dict ,
195196 requested_outputs : Optional [dict ] = None ,
196197 subscriber : Optional [Subscriber ] = None ,
197- requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value # noqa
198+ requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value , # noqa
199+ request_headers : Optional [dict ] = None
198200 ) -> Tuple [str , None , JobStatus ]:
199201 """
200202 This private execution handler executes a process in a background
@@ -215,13 +217,15 @@ def _execute_handler_async(self, p: BaseProcessor, job_id: str,
215217 :param subscriber: optional `Subscriber` specifying callback URLs
216218 :param requested_response: `RequestedResponse` optionally specifying
217219 raw or document (default is `raw`)
220+ :param request_headers: `dict` optionally specifying the headers from
221+ the request
218222
219223 :returns: tuple of None (i.e. initial response payload)
220224 and JobStatus.accepted (i.e. initial job status)
221225 """
222226
223227 args = (p , job_id , data_dict , requested_outputs , subscriber ,
224- requested_response )
228+ requested_response , request_headers )
225229
226230 _process = dummy .Process (target = self ._execute_handler_sync , args = args )
227231 _process .start ()
@@ -232,7 +236,8 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str,
232236 data_dict : dict ,
233237 requested_outputs : Optional [dict ] = None ,
234238 subscriber : Optional [Subscriber ] = None ,
235- requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value # noqa
239+ requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value , # noqa
240+ request_headers : Optional [dict ] = None
236241 ) -> Tuple [str , Any , JobStatus ]:
237242 """
238243 Synchronous execution handler
@@ -254,16 +259,20 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str,
254259 :param subscriber: optional `Subscriber` specifying callback URLs
255260 :param requested_response: `RequestedResponse` optionally specifying
256261 raw or document (default is `raw`)
262+ :param request_headers: `dict` optionally specifying the headers from
263+ the request
257264
258265 :returns: tuple of MIME type, response payload and status
259266 """
260267
261268 extra_execute_parameters = {}
262269
263- # only pass requested_outputs if supported,
270+ # only pass requested_outputs and request_headers if supported,
264271 # otherwise this breaks existing processes
265272 if p .supports_outputs :
266273 extra_execute_parameters ['outputs' ] = requested_outputs
274+ if p .supports_request_headers :
275+ extra_execute_parameters ['request_headers' ] = request_headers
267276
268277 self ._send_in_progress_notification (subscriber )
269278
@@ -358,7 +367,8 @@ def execute_process(
358367 execution_mode : Optional [RequestedProcessExecutionMode ] = None ,
359368 requested_outputs : Optional [dict ] = None ,
360369 subscriber : Optional [Subscriber ] = None ,
361- requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value # noqa
370+ requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value , # noqa
371+ request_headers : Optional [dict ] = None
362372 ) -> Tuple [str , Any , JobStatus , Optional [Dict [str , str ]]]:
363373 """
364374 Default process execution handler
@@ -377,6 +387,8 @@ def execute_process(
377387 :param subscriber: `Subscriber` optionally specifying callback urls
378388 :param requested_response: `RequestedResponse` optionally specifying
379389 raw or document (default is `raw`)
390+ :param request_headers: `dict` optionally specifying the headers from
391+ the request
380392
381393
382394 :raises UnknownProcessError: if the input process_id does not
@@ -443,10 +455,12 @@ def execute_process(
443455 }
444456 self .add_job (job_metadata )
445457
446- # only pass subscriber if supported, otherwise this breaks
458+ # only pass subscriber and headers if supported, otherwise this breaks
447459 # existing managers
448460 if self .supports_subscribing :
449461 extra_execute_handler_parameters ['subscriber' ] = subscriber
462+ if self .supports_request_headers :
463+ extra_execute_handler_parameters ['request_headers' ] = request_headers # noqa
450464
451465 # TODO: handler's response could also be allowed to include more HTTP
452466 # headers
0 commit comments