diff --git a/pygeoapi/api/processes.py b/pygeoapi/api/processes.py index 3195530ad..b51ff8531 100644 --- a/pygeoapi/api/processes.py +++ b/pygeoapi/api/processes.py @@ -535,6 +535,7 @@ def execute_process(api: API, request: APIRequest, 'type': 'process', 'status': status.value } + response2 = to_json(response2, pretty_print_) if api.pubsub_client is not None: LOGGER.debug('Publishing message') diff --git a/pygeoapi/process/base.py b/pygeoapi/process/base.py index 87c05a3cd..9e2136476 100644 --- a/pygeoapi/process/base.py +++ b/pygeoapi/process/base.py @@ -82,7 +82,7 @@ def execute(self, data: dict, outputs: Optional[dict] = None The value of any key may be an object and include the property `transmissionMode` - defaults to `value`. :returns: tuple of MIME type and process response - (string or bytes, or dict) + (string, bytes, list or dict) """ raise NotImplementedError() diff --git a/pygeoapi/process/manager/base.py b/pygeoapi/process/manager/base.py index 159e753f2..fadb90fbd 100644 --- a/pygeoapi/process/manager/base.py +++ b/pygeoapi/process/manager/base.py @@ -277,6 +277,9 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str, current_status = JobStatus.running jfmt, outputs = p.execute(data_dict, **extra_execute_parameters) + if isinstance(outputs, bytes): + outputs = outputs.decode('utf-8') + if requested_response == RequestedResponse.document.value: outputs = { 'outputs': [outputs] @@ -299,6 +302,10 @@ def _execute_handler_sync(self, p: BaseProcessor, job_id: str, mode = 'wb' data = outputs encoding = None + elif isinstance(outputs, str): + mode = 'w' + data = outputs + encoding = None with job_filename.open(mode=mode, encoding=encoding) as fh: fh.write(data) diff --git a/tests/api/test_processes.py b/tests/api/test_processes.py index 3a654b121..a4bd3794f 100644 --- a/tests/api/test_processes.py +++ b/tests/api/test_processes.py @@ -331,8 +331,10 @@ def test_execute_process(config, api_): req = mock_api_request(data=req_body_1, HTTP_Prefer='respond-async') rsp_headers, code, response = execute_process(api_, req, 'hello-world') - assert 'Location' in rsp_headers + response = json.loads(response) assert code == HTTPStatus.CREATED + + assert 'Location' in rsp_headers assert isinstance(response, dict) assert 'jobID' in response assert 'type' in response