コード例 #1
0
ファイル: __main__.py プロジェクト: sercanyaldiz/GOB-Workflow
 def _start_import(self, catalog: str, collection: str, application: str):
     job = Workflow(IMPORT).start_new({
         'catalogue': catalog,
         'collection': collection,
         'application': application,
     })
     self._wait_job_finished(job)
コード例 #2
0
ファイル: __main__.py プロジェクト: sercanyaldiz/GOB-Workflow
def start_workflow(msg):
    """
    Start a workflow using the parameters that are contained in the message header

    :param msg: The message that will be used to start a workflow
    :return: None
    """
    # Retrieve the workflow parameters
    workflow_name = msg['workflow']['workflow_name']
    step_name = msg['workflow'].get('step_name')
    # Delete the parameters so that they do not get transferred in the workflow
    del msg['workflow']

    # Start the workflow with the given message
    if workflow_name and step_name:
        Workflow(workflow_name, step_name).start(msg)
    elif workflow_name:
        Workflow(workflow_name).start(msg)
    else:
        Workflow.end_of_workflow(msg)
コード例 #3
0
    def execute_command(self, command: StartCommand):
        """Executes input command

        :param command:
        :return:
        """
        input_args = self._parse_arguments(command)
        args = [command.workflow]

        if command.start_step:
            args.append(command.start_step)

        Workflow(*args).start_new(input_args)
コード例 #4
0
ファイル: __main__.py プロジェクト: sercanyaldiz/GOB-Workflow
def handle_result(msg):
    """
    Handle the result of a message.
    Result messages are received via the result queue

    The message is matched with a step in a workflow and the result handling method
    of this workflow step is executed
    :param msg: The result message
    :return: None
    """
    # Retrieve the job and step from the message header
    header = msg['header']
    jobid = header['jobid']
    stepid = header['stepid']
    # Get the job and step from the database
    job, step = get_job_step(jobid, stepid)
    # Start the result handler method with the given message
    if hooks.has_hooks(msg):
        hooks.handle_result(msg)
    else:
        Workflow(job.type, step.name).handle_result()(msg)
コード例 #5
0
ファイル: __main__.py プロジェクト: sercanyaldiz/GOB-Workflow
 def _start_relate(self, catalog: str):
     job = Workflow(RELATE).start_new({'catalogue': catalog})
     self._wait_job_finished(job)
コード例 #6
0
 def setUp(self):
     self.workflow = Workflow("Workflow", "Step")
     WORKFLOWS["Workflow"]["Step"]["function"] = mock.MagicMock()
     WORKFLOWS["Workflow"]["Next"]["function"] = mock.MagicMock()
     WORKFLOWS["Workflow"]["OtherNext"]["function"] = mock.MagicMock()
