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