Пример #1
0
    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
Пример #2
0
    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
Пример #3
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")
Пример #4
0
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"
        )
Пример #5
0
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