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)
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)
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')]
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), }
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), }
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')]
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 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