コード例 #7
0
class TestWorkflow(TestCase):
    @mock.patch("gobworkflow.workflow.workflow.WORKFLOWS", WORKFLOWS)
    def setUp(self):
        self.workflow = Workflow("Workflow", "Step")
        WORKFLOWS["Workflow"]["Step"]["function"] = mock.MagicMock()
        WORKFLOWS["Workflow"]["Next"]["function"] = mock.MagicMock()
        WORKFLOWS["Workflow"]["OtherNext"]["function"] = mock.MagicMock()

    def test_create(self):
        self.assertIsNotNone(self.workflow)

    @mock.patch("gobworkflow.workflow.workflow.job_runs", lambda j: False)
    @mock.patch("gobworkflow.workflow.workflow.step_start")
    @mock.patch("gobworkflow.workflow.workflow.job_start")
    def test_start(self, job_start, step_start):
        job_start.return_value = {'id': "Any process id"}
        self.workflow.start({})

        WORKFLOWS["Workflow"]["Step"]["function"].assert_called_with({
            'header': {
                'process_id': 'Any process id'
            },
            'summary': {}
        })
        job_start.assert_called_with('Workflow', {
            'header': {
                'process_id': 'Any process id'
            },
            'summary': {}
        })
        step_start.assert_called_with('Step', {'process_id': 'Any process id'})

    def test_start_new(self):
        self.workflow.start = mock.MagicMock()
        attrs = {
            'h1': 'v1',
            'h2': 'v2',
        }
        self.workflow.start_new(attrs)

        self.workflow.start.assert_called_with(
            {'header': {
                'h1': 'v1',
                'h2': 'v2',
            }})

    @mock.patch("gobworkflow.workflow.workflow.logger", mock.MagicMock())
    @mock.patch("gobworkflow.workflow.workflow.job_runs", lambda j: True)
    @mock.patch("gobworkflow.workflow.workflow.step_start")
    @mock.patch("gobworkflow.workflow.workflow.job_start")
    def test_start_and_end_job_runs(self, job_start, step_start):
        WORKFLOWS["Workflow"]["Step"]["function"] = lambda _: END_OF_WORKFLOW
        self.workflow.start({})
        job_start.assert_called_with(
            "Workflow", {'header': {
                'process_id': mock.ANY,
                'entity': None
            }})
        step_start.assert_called_with('accept', {
            'process_id': mock.ANY,
            'entity': None
        })

    @mock.patch("gobworkflow.workflow.workflow.job_runs", lambda j: False)
    @mock.patch("gobworkflow.workflow.workflow.logger", mock.MagicMock())
    @mock.patch("gobworkflow.workflow.workflow.step_start")
    @mock.patch("gobworkflow.workflow.workflow.job_start")
    def test_start_and_end(self, job_start, step_start):
        job_start.return_value = {'id': "Any process id"}
        WORKFLOWS["Workflow"]["Step"]["function"] = lambda _: END_OF_WORKFLOW
        self.workflow.start({})
        job_start.assert_called_with('Workflow', {
            'header': {
                'process_id': 'Any process id'
            },
            'summary': {}
        })
        step_start.assert_called_with('Step', {'process_id': 'Any process id'})

    @mock.patch("gobworkflow.workflow.workflow.job_runs", lambda j: False)
    @mock.patch("gobworkflow.workflow.workflow.step_start")
    @mock.patch("gobworkflow.workflow.workflow.job_start")
    def test_start_with_contents(self, job_start, step_start):
        job_start.return_value = {'id': "Any process id"}
        self.workflow.start({'summary': 'any summary', 'contents': []})

        WORKFLOWS["Workflow"]["Step"]["function"].assert_called_with({
            'summary': {},
            'contents': [],
            'header': {
                'process_id': 'Any process id'
            }
        })
        job_start.assert_called_with(
            'Workflow', {
                'summary': {},
                'contents': [],
                'header': {
                    'process_id': 'Any process id'
                }
            })
        step_start.assert_called_with('Step', {'process_id': 'Any process id'})

    @mock.patch("gobworkflow.workflow.workflow.logger", mock.MagicMock())
    @mock.patch("gobworkflow.workflow.workflow.job_end")
    def test_handle_result_without_next(self, job_end):
        handler = self.workflow.handle_result()
        handler({"header": {}, "condition": False})

        WORKFLOWS["Workflow"]["Next"]["function"].assert_not_called()
        job_end.assert_called()

    @mock.patch("gobworkflow.workflow.workflow.step_start")
    def test_handle_result_with_next(self, step_start):
        handler = self.workflow.handle_result()
        handler({"header": {}, "condition": True})

        WORKFLOWS["Workflow"]["Next"]["function"].assert_called_with({
            "header": {},
            "summary": {},
            "condition":
            True
        })
        step_start.assert_called()

    @mock.patch("gobworkflow.workflow.workflow.step_start", mock.MagicMock())
    def test_handle_result_with_multiple_nexts(self):
        handler = self.workflow.handle_result()
        handler({"header": {}, "next": True})

        # Only execute the first matching next step
        WORKFLOWS["Workflow"]["Next"]["function"].assert_not_called()
        WORKFLOWS["Workflow"]["OtherNext"]["function"].assert_called_with({
            "header": {},
            "summary": {},
            "next":
            True
        })