Example #1
0
class Author(object):
    """Author ingestion workflow for HEPNames/Authors collection."""
    name = "Author"
    data_type = "authors"

    workflow = [
        # Make sure schema is set for proper indexing in Holding Pen
        set_schema,
        # Emit record signals to receive metadata enrichment
        emit_record_signals,
        IF_ELSE(is_marked('is-update'), [
            send_robotupload(marcxml_processor=hepnames2marc,
                             mode="holdingpen"),
            create_ticket(
                template="authors/tickets/curator_update.html",
                queue="Authors_cor_user",
                context_factory=update_ticket_context,
            ),
        ], [
            create_ticket(template="authors/tickets/curator_new.html",
                          queue="Authors_add_user",
                          context_factory=new_ticket_context),
            reply_ticket(template="authors/tickets/user_new.html",
                         context_factory=reply_ticket_context,
                         keep_new=True),
            halt_record(action="author_approval",
                        message="Accept submission?"),
            IF_ELSE(is_record_accepted, [
                send_robotupload(marcxml_processor=hepnames2marc,
                                 mode="insert"),
                reply_ticket(template="authors/tickets/user_accepted.html",
                             context_factory=reply_ticket_context),
                close_ticket(ticket_id_key="ticket_id"),
                IF(curation_ticket_needed, [
                    create_ticket(
                        template="authors/tickets/curation_needed.html",
                        queue="AUTHORS_curation",
                        context_factory=curation_ticket_context,
                        ticket_id_key="curation_ticket_id"),
                ]),
            ], [
                close_ticket(ticket_id_key="ticket_id"),
            ]),
        ]),
    ]
Example #2
0
def test_create_ticket_calls_tickets_create_with_template(
        mock_create_ticket_with_template, mock_user):
    mock_user.query.get.return_value = MockUser('*****@*****.**')
    data = {
        'titles': [
            {
                'title': 'Partial Symmetries of Weak Interactions'
            },
        ],
    }
    template = 'template_path'
    extra_data = {'recid': '1'}
    obj = MockObj(data, extra_data)
    eng = MockEng()
    _create_ticket = create_ticket(template=template)
    _create_ticket(obj, eng)
    mock_create_ticket_with_template.assert_called_with(
        'Test', '*****@*****.**', template, {}, None, extra_data['recid'])
def test_create_ticket_handles_unicode_when_in_production_mode(g_i, r_t, user):
    user.query.get.return_value = MockUser('*****@*****.**')
    r_t.return_value = u'φοο'
    g_i.return_value = StubRTInstance()

    config = {'PRODUCTION_MODE': True}

    with patch.dict(current_app.config, config):
        data = {}
        extra_data = {}
        files = MockFiles({})

        obj = MockObj(data, extra_data, files)
        eng = MockEng()

        _create_ticket = create_ticket(None)

        assert _create_ticket(obj, eng) is None
        assert obj.extra_data == {'ticket_id': 1}
        assert u'Ticket 1 created:\nφοο' in obj.log._info.getvalue()
def test_create_ticket_calls_tickets_create_with_template(mock_create_ticket_with_template, mock_user):
    mock_user.query.get.return_value = MockUser('*****@*****.**')
    data = {
        'titles': [
            {'title': 'Partial Symmetries of Weak Interactions'},
        ],
    }
    template = 'template_path'
    extra_data = {'recid': '1'}
    obj = MockObj(data, extra_data)
    eng = MockEng()
    _create_ticket = create_ticket(template=template)
    _create_ticket(obj, eng)
    mock_create_ticket_with_template.assert_called_with(
        'Test',
        '*****@*****.**',
        template,
        {},
        None,
        extra_data['recid']
    )
def test_create_ticket_handles_unicode_when_not_in_production_mode(r_t, user):
    user.query.get.return_value = MockUser('*****@*****.**')
    r_t.return_value = u'φοο'

    config = {'PRODUCTION_MODE': False}

    with patch.dict(current_app.config, config):
        data = {}
        extra_data = {}
        files = MockFiles({})

        obj = MockObj(data, extra_data, files)
        eng = MockEng()

        _create_ticket = create_ticket(None)

        expected = (
            u'Was going to create ticket: None\n\nφοο\n\n'
            u'To: [email protected] Queue: Test'
        )

        assert _create_ticket(obj, eng) is None
        assert expected == obj.log._info.getvalue()
