Exemplo n.º 1
0
class Article(object):
    """Article ingestion workflow for Literature collection."""
    name = "HEP"
    data_type = "hep"

    workflow = (
        PRE_PROCESSING + NOTIFY_IF_SUBMISSION + MARK_IF_MATCH_IN_HOLDINGPEN +
        CHECK_IS_UPDATE + STOP_IF_EXISTING_SUBMISSION + CHECK_AUTO_APPROVE +
        PROCESS_HOLDINGPEN_MATCHES + ENHANCE_RECORD +
        HALT_FOR_APPROVAL_IF_NEW_OR_STOP_IF_NOT_RELEVANT + [
            IF_ELSE(
                is_record_accepted,
                (POSTENHANCE_RECORD + STORE_RECORD + SEND_TO_LEGACY +
                 STORE_ROOT + NOTIFY_ACCEPTED + NOTIFY_CURATOR_IF_NEEDED),
                NOTIFY_NOT_ACCEPTED,
            ),
            IF(
                is_submission,
                do_not_repeat('close_ticket_user_submission')(
                    close_ticket(ticket_id_key="ticket_id")),
            )
        ] + FIND_NEXT_AND_RUN_IF_NECESSARY)
Exemplo n.º 2
0
    wait_webcoll,
)
from inspirehep.modules.workflows.utils import do_not_repeat
from inspirehep.modules.literaturesuggest.tasks import (
    curation_ticket_needed,
    reply_ticket_context,
    new_ticket_context,
    curation_ticket_context,
)


NOTIFY_SUBMISSION = [
    do_not_repeat('create_ticket_curator_new_submission')(
        create_ticket(
            template="literaturesuggest/tickets/curator_submitted.html",
            queue="HEP_add_user",
            context_factory=new_ticket_context,
            ticket_id_key="ticket_id"
        ),
    ),
    do_not_repeat('reply_ticket_user_new_submission')(
        reply_ticket(
            template="literaturesuggest/tickets/user_submitted.html",
            context_factory=reply_ticket_context,
            keep_new=True
        ),
    )
]

