def from_json(cls, value): """init this request from json back again :param value: the json (not string) representation """ process = Process.from_json(value['process']) wps_request = WPSRequest() wps_request.json = json.loads(value['wps_request']) wps_response = ExecuteResponse(wps_request=wps_request, uuid=process.uuid, process=process) wps_response.store_status_file = True new_job = Job(process=Process.from_json(value['process']), wps_request=wps_request, wps_response=wps_response) return new_job
def test_insert_request(self): requests = self.session.query(RequestInstance) assert requests.count() == 0 obj = { 'operation': 'execute', 'version': '1.0.0', 'language': 'eng', 'identifier': 'multiple-outputs', 'store_execute': True, 'status': True, 'lineage': True, 'inputs': { 'count': [{ 'identifier': 'count', 'type': 'literal', 'data': 3 }] }, 'outputs': {}, 'raw': False } request = WPSRequest() request.json = obj from .processes.metalinkprocess import MultipleOutputs process = MultipleOutputs() process.uuid = uuid.uuid4() store_request(process.uuid, request, process) requests = self.session.query(RequestInstance) assert requests.count() == 1 stored_request = pop_first_stored() job = Job.from_json({ "process": json.loads(stored_request.process), "wps_request": json.loads(stored_request.request) }) assert job.process.identifier == "multiple-outputs" assert str(job.process.uuid) == str(process.uuid) requests = self.session.query(RequestInstance) assert requests.count() == 0
def test_parse_wps_input(): obj = { "operation": "execute", "version": "1.0.0", "language": "eng", "identifier": "subset", "identifiers": "subset", # TODO: why identifierS? "store_execute": True, "status": True, "lineage": True, "inputs": { "time": [{ "identifier": "time", "type": "literal", "data_type": "string", "allowed_values": [{ "type": "anyvalue" }], "data": "1970/1980", }], "time_components": [{ "identifier": "time", "type": "literal", "data_type": "string", "allowed_values": [{ "type": "anyvalue" }], "data": "year:1970,1980|month=01,02,03", }], }, "outputs": {}, "raw": False, } request = WPSRequest() request.json = obj assert parse_wps_input(request.inputs, "time", default=None) == "1970/1980" assert (parse_wps_input(request.inputs, "time_components", default=None) == "year:1970,1980|month=01,02,03")
def test_stdout_stderr_logging_for_commandline_tool_failure(): """ Execute a process and assert that stderr is correctly logged to log file. """ process = Process({ "title": "test-stdout-stderr", "id": "test-stdout-stderr", "package": { "cwlVersion": "v1.0", "class": "CommandLineTool", "baseCommand": "not_existing_command", "inputs": { "message": { "type": "string", "inputBinding": { "position": 1 } } }, "outputs": {} } }) payload = process package = process["package"] title = process["title"] identifier = process["id"] # WPSPackage._handle() log_file = tempfile.NamedTemporaryFile() status_location = log_file.name workdir = tempfile.TemporaryDirectory() class TestWpsPackage(WpsPackage): @property def status_location(self): return status_location wps_package_instance = TestWpsPackage(identifier=identifier, title=title, payload=payload, package=package) wps_package_instance.set_workdir(workdir.name) # WPSRequest mock wps_request = WPSRequest() wps_request.json = { "identifier": "test-stdout-stderr", "operation": "execute", "version": "1.0.0", "language": "null", "identifiers": "null", "store_execute": "true", "status": "true", "lineage": "true", "raw": "false", "inputs": { "message": [{ "identifier": "message", "title": "A dummy message", "type": "literal", "data_type": "string", "data": "Dummy message", "allowed_values": [], }] }, "outputs": {} } # ExecuteResponse mock wps_response = type("", (object, ), { "_update_status": lambda *_, **__: 1 })() from weaver.exceptions import PackageExecutionError try: wps_package_instance._handler(wps_request, wps_response) except PackageExecutionError as exception: assert "Completed permanentFail" in exception.args[0] else: fail( "\"wps_package._handler()\" was expected to throw \"PackageExecutionError\" exception" )
def test_stdout_stderr_logging_for_commandline_tool_success(): """ Execute a process and assert that stdout is correctly logged to log file. """ process = Process({ "title": "test-stdout-stderr", "id": "test-stdout-stderr", "package": { "cwlVersion": "v1.0", "class": "CommandLineTool", "baseCommand": "echo", "inputs": { "message": { "type": "string", "inputBinding": { "position": 1 } } }, "outputs": {} } }) payload = process package = process["package"] title = process["title"] identifier = process["id"] # WPSPackage._handle() log_file = tempfile.NamedTemporaryFile() status_location = log_file.name workdir = tempfile.TemporaryDirectory() class TestWpsPackage(WpsPackage): @property def status_location(self): return status_location wps_package_instance = TestWpsPackage(identifier=identifier, title=title, payload=payload, package=package) wps_package_instance.set_workdir(workdir.name) # WPSRequest mock wps_request = WPSRequest() wps_request.json = { "identifier": "test-stdout-stderr", "operation": "execute", "version": "1.0.0", "language": "null", "identifiers": "null", "store_execute": "true", "status": "true", "lineage": "true", "raw": "false", "inputs": { "message": [{ "identifier": "message", "title": "A dummy message", "type": "literal", "data_type": "string", "data": "Dummy message", "allowed_values": [], }] }, "outputs": {} } # ExecuteResponse mock wps_response = type("", (object, ), { "_update_status": lambda *_, **__: 1 })() wps_package_instance._handler(wps_request, wps_response) # log assertions with open(status_location + ".log", "r") as file: log_data = file.read() assert "Dummy message" in log_data