def test_sourced_dict_no_source(): builder = LiteratureBuilder() expected = {'value': 'foo'} result = builder._sourced_dict(None, value='foo') assert result == expected
def test_sourced_dict_global_source(): builder = LiteratureBuilder('global') expected = {'source': 'global', 'value': 'foo'} result = builder._sourced_dict(None, value='foo') assert result == expected
def test_add_book_normalizes_date(): builder = LiteratureBuilder() builder.add_book(date='9 November 1990') result = builder.record['imprints'] expected = [{'date': '1990-11-09'}] assert expected == result
def test_add_isbn_normalizes_isbn(): builder = LiteratureBuilder() builder.add_isbn(isbn='978-3-642-23908-3') result = builder.record['isbns'] expected = [{'value': '9783642239083'}] assert expected == result
def test_add_parent_isbn_normalizes_isbn(): builder = LiteratureBuilder() builder.add_publication_info(parent_isbn='978-3-642-23908-3') result = builder.record['publication_info'] expected = [{'parent_isbn': '9783642239083'}] assert expected == result
def test_preprint_date_normalizes_date(): builder = LiteratureBuilder() builder.add_preprint_date('12 April 2010') result = builder.record['preprint_date'] expected = '2010-04-12' assert expected == result
def test_imprint_date_normalizes_date(): builder = LiteratureBuilder() builder.add_imprint_date('19 September 2005') result = builder.record['imprints'] expected = [{'date': '2005-09-19'}] assert expected == result
def test_add_accelerator_experiment(): builder = LiteratureBuilder() legacy_name = 'FNAL-E-0900' experiment_record = {'$ref': 'http://url/api/experiments/123'} builder.add_accelerator_experiment('FNAL-E-0900', record=experiment_record) assert builder.record['accelerator_experiments'] == [{ 'legacy_name': legacy_name, 'record': experiment_record }]
def test_append_to(): formdata = '' builder = LiteratureBuilder("test") expected_result = None builder._append_to('test_field', formdata) assert builder.record.get('test_field') is expected_result formdata = 'value' expected_result = ['value'] builder._append_to('test_field_2', formdata) assert builder.record.get('test_field_2') == expected_result
def test_add_doi_normalizes_doi(): schema = load_schema('hep') subschema = schema['properties']['dois'] builder = LiteratureBuilder() builder.add_doi('doi.org/10.1234/foo') result = builder.record['dois'] expected = [{ 'value': '10.1234/foo', }] assert validate(result, subschema) is None assert expected == result
def test_add_license_doesnt_overwrite_name_if_no_url(): schema = load_schema('hep') subschema = schema['properties']['license'] builder = LiteratureBuilder() builder.add_license(license='foo') result = builder.record['license'] expected = [{ 'license': 'foo', }] assert validate(result, subschema) is None assert expected == result
def test_add_reference(): builder = LiteratureBuilder() reference = { "reference": { "authors": [{ "full_name": "Smith, J." }], "label": "1", "publication_info": { "year": 1996 } } } builder.add_reference(reference) assert builder.record['references'] == [reference]
def test_add_keyword(): schema = load_schema('hep') subschema = schema['properties']['keywords'] builder = LiteratureBuilder(source='Publisher') builder.add_keyword('29.27.Fh', schema='PACS') result = builder.record['keywords'] expected = [{ 'value': '29.27.Fh', 'schema': 'PACS', 'source': 'Publisher', }] assert validate(result, subschema) is None assert expected == result
def test_publication_info_public_note(): schema = load_schema('hep') subschema = schema['properties']['public_notes'] builder = LiteratureBuilder(source="APS") builder.add_publication_info(journal_title="Phys. Rev. B") expected = [{ 'source': 'APS', 'value': 'Submitted to Phys. Rev. B', }] result = builder.record['public_notes'] assert validate(result, subschema) is None assert expected == result assert 'publication_info' not in builder.record
def test_make_author_handles_none_in_id_schema(): schema = load_schema('hep') subschema = schema['properties']['authors'] builder = LiteratureBuilder() result = builder.make_author( 'Smith, John', ids=[(None, 'J.Smith.1')], ) expected = { 'full_name': 'Smith, John', } assert validate([result], subschema) is None assert expected == result
def test_make_author_sets_record(): schema = load_schema('hep') subschema = schema['properties']['authors'] builder = LiteratureBuilder() author_record = {'$ref': 'http://url/api/authors/1234'} result = builder.make_author( 'Smith, John', record=author_record, ) expected = { 'full_name': 'Smith, John', 'record': author_record, } assert validate([result], subschema) is None assert expected == result
def test_add_external_system_identifier_kwargs(): schema = load_schema('hep') subschema = schema['properties']['external_system_identifiers'] builder = LiteratureBuilder() builder.add_external_system_identifier(schema='osti', extid='12345') result = builder.record['external_system_identifiers'] expected = [ { 'value': '12345', 'schema': 'osti', } ] assert validate(result, subschema) is None assert expected == result
def test_add_figure_fails_on_non_file_api_relative_url(): schema = load_schema('hep') subschema = schema['properties']['figures'] builder = LiteratureBuilder('test') with pytest.raises(ValidationError): builder.add_figure( 'key', caption='caption', label='label', material='publication', source='source', url='/not/api/url/for/files', description='description', original_url='http://www.example.com/original_url' ) result = builder.record validate(result['figures'], subschema)
def test_make_author(): schema = load_schema('hep') subschema = schema['properties']['authors'] builder = LiteratureBuilder() result = builder.make_author( 'Smith, John', affiliations=['CERN', 'SLAC'], source='submitter', raw_affiliations=['CERN, 1211 Geneva', 'SLAC, Stanford'], emails=['*****@*****.**'], ids=[('INSPIRE BAI', 'J.Smith.1')], alternative_names=['Johnny Smith'] ) expected = { 'full_name': 'Smith, John', 'affiliations': [ {'value': 'CERN'}, {'value': 'SLAC'}, ], 'raw_affiliations': [ { 'value': 'CERN, 1211 Geneva', 'source': 'submitter' }, { 'value': 'SLAC, Stanford', 'source': 'submitter', } ], 'emails': ['*****@*****.**'], 'ids': [ { 'schema': 'INSPIRE BAI', 'value': 'J.Smith.1', } ], 'alternative_names': ['Johnny Smith'], } assert validate([result], subschema) is None assert expected == result
def test_add_document_fails_on_non_file_api_relative_url(): schema = load_schema('hep') subschema = schema['properties']['documents'] builder = LiteratureBuilder('test') with pytest.raises(ValidationError): builder.add_document( 'key', description='description', fulltext=True, hidden=True, material='preprint', original_url='http://www.example.com/original_url', source='source', url='/not/api/url/for/files', filename='filename' ) result = builder.record validate(result['documents'], subschema)
def test_add_many_external_system_identifier(): schema = load_schema('hep') subschema = schema['properties']['external_system_identifiers'] builder = LiteratureBuilder() builder.add_external_system_identifier('5758037', 'osti') builder.add_external_system_identifier('1992PhRvD..45..124K', 'ADS') result = builder.record['external_system_identifiers'] expected = [ { 'value': '5758037', 'schema': 'osti', }, { 'value': '1992PhRvD..45..124K', 'schema': 'ADS', }, ] assert validate(result, subschema) is None assert expected == result
def test_add_figure_fails_on_duplicated_key(): builder = LiteratureBuilder('test') builder.add_figure( 'key', caption='caption', label='label', material='publication', source='source', url='url', ) with pytest.raises(ValueError): builder.add_figure( 'key', caption='caption', label='label', material='publication', source='source', url='url', )
def test_add_document(): schema = load_schema('hep') subschema = schema['properties']['documents'] builder = LiteratureBuilder('test') builder.add_document( 'key', description='description', fulltext=True, hidden=True, material='preprint', original_url='http://www.example.com/original_url', source='source', url='url', filename='filename' ) expected = [ { 'description': 'description', 'fulltext': True, 'hidden': True, 'key': 'key', 'material': 'preprint', 'original_url': 'http://www.example.com/original_url', 'source': 'source', 'url': 'url', 'filename': 'filename' }, ] result = builder.record assert validate(result['documents'], subschema) is None assert expected == result['documents'] for key in subschema['items']['properties'].keys(): assert key in result['documents'][0]
def test_add_figure(): schema = load_schema('hep') subschema = schema['properties']['figures'] builder = LiteratureBuilder('test') builder.add_figure( 'key', caption='caption', label='label', material='publication', source='source', url='url', description='description', filename='filename', original_url='http://www.example.com/original_url' ) expected = [ { 'caption': 'caption', 'key': 'key', 'label': 'label', 'material': 'publication', 'source': 'source', 'url': 'url', 'filename': 'filename', 'original_url': 'http://www.example.com/original_url' }, ] result = builder.record assert validate(result['figures'], subschema) is None assert expected == result['figures'] for key in subschema['items']['properties'].keys(): assert key in result['figures'][0]
def test_add_document_fails_on_existing_key(): builder = LiteratureBuilder('test') builder.add_document( 'key', description='description', fulltext=True, hidden=True, material='preprint', original_url='http://www.example.com/original_url', source='source', url='url', ) with pytest.raises(ValueError): builder.add_document( 'key', description='description', fulltext=True, hidden=True, material='preprint', original_url='http://www.example.com/original_url', source='source', url='url', )
def test_field_not_added_when_only_material(): builder = LiteratureBuilder(source='Publisher') builder.add_publication_info(material='Publication') assert 'publication_info' not in builder.record
def build_literature(self, data): literature = LiteratureBuilder() literature.add_document_type(data["document_type"]) literature.add_arxiv_eprint(data.get("arxiv_id"), data.get("arxiv_categories")) literature.add_preprint_date(data.get("preprint_date")) literature.add_doi(data.get("doi")) pdf_link = data.get("pdf_link") additional_link = data.get("additional_link") if pdf_link and "arxiv.org" not in pdf_link: literature.add_url(data.get("pdf_link")) if additional_link and "arxiv.org" not in additional_link: literature.add_url(data.get("additional_link")) literature.add_title(data["title"], source="submitter") language = data.get("language") literature.add_language(language if language != "en" else None) literature.add_inspire_categories(data.get("subjects")) for author in data.get("authors", []): record_author = literature.make_author( author.get("full_name"), record=author.get("record"), affiliations=[author.get("affiliation") ], # TODO: use `affiliation_record` ) literature.add_author(record_author) literature.add_collaboration(data.get("collaboration")) literature.add_accelerator_experiment( data.get("experiment"), record=data.get("experiment_record")) # TODO: source=submitter? literature.add_abstract(data.get("abstract"), source="submitter") for report_number in data.get("report_numbers", []): literature.add_report_number(report_number, source="submitter") page_start, page_end, artid = split_page_artid(data.get("page_range")) literature.add_publication_info( journal_title=data.get("journal_title"), journal_volume=data.get("volume"), journal_issue=data.get("issue"), journal_record=data.get("journal_record"), conference_record=data.get("conference_record"), artid=artid, page_start=data.get("start_page") or page_start, page_end=data.get("end_page") or page_end, year=data.get("year"), parent_record=data.get("parent_book_record"), ) literature.add_book_series(data.get("series_title")) literature.add_book( date=data.get("publication_date"), publisher=data.get("publisher"), place=data.get("publication_place"), ) literature.add_thesis( defense_date=data.get("defense_date"), degree_type=data.get("degree_type"), institution=data.get("institution"), date=data.get("submission_date"), ) for supervisor in data.get("supervisors", []): record_supervisor = literature.make_author( supervisor.get("full_name"), affiliations=[supervisor.get("affiliation")], roles=["supervisor"], ) literature.add_author(record_supervisor) literature.add_private_note(data.get("comments"), source="submitter") literature.add_private_note(data.get("proceedings_info"), source="submitter") if data.get("conference_record") is None: literature.add_private_note(data.get("conference_info"), source="submitter") return literature.record
def test_repr_handles_source_present(): builder = LiteratureBuilder('publisher') assert repr(builder).startswith( "LiteratureBuilder(source='publisher', record={")
def test_repr_handles_source_none(): builder = LiteratureBuilder() assert repr(builder).startswith('LiteratureBuilder(source=None, record={')
def test_add_doi_handles_none(): builder = LiteratureBuilder() builder.add_doi(None) result = builder.record assert 'dois' not in result