def test_minimal_record(app, minimal_record): """Test minimal record.""" assert Record(minimal_record).validate() is None pid = PersistentIdentifier(pid_type='recid', pid_value='2') data = marcxml_v1.schema_class().dump(marcxml_v1.preprocess_record( pid=pid, record=Record(minimal_record))).data marcxml_v1.serialize(pid=pid, record=Record(minimal_record)) expected = { u'publication_distribution_imprint': { 'date_of_publication_distribution': ( datetime.utcnow().date().isoformat()) }, u'control_number': '123', u'information_relating_to_copyright_status': { 'copyright_status': 'open' }, u'summary': { 'summary': 'My description' }, u'main_entry_personal_name': { 'personal_name': 'Test' }, u'resource_type': { 'type': 'software' }, u'title_statement': { 'title': 'Test' } } check_dict(expected, data)
def test_minimal_record(app, db, minimal_record): """Test minimal record.""" # Create record and pid. record = Record.create(minimal_record) record.model.updated = datetime.utcnow() pid = PersistentIdentifier(pid_type='recid', pid_value='2') assert record.validate() is None expected = { u'date_and_time_of_latest_transaction': ( record.model.updated.strftime("%Y%m%d%H%M%S.0")), u'publication_distribution_imprint': [{ 'date_of_publication_distribution': record['publication_date'] }], u'control_number': '123', u'information_relating_to_copyright_status': { 'copyright_status': 'open' }, u'summary': { 'summary': 'My description' }, u'main_entry_personal_name': { 'personal_name': 'Test' }, u'resource_type': { 'type': 'software' }, u'title_statement': { 'title': 'Test' }, u'leader': { 'base_address_of_data': '00000', 'bibliographic_level': 'monograph_item', 'character_coding_scheme': 'marc-8', 'descriptive_cataloging_form': 'unknown', 'encoding_level': 'unknown', 'indicator_count': 2, 'length_of_the_implementation_defined_portion': 0, 'length_of_the_length_of_field_portion': 4, 'length_of_the_starting_character_position_portion': 5, 'multipart_resource_record_level': 'not_specified_or_not_applicable', 'record_length': '00000', 'record_status': 'new', 'subfield_code_count': 2, 'type_of_control': 'no_specified_type', 'type_of_record': 'computer_file', 'undefined': 0, }, } data = marcxml_v1.schema_class().dump(marcxml_v1.preprocess_record( pid=pid, record=record)).data assert_dict(expected, data) marcxml_v1.serialize(pid=pid, record=record)
def test_minimal_record(app, minimal_record): """Test minimal record.""" expected = { u'publication_distribution_imprint': [{ 'date_of_publication_distribution': ( datetime.utcnow().date().isoformat()) }], u'control_number': '123', u'information_relating_to_copyright_status': { 'copyright_status': 'open' }, u'summary': { 'summary': 'My description' }, u'main_entry_personal_name': { 'personal_name': 'Test' }, u'resource_type': { 'type': 'software' }, u'title_statement': { 'title': 'Test' } } # Create record and pid. record = Record(minimal_record) pid = PersistentIdentifier(pid_type='recid', pid_value='2') assert record.validate() is None data = marcxml_v1.schema_class().dump(marcxml_v1.preprocess_record( pid=pid, record=record)).data assert_dict(expected, data) marcxml_v1.serialize(pid=pid, record=record)
def test_full_record(app, full_record): """Test MARC21 serialization of full record.""" now = datetime.utcnow() expected = { u'control_number': u'12345', u'date_and_time_of_latest_transaction': now.strftime("%Y%m%d%H%M%S.0"), u'resource_type': { u'subtype': u'book', u'type': u'publication' }, u'title_statement': { u'title': u'Test title' }, u'publication_distribution_imprint': [ {u'date_of_publication_distribution': u'2014-02-27'}, ], u'main_entry_personal_name': { u'affiliation': u'CERN', u'personal_name': u'Doe, John', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215', u'(orcid)0000-0002-1694-233X' ] }, u'added_entry_personal_name': [ { u'affiliation': u'CERN', u'personal_name': u'Doe, Jane', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'affiliation': u'CERN', u'personal_name': u'Smith, John', }, { u'affiliation': u'CERN', u'personal_name': u'Nowak, Jack', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215' ] }, { u'affiliation': u'CERN', u'relator_code': [u'oth'], u'personal_name': u'Smith, Other', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'personal_name': u'Hansen, Viggo', u'relator_code': [u'oth'], }, { u'affiliation': u'CERN', u'relator_code': [u'dtm'], u'personal_name': u'Kowalski, Manager' }, { u'relator_code': [u'ths'], u'personal_name': u'Smith, Professor' }, ], u'summary': { u'summary': u'Test Description' }, u'index_term_uncontrolled': [ {u'uncontrolled_term': u'kw1'}, {u'uncontrolled_term': u'kw2'}, {u'uncontrolled_term': u'kw3'}, ], u'subject_added_entry_topical_term': [ { u'topical_term_or_geographic_name_entry_element': u'cc-by', u'source_of_heading_or_term': u'opendefinition.org', u'level_of_subject': u'Primary', u'thesaurus': u'Source specified in subfield $2', }, { u'topical_term_or_geographic_name_entry_element': u'Astronomy', u'authority_record_control_number_or_standard_number': ( u'(url)http://id.loc.gov/authorities/subjects/sh85009003'), u'level_of_subject': u'Primary', }, ], u'general_note': { u'general_note': u'notes' }, u'information_relating_to_copyright_status': { u'copyright_status': u'open' }, u'terms_governing_use_and_reproduction_note': { u'uniform_resource_identifier': u'http://zenodo.org', u'terms_governing_use_and_reproduction': u'Creative Commons' }, u'communities': [ u'zenodo' ], u'funding_information_note': [ {u'grant_number': u'1234', u'text_of_note': u'Grant Title'}, {u'grant_number': u'4321', u'text_of_note': u'Title Grant'} ], u'host_item_entry': [ { u'main_entry_heading': u'10.1234/foo.bar', u'note': u'doi', u'relationship_information': u'cites', }, { u'main_entry_heading': u'1234.4321', u'note': u'arxiv', u'relationship_information': u'cites', }, { u'main_entry_heading': u'Staszkowka', u'edition': u'Jol', u'title': u'Bum', u'related_parts': u'1-2', u'international_standard_book_number': u'978-0201633610', }, ], u'other_standard_identifier': [ { u'standard_number_or_code': u'10.1234/foo.bar', u'source_of_number_or_code': u'doi', }, { u'standard_number_or_code': ( u'urn:lsid:ubio.org:namebank:11815'), u'source_of_number_or_code': u'lsid', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'2011ApJS..192...18K', u'source_of_number_or_code': u'issn', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'10.1234/alternate.doi', u'source_of_number_or_code': u'doi', u'qualifying_information': u'alternateidentifier', } ], u'references': [ { u'raw_reference': u'Doe, John et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.12' }, { u'raw_reference': u'Smith, Jane et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.34' } ], u'added_entry_meeting_name': [{ u'date_of_meeting': u'23-25 June, 2014', u'meeting_name_or_jurisdiction_name_as_entry_element': u'The 13th Biennial HITRAN Conference', u'number_of_part_section_meeting': u'VI', u'miscellaneous_information': u'HITRAN13', u'name_of_part_section_of_a_work': u'1', u'location_of_meeting': u'Harvard-Smithsonian Center for Astrophysics' }], u'conference_url': 'http://hitran.org/conferences/hitran-13-2014/', u'dissertation_note': { u'name_of_granting_institution': u'I guess important', }, u'journal': { 'issue': '2', 'pages': '20', 'volume': '20', 'title': 'Bam', 'year': '2014', }, # missing files # missing language u'embargo_date': '0900-12-31', u'_oai': { u'sets': [u'user-zenodo', u'user-ecfunded'], u'id': u'oai:zenodo.org:1' } } # Add embargo date and OAI-PMH set information. full_record['embargo_date'] = '0900-12-31' full_record['_oai'] = { "id": "oai:zenodo.org:1", "sets": ["user-zenodo", "user-ecfunded"] } # Create record and PID. record = Record(full_record) pid = PersistentIdentifier(pid_type='recid', pid_value='2') assert record.validate() is None # Dump MARC21 JSON structure and compare against expected JSON. preprocessed_record = marcxml_v1.preprocess_record(record=record, pid=pid) # - needed since we don't create a record backed by DB model. preprocessed_record['updated'] = now.isoformat() assert_dict( expected, marcxml_v1.schema_class().dump(preprocessed_record).data ) # Assert that we can output MARCXML. marcxml_v1.serialize(record=record, pid=pid)
def test_full_record(app, full_record): """Test full record.""" assert Record(full_record).validate() is None full_record['alternate_identifiers'] = [ { "identifier": "urn:lsid:ubio.org:namebank:11815", "scheme": "lsid", }, { "identifier": "2011ApJS..192...18K", "scheme": "issn", }, { "identifier": "10.1234/alternate.doi", "scheme": "doi", }, ] assert Record(full_record).validate() is None full_record['meeting'] = { 'title': 'The 13th Biennial HITRAN Conference', 'place': 'Harvard-Smithsonian Center for Astrophysics', 'dates': '23-25 June, 2014', 'acronym': 'HITRAN13', 'session': 'VI', 'session_part': '1', } assert Record(full_record).validate() is None full_record['creators'] = [ {'name': 'Doe, John', 'affiliation': 'CERN', 'gnd': '170118215', 'orcid': '0000-0002-1694-233X', 'familyname': 'Doe', 'givennames': 'John', }, {'name': 'Doe, Jane', 'affiliation': 'CERN', 'gnd': '', 'orcid': '0000-0002-1825-0097', 'familyname': 'Doe', 'givennames': 'Jane', }, {'name': 'Smith, John', 'affiliation': 'CERN', 'gnd': '', 'orcid': '', 'familyname': 'Smith', 'givennames': 'John', }, {'name': 'Nowak, Jack', 'affiliation': 'CERN', 'gnd': '170118215', 'orcid': '', 'familyname': 'Nowak', 'givennames': 'Jack', }, ] assert Record(full_record).validate() is None full_record['contributors'] = [ {'affiliation': 'CERN', 'name': 'Smith, Other', 'type': 'Other', 'gnd': '', 'orcid': '0000-0002-1825-0097'}, {'affiliation': '', 'name': 'Hansen, Viggo', 'type': 'Other', 'gnd': '', 'orcid': ''}, {'affiliation': 'CERN', 'name': 'Kowalski, Manager', 'type': 'DataManager'}, ] full_record['thesis']['supervisors'] = [ {'name': 'Smith, Professor'}, ] assert Record(full_record).validate() is None full_record['description'] = 'Test Description' assert Record(full_record).validate() is None full_record['related_identifiers'] = [ {"identifier": "10.1234/foo.bar", "scheme": "doi", "relation": "cites"}, {"identifier": "1234.4321", "scheme": "arxiv", "relation": "cites"}, ] assert Record(full_record).validate() is None full_record['references'] = [ {'raw_reference': 'Doe, John et al (2012). Some title. Zenodo. ' '10.5281/zenodo.12'}, {'raw_reference': 'Smith, Jane et al (2012). Some title. Zenodo. ' '10.5281/zenodo.34'}, ] assert Record(full_record).validate() is None full_record['embargo_date'] = '0900-12-31' assert Record(full_record).validate() is None full_record['_oai'] = { "id": "oai:zenodo.org:1", "sets": ["user-zenodo", "user-ecfunded"] } assert Record(full_record).validate() is None full_record['embargo_date'] = '0900-12-31' assert Record(full_record).validate() is None full_record['_oai'] = { "id": "oai:zenodo.org:1", "sets": ["user-zenodo", "user-ecfunded"] } assert Record(full_record).validate() is None record = Record(full_record) pid = PersistentIdentifier(pid_type='recid', pid_value='2') data = marcxml_v1.schema_class().dump(marcxml_v1.preprocess_record( pid=pid, record=record)).data marcxml_v1.serialize( pid=PersistentIdentifier(pid_type='recid', pid_value='2'), record=Record(full_record)) expected = { u'terms_governing_use_and_reproduction_note': { u'uniform_resource_identifier': u'http://zenodo.org', u'terms_governing_use_and_reproduction': u'Creative Commons' }, u'publication_distribution_imprint': { u'date_of_publication_distribution': u'2014-02-27' }, u'subject_added_entry_topical_term': { u'topical_term_or_geographic_name_entry_element': u'cc-by', u'source_of_heading_or_term': u'opendefinition.org' }, u'general_note': { u'general_note': u'notes' }, u'control_number': u'12345', u'information_relating_to_copyright_status': { u'copyright_status': u'open' }, u'title_statement': { u'title': u'Test title' }, u'index_term_uncontrolled': { u'uncontrolled_term': [u'kw1', u'kw2', u'kw3'] }, u'communities': [ u'zenodo' ], u'other_standard_identifier': [ { u'standard_number_or_code': u'urn:lsid:ubio.org:namebank:11815', u'source_of_number_or_code': u'lsid' }, { u'standard_number_or_code': u'2011ApJS..192...18K', u'source_of_number_or_code': u'issn' }, { u'standard_number_or_code': u'10.1234/alternate.doi', u'source_of_number_or_code': u'doi' } ], u'funding_information_note': [ {u'grant_number': u'1234', u'text_of_note': u'Grant Title'}, {u'grant_number': u'4321', u'text_of_note': u'Title Grant'} ], u'resource_type': { u'subtype': u'book', u'type': u'publication' }, u'added_entry_meeting_name': [{ u'date_of_meeting': u'23-25 June, 2014', u'meeting_name_or_jurisdiction_name_as_entry_element': u'The 13th Biennial HITRAN Conference', u'number_of_part_section_meeting': u'VI', u'miscellaneous_information': u'HITRAN13', u'name_of_part_section_of_a_work': u'1', u'location_of_meeting': u'Harvard-Smithsonian Center for Astrophysics' }], 'main_entry_personal_name': { u'affiliation': u'CERN', u'personal_name': u'Doe, John', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215', u'(orcid)0000-0002-1694-233X' ] }, u'added_entry_personal_name': [ { u'affiliation': u'CERN', u'personal_name': u'Doe, Jane', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'affiliation': u'CERN', u'personal_name': u'Smith, John', }, { u'affiliation': u'CERN', u'personal_name': u'Nowak, Jack', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215' ] }, { u'affiliation': u'CERN', u'relator_code': [u'oth'], u'personal_name': u'Smith, Other', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'personal_name': u'Hansen, Viggo', u'relator_code': [u'oth'], }, { u'affiliation': u'CERN', u'relator_code': [u'dtm'], u'personal_name': u'Kowalski, Manager' }, { u'relator_code': [u'ths'], u'personal_name': u'Smith, Professor' }, ], u'summary': { u'summary': u'Test Description' }, u'host_item_entry': [ { u'note': u'doi', u'relationship_information': u'cites', }, { u'note': u'arxiv', u'relationship_information': u'cites', } ], u'references': [ { u'raw_reference': u'Doe, John et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.12' }, { u'raw_reference': u'Smith, Jane et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.34' } ], u'embargo_date': '0900-12-31', u'_oai': { u'sets': [u'user-zenodo', u'user-ecfunded'], u'id': u'oai:zenodo.org:1' } } check_dict(expected, data)
def test_full_record(app, db, full_record): """Test MARC21 serialization of full record.""" # Add embargo date and OAI-PMH set information. full_record['embargo_date'] = '0900-12-31' full_record['_oai'] = { "id": "oai:zenodo.org:1", "sets": ["user-zenodo", "user-ecfunded"] } # Create record and PID. record = Record.create(full_record) pid = PersistentIdentifier.create( pid_type='recid', pid_value='12345', object_type='rec', object_uuid=record.id, ) assert record.validate() is None expected = { u'control_number': u'12345', u'date_and_time_of_latest_transaction': ( record.model.updated.strftime("%Y%m%d%H%M%S.0")), u'resource_type': { u'subtype': u'book', u'type': u'publication' }, u'title_statement': { u'title': u'Test title' }, u'publication_distribution_imprint': [ {u'date_of_publication_distribution': u'2014-02-27'}, ], u'main_entry_personal_name': { u'affiliation': u'CERN', u'personal_name': u'Doe, John', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215', u'(orcid)0000-0002-1694-233X' ] }, u'added_entry_personal_name': [ { u'affiliation': u'CERN', u'personal_name': u'Doe, Jane', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'affiliation': u'CERN', u'personal_name': u'Smith, John', }, { u'affiliation': u'CERN', u'personal_name': u'Nowak, Jack', u'authority_record_control_number_or_standard_number': [ u'(gnd)170118215' ] }, { u'affiliation': u'CERN', u'relator_code': [u'oth'], u'personal_name': u'Smith, Other', u'authority_record_control_number_or_standard_number': [ u'(orcid)0000-0002-1825-0097' ] }, { u'personal_name': u'Hansen, Viggo', u'relator_code': [u'oth'], }, { u'affiliation': u'CERN', u'relator_code': [u'dtm'], u'personal_name': u'Kowalski, Manager' }, { u'relator_code': [u'ths'], u'personal_name': u'Smith, Professor' }, ], u'summary': { u'summary': u'Test Description' }, u'index_term_uncontrolled': [ {u'uncontrolled_term': u'kw1'}, {u'uncontrolled_term': u'kw2'}, {u'uncontrolled_term': u'kw3'}, ], u'subject_added_entry_topical_term': [ { u'topical_term_or_geographic_name_entry_element': u'cc-by', u'source_of_heading_or_term': u'opendefinition.org', u'level_of_subject': u'Primary', u'thesaurus': u'Source specified in subfield $2', }, { u'topical_term_or_geographic_name_entry_element': u'Astronomy', u'authority_record_control_number_or_standard_number': ( u'(url)http://id.loc.gov/authorities/subjects/sh85009003'), u'level_of_subject': u'Primary', }, ], u'general_note': { u'general_note': u'notes' }, u'information_relating_to_copyright_status': { u'copyright_status': u'open' }, u'terms_governing_use_and_reproduction_note': { u'uniform_resource_identifier': u'https://creativecommons.org/licenses/by/4.0/', u'terms_governing_use_and_reproduction': u'Creative Commons Attribution 4.0' }, u'communities': [ u'zenodo', ], u'funding_information_note': [ {u'grant_number': u'1234', u'text_of_note': u'Grant Title'}, {u'grant_number': u'4321', u'text_of_note': u'Title Grant'} ], u'host_item_entry': [ { u'main_entry_heading': u'10.1234/foo.bar', u'note': u'doi', u'relationship_information': u'cites', }, { 'main_entry_heading': u'1234.4325', 'note': u'arxiv', 'relationship_information': u'isIdenticalTo' }, { u'main_entry_heading': u'1234.4321', u'note': u'arxiv', u'relationship_information': u'cites', }, { 'main_entry_heading': u'1234.4328', 'note': u'arxiv', 'relationship_information': u'references' }, { 'main_entry_heading': u'10.1234/zenodo.4321', 'note': u'doi', 'relationship_information': u'isPartOf' }, { 'main_entry_heading': u'10.1234/zenodo.1234', 'note': u'doi', 'relationship_information': u'hasPart' }, { u'main_entry_heading': u'Staszkowka', u'edition': u'Jol', u'title': u'Bum', u'related_parts': u'1-2', u'international_standard_book_number': u'978-0201633610', }, ], u'other_standard_identifier': [ { u'standard_number_or_code': u'10.1234/foo.bar', u'source_of_number_or_code': u'doi', }, { u'standard_number_or_code': ( u'urn:lsid:ubio.org:namebank:11815'), u'source_of_number_or_code': u'lsid', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'2011ApJS..192...18K', u'source_of_number_or_code': u'ads', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'0317-8471', u'source_of_number_or_code': u'issn', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'10.1234/alternate.doi', u'source_of_number_or_code': u'doi', u'qualifying_information': u'alternateidentifier', } ], u'references': [ { u'raw_reference': u'Doe, John et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.12' }, { u'raw_reference': u'Smith, Jane et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.34' } ], u'added_entry_meeting_name': [{ u'date_of_meeting': u'23-25 June, 2014', u'meeting_name_or_jurisdiction_name_as_entry_element': u'The 13th Biennial HITRAN Conference', u'number_of_part_section_meeting': u'VI', u'miscellaneous_information': u'HITRAN13', u'name_of_part_section_of_a_work': u'1', u'location_of_meeting': u'Harvard-Smithsonian Center for Astrophysics' }], u'conference_url': 'http://hitran.org/conferences/hitran-13-2014/', u'dissertation_note': { u'name_of_granting_institution': u'I guess important', }, u'journal': { 'issue': '2', 'pages': '20', 'volume': '20', 'title': 'Bam', 'year': '2014', }, u'embargo_date': '0900-12-31', u'language_code': { 'language_code_of_text_sound_track_or_separate_title': 'eng', }, u'_oai': { u'sets': [u'user-zenodo', u'user-ecfunded'], u'id': u'oai:zenodo.org:1' }, u'_files': [ { 'uri': 'https://zenodo.org/record/12345/files/test', 'checksum': 'md5:11111111111111111111111111111111', 'type': 'txt', 'size': 4, }, ], 'leader': { 'base_address_of_data': '00000', 'bibliographic_level': 'monograph_item', 'character_coding_scheme': 'marc-8', 'descriptive_cataloging_form': 'unknown', 'encoding_level': 'unknown', 'indicator_count': 2, 'length_of_the_implementation_defined_portion': 0, 'length_of_the_length_of_field_portion': 4, 'length_of_the_starting_character_position_portion': 5, 'multipart_resource_record_level': 'not_specified_or_not_applicable', 'record_length': '00000', 'record_status': 'new', 'subfield_code_count': 2, 'type_of_control': 'no_specified_type', 'type_of_record': 'language_material', 'undefined': 0, }, } # Dump MARC21 JSON structure and compare against expected JSON. preprocessed_record = marcxml_v1.preprocess_record(record=record, pid=pid) data = marcxml_v1.schema_class().dump(preprocessed_record).data assert expected == data # Assert that we can output MARCXML. assert marcxml_v1.serialize(record=record, pid=pid)
def test_minimal_record(app, db, minimal_record): """Test minimal record.""" # Create record and pid. record = Record.create(minimal_record) record.model.updated = datetime.utcnow() pid = PersistentIdentifier.create( pid_type='recid', pid_value='123', object_type='rec', object_uuid=record.id) assert record.validate() is None expected = { u'date_and_time_of_latest_transaction': ( record.model.updated.strftime("%Y%m%d%H%M%S.0")), u'publication_distribution_imprint': [{ 'date_of_publication_distribution': record['publication_date'] }], u'control_number': '123', u'other_standard_identifier': [ { 'source_of_number_or_code': u'doi', 'standard_number_or_code': u'10.5072/zenodo.123' } ], u'information_relating_to_copyright_status': { 'copyright_status': 'open' }, u'summary': { 'summary': 'My description' }, u'main_entry_personal_name': { 'personal_name': 'Test' }, u'resource_type': { 'type': 'software' }, u'title_statement': { 'title': 'Test' }, u'leader': { 'base_address_of_data': '00000', 'bibliographic_level': 'monograph_item', 'character_coding_scheme': 'marc-8', 'descriptive_cataloging_form': 'unknown', 'encoding_level': 'unknown', 'indicator_count': 2, 'length_of_the_implementation_defined_portion': 0, 'length_of_the_length_of_field_portion': 4, 'length_of_the_starting_character_position_portion': 5, 'multipart_resource_record_level': 'not_specified_or_not_applicable', 'record_length': '00000', 'record_status': 'new', 'subfield_code_count': 2, 'type_of_control': 'no_specified_type', 'type_of_record': 'computer_file', 'undefined': 0, }, } data = marcxml_v1.schema_class().dump(marcxml_v1.preprocess_record( pid=pid, record=record)).data assert expected == data marcxml_v1.serialize(pid=pid, record=record)
def test_full_record(app, db, full_record): """Test MARC21 serialization of full record.""" # Add embargo date and OAI-PMH set information. full_record['embargo_date'] = '0900-12-31' full_record['_oai'] = { "id": "oai:zenodo.org:1", "sets": ["user-zenodo", "user-ecfunded"] } # Create record and PID. record = Record.create(full_record) pid = PersistentIdentifier.create( pid_type='recid', pid_value='12345', object_type='rec', object_uuid=record.id, ) assert record.validate() is None expected = { u'control_number': u'12345', u'date_and_time_of_latest_transaction': (record.model.updated.strftime("%Y%m%d%H%M%S.0")), u'resource_type': { u'subtype': u'book', u'type': u'publication' }, u'title_statement': { u'title': u'Test title' }, u'publication_distribution_imprint': [ { u'date_of_publication_distribution': u'2014-02-27' }, ], u'main_entry_personal_name': { u'affiliation': u'CERN', u'personal_name': u'Doe, John', u'authority_record_control_number_or_standard_number': [u'(gnd)170118215', u'(orcid)0000-0002-1694-233X'] }, u'added_entry_personal_name': [ { u'affiliation': u'CERN', u'personal_name': u'Doe, Jane', u'authority_record_control_number_or_standard_number': [u'(orcid)0000-0002-1825-0097'] }, { u'affiliation': u'CERN', u'personal_name': u'Smith, John', }, { u'affiliation': u'CERN', u'personal_name': u'Nowak, Jack', u'authority_record_control_number_or_standard_number': [u'(gnd)170118215'] }, { u'affiliation': u'CERN', u'relator_code': [u'oth'], u'personal_name': u'Smith, Other', u'authority_record_control_number_or_standard_number': [u'(orcid)0000-0002-1825-0097'] }, { u'personal_name': u'Hansen, Viggo', u'relator_code': [u'oth'], }, { u'affiliation': u'CERN', u'relator_code': [u'dtm'], u'personal_name': u'Kowalski, Manager' }, { u'relator_code': [u'ths'], u'personal_name': u'Smith, Professor' }, ], u'summary': { u'summary': u'Test Description' }, u'index_term_uncontrolled': [ { u'uncontrolled_term': u'kw1' }, { u'uncontrolled_term': u'kw2' }, { u'uncontrolled_term': u'kw3' }, ], u'subject_added_entry_topical_term': [ { u'topical_term_or_geographic_name_entry_element': u'cc-by', u'source_of_heading_or_term': u'opendefinition.org', u'level_of_subject': u'Primary', u'thesaurus': u'Source specified in subfield $2', }, { u'topical_term_or_geographic_name_entry_element': u'Astronomy', u'authority_record_control_number_or_standard_number': (u'(url)http://id.loc.gov/authorities/subjects/sh85009003'), u'level_of_subject': u'Primary', }, ], u'general_note': { u'general_note': u'notes' }, u'information_relating_to_copyright_status': { u'copyright_status': u'open' }, u'terms_governing_use_and_reproduction_note': { u'uniform_resource_identifier': u'https://creativecommons.org/licenses/by/4.0/', u'terms_governing_use_and_reproduction': u'Creative Commons Attribution 4.0' }, u'communities': [ u'zenodo', ], u'funding_information_note': [{ u'grant_number': u'1234', u'text_of_note': u'Grant Title' }, { u'grant_number': u'4321', u'text_of_note': u'Title Grant' }], u'host_item_entry': [ { u'main_entry_heading': u'10.1234/foo.bar', u'note': u'doi', u'relationship_information': u'cites', }, { 'main_entry_heading': u'1234.4325', 'note': u'arxiv', 'relationship_information': u'isIdenticalTo' }, { u'main_entry_heading': u'1234.4321', u'note': u'arxiv', u'relationship_information': u'cites', }, { 'main_entry_heading': u'1234.4328', 'note': u'arxiv', 'relationship_information': u'references' }, { 'main_entry_heading': u'10.1234/zenodo.4321', 'note': u'doi', 'relationship_information': u'isPartOf' }, { 'main_entry_heading': u'10.1234/zenodo.1234', 'note': u'doi', 'relationship_information': u'hasPart' }, { u'main_entry_heading': u'Staszkowka', u'edition': u'Jol', u'title': u'Bum', u'related_parts': u'1-2', u'international_standard_book_number': u'978-0201633610', }, ], u'other_standard_identifier': [{ u'standard_number_or_code': u'10.1234/foo.bar', u'source_of_number_or_code': u'doi', }, { u'standard_number_or_code': (u'urn:lsid:ubio.org:namebank:11815'), u'source_of_number_or_code': u'lsid', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'2011ApJS..192...18K', u'source_of_number_or_code': u'ads', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'0317-8471', u'source_of_number_or_code': u'issn', u'qualifying_information': u'alternateidentifier', }, { u'standard_number_or_code': u'10.1234/alternate.doi', u'source_of_number_or_code': u'doi', u'qualifying_information': u'alternateidentifier', }], u'references': [{ u'raw_reference': u'Doe, John et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.12' }, { u'raw_reference': u'Smith, Jane et al (2012). Some title. ' 'Zenodo. 10.5281/zenodo.34' }], u'added_entry_meeting_name': [{ u'date_of_meeting': u'23-25 June, 2014', u'meeting_name_or_jurisdiction_name_as_entry_element': u'The 13th Biennial HITRAN Conference', u'number_of_part_section_meeting': u'VI', u'miscellaneous_information': u'HITRAN13', u'name_of_part_section_of_a_work': u'1', u'location_of_meeting': u'Harvard-Smithsonian Center for Astrophysics' }], u'conference_url': 'http://hitran.org/conferences/hitran-13-2014/', u'dissertation_note': { u'name_of_granting_institution': u'I guess important', }, u'journal': { 'issue': '2', 'pages': '20', 'volume': '20', 'title': 'Bam', 'year': '2014', }, u'embargo_date': '0900-12-31', u'language_code': { 'language_code_of_text_sound_track_or_separate_title': 'eng', }, u'_oai': { u'sets': [u'user-zenodo', u'user-ecfunded'], u'id': u'oai:zenodo.org:1' }, u'_files': [ { 'uri': 'https://zenodo.org/record/12345/files/test', 'checksum': 'md5:11111111111111111111111111111111', 'type': 'txt', 'size': 4, }, ], 'leader': { 'base_address_of_data': '00000', 'bibliographic_level': 'monograph_item', 'character_coding_scheme': 'marc-8', 'descriptive_cataloging_form': 'unknown', 'encoding_level': 'unknown', 'indicator_count': 2, 'length_of_the_implementation_defined_portion': 0, 'length_of_the_length_of_field_portion': 4, 'length_of_the_starting_character_position_portion': 5, 'multipart_resource_record_level': 'not_specified_or_not_applicable', 'record_length': '00000', 'record_status': 'new', 'subfield_code_count': 2, 'type_of_control': 'no_specified_type', 'type_of_record': 'language_material', 'undefined': 0, }, } # Dump MARC21 JSON structure and compare against expected JSON. preprocessed_record = marcxml_v1.preprocess_record(record=record, pid=pid) data = marcxml_v1.schema_class().dump(preprocessed_record).data assert expected == data # Assert that we can output MARCXML. assert marcxml_v1.serialize(record=record, pid=pid)