Пример #1
0
def test_replace_refs(app):
    """Test replace refs."""
    app.config['INDEXER_REPLACE_REFS'] = False
    app.extensions['invenio-records'].loader_cls = json_loader_factory(
            JSONResolver(plugins=['demo.json_resolver']))

    with app.app_context():
        record = Record({'$ref': 'http://dx.doi.org/10.1234/foo'})
        data = RecordIndexer._prepare_record(record, 'records', 'record')
        assert '$ref' in data

    app.config['INDEXER_REPLACE_REFS'] = True
    with app.app_context():
        record = Record({'$ref': 'http://dx.doi.org/10.1234/foo'})
        data = RecordIndexer._prepare_record(record, 'records', 'record')
        assert '$ref' not in data
        assert json.dumps(data)
Пример #2
0
def test_replace_refs(app):
    """Test replace refs."""
    app.config['INDEXER_REPLACE_REFS'] = False
    app.extensions['invenio-records'].loader_cls = json_loader_factory(
            JSONResolver(plugins=['demo.json_resolver']))

    with app.app_context():
        record = Record({'$ref': 'http://dx.doi.org/10.1234/foo'})
        data = RecordIndexer._prepare_record(record, 'records', 'record')
        assert '$ref' in data

    app.config['INDEXER_REPLACE_REFS'] = True
    with app.app_context():
        record = Record({'$ref': 'http://dx.doi.org/10.1234/foo'})
        data = RecordIndexer._prepare_record(record, 'records', 'record')
        assert '$ref' not in data
        assert json.dumps(data)
Пример #3
0
def test_records_serializers_marc(app, test_records_data):
    with app.app_context():
        pid, record = make_record(test_records_data)
        rec = {
            '_source':
            RecordIndexer._prepare_record(record, 'records', 'record').copy(),
            '_version':
            record.revision_id
        }
        marcxml = oaipmh_marc21_v1(pid=pid, record=rec)

        namespaces = {'m': 'http://www.loc.gov/MARC21/slim'}

        def marc_controlfields(tag):
            xpath = '//m:controlfield[@tag="{}"]'.format(tag)
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        def marc_datafields(tag, subfield_code):
            xpath = '//m:datafield[@tag="{}"]/m:subfield[@code="{}"]'.format(
                tag, subfield_code)
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        def marc_files():
            xpath = '//m:datafield[@tag="856" and @ind1="4"]/m:subfield[@code="u"]'
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        creators_and_contributors = [
            r['creator_name'] for r in record['creators']
        ]
        creators_and_contributors.extend(
            [r['contributor_name'] for r in record['contributors']])

        assert marc_controlfields('001') == [pid.pid_value]

        assert marc_datafields('100', 'a') == creators_and_contributors[:1]
        assert marc_datafields('245',
                               'a') == [r['title'] for r in record['titles']]
        assert marc_datafields('260', 'b') == [record['publisher']]
        assert marc_datafields('260', 'c') == [record['publication_date']]
        assert marc_datafields('337', 'a') == [
            r['resource_type_general'] for r in record['resource_types']
        ]
        assert marc_datafields(
            '520', 'a') == [r['description'] for r in record['descriptions']]
        assert marc_datafields('526', 'a') == record.get('disciplines')
        assert marc_datafields(
            '540', 'a') == [record.get('license', {}).get('license')]
        assert marc_datafields(
            '542', 'l') == ['open' if record['open_access'] else 'closed']
        assert marc_datafields('546', 'a') == [record['language']]
        assert marc_datafields('653', 'a') == record.get('keywords')
        assert marc_datafields('700', 'a') == creators_and_contributors[1:]

        assert marc_files() == [f['ePIC_PID'] for f in record.get('_files')]
Пример #4
0
def create_index_op(record):
    index, doc_type = current_record_to_index(record)

    return {
        '_op_type': 'index',
        '_index': index,
        '_type': doc_type,
        '_id': str(record.id),
        '_version': record.revision_id,
        '_version_type': 'external_gte',
        '_source': RecordIndexer._prepare_record(record, index, doc_type),
    }