Example #6
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,
Example #7
0
)

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

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

CLOSE_TICKET_IF_NEEDED = [
    IF(curation_ticket_needed, [
        create_ticket(template="authors/tickets/curation_needed.html",
                      queue="AUTHORS_curation",
                      context_factory=curation_ticket_context,
                      ticket_id_key="curation_ticket_id"),
    ]),
]

NOTIFY_NOT_ACCEPTED = [
    close_ticket(ticket_id_key="ticket_id"),
]

SEND_UPDATE_NOTIFICATION = [
    send_robotupload(mode="holdingpen", callback_url=None),
    create_ticket(
        template="authors/tickets/curator_update.html",
        queue="Authors_cor_user",
        context_factory=update_ticket_context,
    ),
Example #8
0
    reply_ticket,
    send_to_legacy,
)
from inspirehep.modules.workflows.utils import do_not_repeat
from inspirehep.modules.literaturesuggest.tasks import (
    curation_ticket_needed,
    check_source_publishing,
    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,
        mark('auto-approved', False),
        IF_ELSE(
            auto_approve,
            [
Example #9
0
    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")),
    ]),
]

NOTIFY_NOT_ACCEPTED = [
    close_ticket(ticket_id_key="ticket_id"),
]

SEND_UPDATE_NOTIFICATION = [
    send_robotupload(mode="holdingpen", callback_url=None),
    do_not_repeat('create_ticket_author_submission_curator_update')(
        create_ticket(
            template="authors/tickets/curator_update.html",
            queue="Authors_cor_user",
            context_factory=update_ticket_context,
Example #10
0
class Article(object):
    """Article ingestion workflow for Literature collection."""
    name = "HEP"
    data_type = "hep"

    workflow = [
        # Make sure schema is set for proper indexing in Holding Pen
        set_schema,
        # Emit record signals to receive metadata enrichment
        emit_record_signals,
        # Query locally or via legacy search API to see if article
        # is already ingested and this is an update
        IF(article_exists, [
            mark('match-found', True),
        ]),
        IF_ELSE(
            is_submission,
            [
                # Article matching for submissions
                # ================================
                IF(pending_in_holding_pen, [
                    mark('already-in-holding-pen', True),
                ]),
                # Special RT integration for submissions
                # ======================================
                create_ticket(
                    template="literaturesuggest/tickets/curator_submitted.html",
                    queue="HEP_add_user",
                    context_factory=new_ticket_context,
                    ticket_id_key="ticket_id"),
                reply_ticket(
                    template="literaturesuggest/tickets/user_submitted.html",
                    context_factory=reply_ticket_context,
                    keep_new=True),
            ],
            [
                # Article matching for non-submissions
                # ====================================
                # Query holding pen to see if we already have this article ingested
                #
                # NOTE on updates:
                #     If the same article has been harvested before and the
                #     ingestion has been completed, process is continued
                #     to allow for updates.
                IF(pending_in_holding_pen, [
                    mark('already-in-holding-pen', True),
                    mark('delete', True),
                ]),
                IF(
                    is_arxiv_paper,
                    [
                        # FIXME: This filtering step should be removed when this
                        #        workflow includes arXiv CORE harvesting
                        IF(already_harvested, [
                            mark('already-ingested', True),
                            mark('stop', True),
                        ]),
                        # FIXME: This filtering step should be removed when:
                        #        old previously rejected records are treated
                        #        differently e.g. good auto-reject heuristics or better
                        #        time based filtering (5 days is quite random now).
                        IF(previously_rejected(), [
                            mark('already-ingested', True),
                            mark('stop', True),
                        ]),
                    ]),
                IF(is_marked('delete'),
                   [update_old_object, delete_self_and_stop_processing]),
                IF(is_marked('stop'), [stop_processing]),
            ]),
        #
        # Article Processing
        # ==================
        IF(is_arxiv_paper, [
            arxiv_fulltext_download,
            arxiv_plot_extract,
            arxiv_refextract,
            arxiv_author_list("authorlist2marcxml.xsl"),
        ]),
        extract_journal_info,
        classify_paper(
            taxonomy="HEPont.rdf",
            only_core_tags=False,
            spires=True,
            with_author_keywords=True,
        ),
        filter_core_keywords,
        guess_categories,
        IF(is_experimental_paper, [
            guess_experiments,
        ]),
        guess_keywords,
        # Predict action for a generic HEP paper based only on title
        # and abstract.
        guess_coreness,  # ("arxiv_skip_astro_title_abstract.pickle)
        # Check if we shall halt or auto-reject
        # =====================================
        # NOTE: User submissions are always relevant
        IF_ELSE(is_record_relevant, [
            halt_record(action="hep_approval"),
        ], [reject_record("Article automatically rejected"), stop_processing]),
        IF_ELSE(is_record_accepted, [
            IF(article_exists, [
                IF_ELSE(is_submission, [
                    reject_record('Article was already found on INSPIRE'),
                    stop_processing,
                    reply_ticket(
                        template=
                        "literaturesuggest/tickets/user_rejected_exists.html",
                        context_factory=reply_ticket_context),
                    close_ticket(ticket_id_key="ticket_id"),
                ], [
                    halt_record(action="merge_approval"),
                ]),
            ]),
            add_core,
            add_note_entry,
            filter_keywords,
            user_pdf_get,
            IF_ELSE(shall_push_remotely, [
                IF_ELSE(article_exists, [
                    prepare_update_payload(extra_data_key="update_payload"),
                    send_robotupload(marcxml_processor=hep2marc,
                                     mode="correct",
                                     extra_data_key="update_payload"),
                ], [
                    send_robotupload(marcxml_processor=hep2marc,
                                     mode="insert"),
                ])
            ], [store_record]),
            IF(is_submission, [
                IF(curation_ticket_needed, [
                    create_ticket(
                        template="literaturesuggest/tickets/curation_core.html",
                        queue="HEP_curation",
                        context_factory=curation_ticket_context,
                        ticket_id_key="curation_ticket_id")
                ]),
                reply_ticket(
                    template="literaturesuggest/tickets/user_accepted.html",
                    context_factory=reply_ticket_context),
            ]),
        ], [
            IF(is_submission,
               [reply_ticket(context_factory=reply_ticket_context)])
        ]),
        close_ticket(ticket_id_key="ticket_id")
    ]
Example #11
0
]


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


CLOSE_TICKET_IF_NEEDED = [
    IF(curation_ticket_needed, [
        create_ticket(
            template="authors/tickets/curation_needed.html",
            queue="AUTHORS_curation",
            context_factory=curation_ticket_context,
            ticket_id_key="curation_ticket_id"
        ),
    ]),
]


NOTIFY_NOT_ACCEPTED = [
    close_ticket(ticket_id_key="ticket_id"),
]


SEND_UPDATE_NOTIFICATION = [
    send_robotupload(
        mode="holdingpen",
        callback_url=None
Example #12
0
)

from inspirehep.modules.literaturesuggest.tasks import (
    curation_ticket_needed,
    reply_ticket_context,
    new_ticket_context,
    curation_ticket_context,
)


NOTIFY_SUBMISSION = [
    # Special RT integration for submissions
    # ======================================
    create_ticket(
        template="literaturesuggest/tickets/curator_submitted.html",
        queue="HEP_add_user",
        context_factory=new_ticket_context,
        ticket_id_key="ticket_id"
    ),
    reply_ticket(
        template="literaturesuggest/tickets/user_submitted.html",
        context_factory=reply_ticket_context,
        keep_new=True
    ),
]


ADD_INGESTION_MARKS = [
    # Article matching for non-submissions
    # ====================================
    # Query holding pen to see if we already have this article ingested
    #