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])
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
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
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")