예제 #1
0
def test_create_record_from_mirror_recids_retries_on_timeout_error(
        retry_mock, inspire_app, s3):
    raw_record_literature = (
        b"<record>"
        b'  <controlfield tag="001">666</controlfield>'
        b'  <datafield tag="245" ind1=" " ind2=" ">'
        b'    <subfield code="a">On the validity of INSPIRE records</subfield>'
        b"  </datafield>"
        b'  <datafield tag="980" ind1=" " ind2=" ">'
        b'    <subfield code="a">HEP</subfield>'
        b"  </datafield>"
        b'  <datafield tag="FFT" ind1=" " ind2=" ">'
        b'    <subfield code="a">/opt/cds-invenio/var/data/files/g97/1940001/content.pdf;2</subfield>'
        b'    <subfield code="d"></subfield>'
        b'    <subfield code="f">.pdf</subfield>'
        b'    <subfield code="n">arXiv:1409.0794</subfield>'
        b'    <subfield code="r"></subfield>'
        b'    <subfield code="s">2015-01-12 03:41:58</subfield>'
        b'    <subfield code="v">2</subfield>'
        b'    <subfield code="z"></subfield>'
        b"  </datafield>"
        b"</record>")
    record_literature = LegacyRecordsMirror.from_marcxml(raw_record_literature)
    db.session.add(record_literature)
    with patch.dict(current_app.config,
                    {"FILES_UPLOAD_THREAD_TIMEOUT": 1}), patch.object(
                        current_s3_instance, "is_s3_url") as is_s3_url_mock:

        def sleep_2s(*args):
            sleep(2)

        is_s3_url_mock.side_effect = sleep_2s
        with pytest.raises(Retry):
            create_records_from_mirror_recids([666])
예제 #2
0
def test_migrating_deleted_record_registers_control_number_with_deleted_status(
        inspire_app, datadir):
    raw_record_xml = (datadir / "dummy_deleted.xml").read_text()
    deleted_record = LegacyRecordsMirror.from_marcxml(raw_record_xml)
    db.session.add(deleted_record)
    create_records_from_mirror_recids([12345])
    pid = PersistentIdentifier.query.filter_by(pid_value="12345").one()
    assert pid.status == PIDStatus.DELETED
예제 #3
0
def test_migrating_deleted_record_registers_control_number_regression(inspire_app):
    raw_deleted_record = b'<record>\n  <controlfield tag="001">1775082</controlfield>\n  <controlfield tag="005">20200131230810.0</controlfield>\n  <datafield tag="856" ind1="4" ind2=" ">\n    <subfield code="u">https://gambit.hepforge.org/</subfield>\n  </datafield>\n  <datafield tag="909" ind1="C" ind2="O">\n    <subfield code="o">oai:inspirehep.net:1775082</subfield>\n    <subfield code="q">INSPIRE:Experiments</subfield>\n  </datafield>\n  <datafield tag="961" ind1=" " ind2=" ">\n    <subfield code="x">2020-01-13</subfield>\n    <subfield code="c">2020-01-31</subfield>\n  </datafield>\n  <datafield tag="980" ind1=" " ind2=" ">\n    <subfield code="a">CORE</subfield>\n  </datafield>\n  <datafield tag="980" ind1=" " ind2=" ">\n    <subfield code="a">EXPERIMENT</subfield>\n  </datafield>\n  <datafield tag="980" ind1=" " ind2=" ">\n    <subfield code="c">DELETED</subfield>\n  </datafield>\n  <datafield tag="710" ind1=" " ind2=" ">\n    <subfield code="g">GAMBIT</subfield>\n  </datafield>\n  <datafield tag="245" ind1=" " ind2=" ">\n    <subfield code="a">GAMBIT : Global And Modular BSM Inference Tool</subfield>\n  </datafield>\n  <datafield tag="372" ind1=" " ind2=" ">\n    <subfield code="9">INSPIRE</subfield>\n    <subfield code="a">9.2</subfield>\n  </datafield>\n  <datafield tag="520" ind1=" " ind2=" ">\n    <subfield code="a">GAMBIT is a global fitting code for generic Beyond the Standard Model theories, designed to allow fast and easy definition of new models, observables, likelihoods, scanners and backend physics codes.</subfield>\n  </datafield>\n  <datafield tag="119" ind1=" " ind2=" ">\n    <subfield code="a">GAMBIT</subfield>\n    <subfield code="c">GAMBIT</subfield>\n    <subfield code="d">GAMBIT</subfield>\n  </datafield>\n</record>'

    deleted_record = LegacyRecordsMirror.from_marcxml(raw_deleted_record)
    db.session.add(deleted_record)

    create_records_from_mirror_recids([1775082])
    pid = PersistentIdentifier.query.filter_by(pid_value="1775082").one()

    assert InspireRecord.get_record_by_pid_value("1775082", "exp")
    assert pid.status == PIDStatus.DELETED
예제 #4
0
def test_create_records_from_mirror_recids_with_different_types_of_record(inspire_app):
    raw_record_literature_valid = (
        b"<record>"
        b'  <controlfield tag="001">666</controlfield>'
        b'  <datafield tag="245" ind1=" " ind2=" ">'
        b'    <subfield code="a">On the validity of INSPIRE records</subfield>'
        b"  </datafield>"
        b'  <datafield tag="980" ind1=" " ind2=" ">'
        b'    <subfield code="a">HEP</subfield>'
        b"  </datafield>"
        b"</record>"
    )
    valid_record_literature = LegacyRecordsMirror.from_marcxml(
        raw_record_literature_valid
    )
    db.session.add(valid_record_literature)

    raw_record_invalid = (
        b"<record>"
        b'  <controlfield tag="001">667</controlfield>'
        b'  <datafield tag="260" ind1=" " ind2=" ">'
        b'    <subfield code="c">Definitely not a date</subfield>'
        b"  </datafield>"
        b'  <datafield tag="980" ind1=" " ind2=" ">'
        b'    <subfield code="a">HEP</subfield>'
        b"  </datafield>"
        b"</record>"
    )
    invalid_record = LegacyRecordsMirror.from_marcxml(raw_record_invalid)
    db.session.add(invalid_record)

    raw_record_author_valid = (
        b"<record>"
        b'  <controlfield tag="001">668</controlfield>'
        b'  <datafield tag="100" ind1=" " ind2=" ">'
        b'    <subfield code="a">Jessica Jones</subfield>'
        b'    <subfield code="q">Jones Jessica</subfield>'
        b"  </datafield>"
        b'  <datafield tag="980" ind1=" " ind2=" ">'
        b'    <subfield code="a">HEPNAMES</subfield>'
        b"  </datafield>"
        b"</record>"
    )

    valid_record_author = LegacyRecordsMirror.from_marcxml(raw_record_author_valid)
    db.session.add(valid_record_author)

    task_results = create_records_from_mirror_recids([666, 667, 668])
    record_literature = InspireRecord.get_record_by_pid_value(666, "lit")
    assert str(record_literature.id) in task_results

    record_author = InspireRecord.get_record_by_pid_value(668, "aut")
    assert str(record_author.id) in task_results

    with pytest.raises(PIDDoesNotExistError):
        InspireRecord.get_record_by_pid_value(667, "lit")