CHECK_AUTO_APPROVE = [
    IF_ELSE(
        is_submission,
Exemplo n.º 3
0
def test_do_not_repeat(
    mocked_refextract_extract_refs,
    mocked_api_request_magpie,
    mocked_api_request_beard,
    mocked_is_pdf_link,
    mocked_package_download,
    mocked_arxiv_download,
    workflow_app,
    mocked_external_services,
):
    def return_value(val):
        def _return_value(obj, eng):
            obj.extra_data["id"] = val
            obj.save()
            return {"id": val}

        return _return_value

    custom_wf_steps = [
        load_from_source_data,
        do_not_repeat("one")(return_value(1)),
        do_not_repeat("two")(return_value(2)),
    ]

    custom_wf_steps_to_repeat = [
        load_from_source_data,
        do_not_repeat("one")(return_value(41)),
        do_not_repeat("two")(return_value(42)),
        do_not_repeat("three")(return_value(43)),
    ]

    expected_persistent_data_first_run = {
        'one': {
            'id': 1
        },
        'two': {
            'id': 2
        }
    }.viewitems()

    expected_persistent_data_second_run = {
        'one': {
            'id': 1
        },
        'two': {
            'id': 2
        },
        'three': {
            'id': 43
        },
    }.viewitems()

    record = generate_record()

    with workflow_app.app_context():
        wf_id = build_workflow(record).id
        workflow_uuid = start("article", object_id=wf_id)

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        eng = WorkflowEngine.from_uuid(obj.id_workflow)
        eng.callbacks.replace(custom_wf_steps)
        eng.process([obj])

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        persistent_data = obj.extra_data['source_data'][
            'persistent_data'].viewitems()
        assert expected_persistent_data_first_run <= persistent_data
        assert obj.extra_data['id'] == 2
        assert obj.status == ObjectStatus.COMPLETED

        eng = WorkflowEngine.from_uuid(obj.id_workflow)
        eng.callbacks.replace(custom_wf_steps_to_repeat)
        obj.callback_pos = [0]
        obj.save()
        db.session.commit()
        eng.process([obj])

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        persistent_data = obj.extra_data['source_data'][
            'persistent_data'].viewitems()
        assert expected_persistent_data_second_run <= persistent_data
        assert obj.extra_data['id'] == 43
def test_do_not_repeat(
    mocked_refextract_extract_refs,
    mocked_api_request_magpie,
    mocked_api_request_beard,
    mocked_is_pdf_link,
    mocked_package_download,
    mocked_arxiv_download,
    workflow_app,
    mocked_external_services,
):
    def return_value(val):
        def _return_value(obj, eng):
            obj.extra_data["id"] = val
            obj.save()
            return {"id": val}

        return _return_value

    custom_wf_steps = [
        load_from_source_data,
        do_not_repeat("one")(return_value(1)),
        do_not_repeat("two")(return_value(2)),
    ]

    custom_wf_steps_to_repeat = [
        load_from_source_data,
        do_not_repeat("one")(return_value(41)),
        do_not_repeat("two")(return_value(42)),
        do_not_repeat("three")(return_value(43)),
    ]

    expected_persistent_data_first_run = {
        'one': {'id': 1},
        'two': {'id': 2}
    }.viewitems()

    expected_persistent_data_second_run = {
        'one': {'id': 1},
        'two': {'id': 2},
        'three': {'id': 43},
    }.viewitems()

    record = generate_record()

    with workflow_app.app_context():
        wf_id = build_workflow(record).id
        workflow_uuid = start("article", object_id=wf_id)

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        eng = WorkflowEngine.from_uuid(obj.id_workflow)
        eng.callbacks.replace(custom_wf_steps)
        eng.process([obj])

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        persistent_data = obj.extra_data['source_data']['persistent_data'].viewitems()
        assert expected_persistent_data_first_run <= persistent_data
        assert obj.extra_data['id'] == 2
        assert obj.status == ObjectStatus.COMPLETED

        eng = WorkflowEngine.from_uuid(obj.id_workflow)
        eng.callbacks.replace(custom_wf_steps_to_repeat)
        obj.callback_pos = [0]
        obj.save()
        db.session.commit()
        eng.process([obj])

        eng = WorkflowEngine.from_uuid(workflow_uuid)
        obj = eng.processed_objects[0]

        persistent_data = obj.extra_data['source_data']['persistent_data'].viewitems()
        assert expected_persistent_data_second_run <= persistent_data
        assert obj.extra_data['id'] == 43
Exemplo n.º 5
0
from inspirehep.modules.authors.tasks import (
    curation_ticket_context,
    curation_ticket_needed,
    new_ticket_context,
    reply_ticket_context,
    update_ticket_context,
)
from inspirehep.modules.workflows.utils import do_not_repeat

SEND_TO_LEGACY = [
    send_robotupload(mode="insert"),
]

NOTIFY_ACCEPTED = [
    do_not_repeat('reply_ticket_author_submission_accepted')(reply_ticket(
        template="authors/tickets/user_accepted.html",
        context_factory=reply_ticket_context)),
    do_not_repeat('close_ticket_author_submission_accepted')(
        close_ticket(ticket_id_key="ticket_id")),
]

CLOSE_TICKET_IF_NEEDED = [
    IF(curation_ticket_needed, [
        do_not_repeat('create_ticket_author_submission_curation_needed')(
            create_ticket(template="authors/tickets/curation_needed.html",
                          queue="AUTHORS_curation",
                          context_factory=curation_ticket_context,
                          ticket_id_key="curation_ticket_id")),
    ]),
]
Exemplo n.º 6
0
    new_ticket_context,
    reply_ticket_context,
    update_ticket_context,
)
from inspirehep.modules.workflows.utils import do_not_repeat


SEND_TO_LEGACY = [
    send_robotupload(mode="insert", priority_config_key='LEGACY_ROBOTUPLOAD_PRIORITY_AUTHOR'),
]


NOTIFY_ACCEPTED = [
    do_not_repeat('reply_ticket_author_submission_accepted')(
        reply_ticket(
            template="authors/tickets/user_accepted.html",
            context_factory=reply_ticket_context)
    ),
    do_not_repeat('close_ticket_author_submission_accepted')(
        close_ticket(ticket_id_key="ticket_id")
    ),
]


CLOSE_TICKET_IF_NEEDED = [
    IF(curation_ticket_needed, [
        do_not_repeat('create_ticket_author_submission_curation_needed')(
            create_ticket(
                template="authors/tickets/curation_needed.html",
                queue="AUTHORS_curation",
                context_factory=curation_ticket_context,