Пример #5
0
def create_index_op(record):
    index, doc_type = current_record_to_index(record)

    return {
        '_op_type': 'index',
        '_index': index,
        '_type': doc_type,
        '_id': str(record.id),
        '_version': record.revision_id,
        '_version_type': 'external_gte',
        '_source': RecordIndexer._prepare_record(record, index, doc_type),
    }
Пример #6
0
def test_records_serializers_dc(app, test_records_data):
    with app.app_context():
        pid, record = make_record(test_records_data)
        rec = {
            '_source':
            RecordIndexer._prepare_record(record, 'records', 'record').copy(),
            '_version':
            record.revision_id
        }
        dcxml = oaipmh_oai_dc(pid=pid, record=rec)

        namespaces = {'dc': 'http://purl.org/dc/elements/1.1/'}
        identifiers = dcxml.xpath('//dc:identifier', namespaces=namespaces)
        titles = dcxml.xpath('//dc:title', namespaces=namespaces)
        creators = dcxml.xpath('//dc:creator', namespaces=namespaces)
        descriptions = dcxml.xpath('//dc:description', namespaces=namespaces)
        subjects = dcxml.xpath('//dc:subject', namespaces=namespaces)
        contributors = dcxml.xpath('//dc:contributor', namespaces=namespaces)
        rights = dcxml.xpath('//dc:rights', namespaces=namespaces)
        publishers = dcxml.xpath('//dc:publisher', namespaces=namespaces)
        languages = dcxml.xpath('//dc:language', namespaces=namespaces)
        types = dcxml.xpath('//dc:type', namespaces=namespaces)

        assert identifiers
        for x in identifiers:
            assert x.text.endswith(pid.pid_value)

        assert [x.text
                for x in titles] == [r['title'] for r in record['titles']]
        assert [x.text for x in creators
                ] == [r['creator_name'] for r in record['creators']]
        assert [x.text for x in descriptions
                ] == [r['description'] for r in record['descriptions']]
        assert [x.text for x in types] == [
            r['resource_type_general'] for r in record['resource_types']
        ]
        assert [x.text for x in contributors
                ] == [r['contributor_name'] for r in record['contributors']]
        assert [x.text for x in publishers] == [record['publisher']]
        assert [x.text for x in languages] == [record['language']]

        assert [x.text for x in subjects] == record.get('keywords')

        rights = [x.text for x in rights]
        access = 'info:eu-repo/semantics/closedAccess'
        if record['open_access']:
            access = 'info:eu-repo/semantics/openAccess'
        assert access in rights
        license = record.get('license', {}).get('license')
        if license:
            assert license in rights
def test_records_serializers_marc(app, test_records_data):
    with app.app_context():
        pid, record = make_record(test_records_data)
        rec = {
            '_source': RecordIndexer._prepare_record(
                record, 'records', 'record'
            ).copy(),
            '_version': record.revision_id
        }
        marcxml = oaipmh_marc21_v1(pid=pid, record=rec)

        namespaces = {'m':'http://www.loc.gov/MARC21/slim'}

        def marc_controlfields(tag):
            xpath = '//m:controlfield[@tag="{}"]'.format(tag)
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        def marc_datafields(tag, subfield_code):
            xpath = '//m:datafield[@tag="{}"]/m:subfield[@code="{}"]'.format(
                tag, subfield_code)
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        def marc_files():
            xpath = '//m:datafield[@tag="856" and @ind1="4"]/m:subfield[@code="u"]'
            elements = marcxml.xpath(xpath, namespaces=namespaces)
            return [x.text for x in elements]

        creators_and_contributors = [r['creator_name'] for r in record['creators']]
        creators_and_contributors.extend([r['contributor_name']
                                          for r in record['contributors']])

        assert marc_controlfields('001') == [pid.pid_value]

        assert marc_datafields('100', 'a') == creators_and_contributors[:1]
        assert marc_datafields('245', 'a') == [r['title'] for r in record['titles']]
        assert marc_datafields('260', 'b') == [record['publisher']]
        assert marc_datafields('260', 'c') == [record['publication_date']]
        assert marc_datafields('337', 'a') == [
            r['resource_type_general'] for r in record['resource_types']]
        assert marc_datafields('520', 'a') == [r['description'] for r in record['descriptions']]
        assert marc_datafields('526', 'a') == record.get('disciplines')
        assert marc_datafields('540', 'a') == [record.get('license', {}).get('license')]
        assert marc_datafields('542', 'l') == ['open' if record['open_access'] else 'closed']
        assert marc_datafields('546', 'a') == [record['language']]
        assert marc_datafields('653', 'a') == record.get('keywords')
        assert marc_datafields('700', 'a') == creators_and_contributors[1:]

        assert marc_files() == [f['ePIC_PID'] for f in record.get('_files')]
