@@ -77,6 +77,7 @@ def __init__(self, manager_def: dict):
77
77
self .name = manager_def ['name' ]
78
78
self .is_async = False
79
79
self .supports_subscribing = False
80
+ self .supports_request_headers = False
80
81
self .connection = manager_def .get ('connection' )
81
82
self .output_dir = manager_def .get ('output_dir' )
82
83
@@ -195,7 +196,8 @@ def _execute_handler_async(self, p: BaseProcessor, job_id: str,
195
196
data_dict : dict ,
196
197
requested_outputs : Optional [dict ] = None ,
197
198
subscriber : Optional [Subscriber ] = None ,
198
- requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value # noqa
199
+ requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value , # noqa
200
+ request_headers : Optional [dict ] = None
199
201
) -> Tuple [str , None , JobStatus ]:
200
202
"""
201
203
This private execution handler executes a process in a background
@@ -216,13 +218,15 @@ def _execute_handler_async(self, p: BaseProcessor, job_id: str,
216
218
:param subscriber: optional `Subscriber` specifying callback URLs
217
219
:param requested_response: `RequestedResponse` optionally specifying
218
220
raw or document (default is `raw`)
221
+ :param request_headers: `dict` optionally specifying the headers from
222
+ the request
219
223
220
224
:returns: tuple of None (i.e. initial response payload)
221
225
and JobStatus.accepted (i.e. initial job status)
222
226
"""
223
227
224
228
args = (p , job_id , data_dict , requested_outputs , subscriber ,
225
- requested_response )
229
+ requested_response , request_headers )
226
230
227
231
_process = dummy .Process (target = self ._execute_handler_sync , args = args )
228
232
_process .start ()
@@ -233,7 +237,8 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str,
233
237
data_dict : dict ,
234
238
requested_outputs : Optional [dict ] = None ,
235
239
subscriber : Optional [Subscriber ] = None ,
236
- requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value # noqa
240
+ requested_response : Optional [RequestedResponse ] = RequestedResponse .raw .value , # noqa
241
+ request_headers : Optional [dict ] = None
237
242
) -> Tuple [str , Any , JobStatus ]:
238
243
"""
239
244
Synchronous execution handler
@@ -255,16 +260,20 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str,
255
260
:param subscriber: optional `Subscriber` specifying callback URLs
256
261
:param requested_response: `RequestedResponse` optionally specifying
257
262
raw or document (default is `raw`)
263
+ :param request_headers: `dict` optionally specifying the headers from
264
+ the request
258
265
259
266
:returns: tuple of MIME type, response payload and status
260
267
"""
261
268
262
269
extra_execute_parameters = {}
263
270
264
- # only pass requested_outputs if supported,
271
+ # only pass requested_outputs and request_headers if supported,
265
272
# otherwise this breaks existing processes
266
273
if p .supports_outputs :
267
274
extra_execute_parameters ['outputs' ] = requested_outputs
275
+ if p .supports_request_headers :
276
+ extra_execute_parameters ['request_headers' ] = request_headers
268
277
269
278
self ._send_in_progress_notification (subscriber )
270
279
@@ -358,7 +367,8 @@ def execute_process(
358
367
execution_mode : Optional [RequestedProcessExecutionMode ] = None ,
359
368
requested_outputs : Optional [dict ] = None ,
360
369
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
362
372
) -> Tuple [str , Any , JobStatus , Optional [Dict [str , str ]]]:
363
373
"""
364
374
Default process execution handler
@@ -377,6 +387,8 @@ def execute_process(
377
387
:param subscriber: `Subscriber` optionally specifying callback urls
378
388
:param requested_response: `RequestedResponse` optionally specifying
379
389
raw or document (default is `raw`)
390
+ :param request_headers: `dict` optionally specifying the headers from
391
+ the request
380
392
381
393
382
394
:raises UnknownProcessError: if the input process_id does not
@@ -442,10 +454,12 @@ def execute_process(
442
454
}
443
455
self .add_job (job_metadata )
444
456
445
- # only pass subscriber if supported, otherwise this breaks
457
+ # only pass subscriber and headers if supported, otherwise this breaks
446
458
# existing managers
447
459
if self .supports_subscribing :
448
460
extra_execute_handler_parameters ['subscriber' ] = subscriber
461
+ if self .supports_request_headers :
462
+ extra_execute_handler_parameters ['request_headers' ] = request_headers # noqa
449
463
450
464
# TODO: handler's response could also be allowed to include more HTTP
451
465
# headers
0 commit comments