Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)