Пример #8
0
def create_index_op(record, version_type='external_gte'):
    from inspirehep.modules.records.receivers import enhance_before_index
    index, doc_type = current_record_to_index(record)
    enhance_before_index(record)

    return {
        '_op_type': 'index',
        '_index': index,
        '_type': doc_type,
        '_id': str(record.id),
        'version': record.revision_id,
        'version_type': version_type,
        '_source': RecordIndexer._prepare_record(record, index, doc_type),
    }
Пример #9
0
def create_index_op(record, version_type='external_gte'):
    from inspirehep.modules.records.receivers import enhance_before_index
    index, doc_type = current_record_to_index(record)
    enhance_before_index(record)

    return {
        '_op_type': 'index',
        '_index': index,
        '_type': doc_type,
        '_id': str(record.id),
        '_version': record.revision_id,
        '_version_type': version_type,
        '_source': RecordIndexer._prepare_record(record, index, doc_type),
    }
def test_records_serializers_dc(app, test_records_data):
    with app.app_context():
        pid, record = make_record(test_records_data)
        rec = {
            '_source': RecordIndexer._prepare_record(
                record, 'records', 'record'
            ).copy(),
            '_version': record.revision_id
        }
        dcxml = oaipmh_oai_dc(pid=pid, record=rec)

        namespaces = {'dc':'http://purl.org/dc/elements/1.1/'}
        identifiers = dcxml.xpath('//dc:identifier', namespaces=namespaces)
        titles = dcxml.xpath('//dc:title', namespaces=namespaces)
        creators = dcxml.xpath('//dc:creator', namespaces=namespaces)
        descriptions = dcxml.xpath('//dc:description', namespaces=namespaces)
        subjects = dcxml.xpath('//dc:subject', namespaces=namespaces)
        contributors = dcxml.xpath('//dc:contributor', namespaces=namespaces)
        rights = dcxml.xpath('//dc:rights', namespaces=namespaces)
        publishers = dcxml.xpath('//dc:publisher', namespaces=namespaces)
        languages = dcxml.xpath('//dc:language', namespaces=namespaces)
        types = dcxml.xpath('//dc:type', namespaces=namespaces)

        assert identifiers
        for x in identifiers:
            assert x.text.endswith(pid.pid_value)

        assert [x.text for x in titles] == [r['title'] for r in record['titles']]
        assert [x.text for x in creators] == [r['creator_name'] for r in record['creators']]
        assert [x.text for x in descriptions] == [r['description'] for r in record['descriptions']]
        assert [x.text for x in types] == [
            r['resource_type_general'] for r in record['resource_types']]
        assert [x.text for x in contributors] == [
            r['contributor_name'] for r in record['contributors']]
        assert [x.text for x in publishers] == [record['publisher']]
        assert [x.text for x in languages] == [record['language']]

        assert [x.text for x in subjects] == record.get('keywords')

        rights = [x.text for x in rights]
        access = 'info:eu-repo/semantics/closedAccess'
        if record['open_access']:
            access = 'info:eu-repo/semantics/openAccess'
        assert access in rights
        license = record.get('license', {}).get('license')
        if license:
            assert license in rights