def test_delete(migrate_provider): def delete_handler(oai_identifier, datestamp): pass synchronizer = OAISynchronizer(migrate_provider, delete_record=delete_handler) synchronizer.delete("bla", datetime.utcnow())
def test_get_oai_identifiers_2(migrate_provider): oai_sync = OAISynchronizer(migrate_provider) results = oai_sync._get_oai_identifiers( sickle=Sickle("https://invenio.nusl.cz/oai2d/"), metadata_prefix="marcxml", ) assert isinstance(results, OAIItemIterator)
def test_synchronize_delete(migrate_provider): def delete_handler(oai_identifier, datestamp): print("deleted") class Identifier: datestamp = datetime.utcnow() identifier = random.randint(0, 100000) deleted = True identifiers = [Identifier() for x in range(10)] synchronizer = OAISynchronizer(migrate_provider, delete_record=delete_handler) synchronizer.synchronize(identifiers=identifiers) assert synchronizer.deleted == 10
def synchronizer_instance(app, test_db): provider = OAIProvider( code="uk", oai_endpoint="https://dspace.cuni.cz/oai/nusl", set_="nusl_set", metadata_prefix="xoai" ) db_.session.add(provider) db_.session.commit() return OAISynchronizer(provider)
def test_synchronize_create(migrate_provider, record_xml, sample_record): class Record: xml = record_xml def create_handler(*args, **kwargs): return sample_record.id @Decorators.parser("test_parser", "nusl") def parser(*args, **kwargs): return {"id": "1", "title": "Some title", "language": ["cze", "eng"]} synchronizer = OAISynchronizer(migrate_provider, parser_name="test_parser", create_record=create_handler) synchronizer.sickle.GetRecord = MagicMock(return_value=Record()) synchronizer.transformer.transform = MagicMock(return_value={ "id": "1", "title": "Some title", "language": ["cze", "eng"] }) synchronizer.oai_sync = OAISync(provider_id=migrate_provider.id) synchronizer.update("bla", datetime.utcnow())
def test_get_oai_identifiers(migrate_provider): oai_sync = OAISynchronizer(migrate_provider) results = oai_sync._get_oai_identifiers() assert isinstance(results, OAIItemIterator)
def test_delete_2(migrate_provider): synchronizer = OAISynchronizer(migrate_provider) with pytest.raises(HandlerNotFoundError): synchronizer.delete("bla", datetime.utcnow())
def test_init(app, test_db, migrate_provider): synchronizer = OAISynchronizer(migrate_provider) assert synchronizer is not None
def import_uk(start, start_oai, break_on_error): for _ in ("elasticsearch", "urllib3"): logging.getLogger(_).setLevel(logging.CRITICAL) uk_provider = OAIProvider.query.filter_by(code="uk").one_or_none() constant_fields = { "provider": {"$ref": "http://127.0.0.1:5000/api/taxonomies/institutions/00216208/"}, "accessRights": {"$ref": "http://127.0.0.1:5000/api/taxonomies/accessRights/c_abf2/"}, "accessibility": [{"lang": "cze", "value": "Dostupné v digitálním repozitáři UK."}, { "lang": "eng", "value": "Available in the Charles University Digital Repository." }] } if not uk_provider: uk_provider = OAIProvider( code="uk", description="Univerzita Karlova", oai_endpoint="https://dspace.cuni.cz/oai/nusl", set_="nusl_set", metadata_prefix="xoai", constant_fields=constant_fields ) db.session.add(uk_provider) db.session.commit() unhandled_paths = { "/dc/date/accessioned", "/dc/date/available", "/dc/date/issued", "/dc/identifier/repId", "/dc/identifier/aleph", "/dc/description/provenance", "/dc/description/department", "/dc/description/faculty", "/dc/language/cs_CZ", "/dc/publisher", "/dcterms/created", "/thesis/degree/name", "/thesis/degree/program", "/thesis/degree/level", "/uk/abstract", "/uk/thesis", "/uk/taxonomy", "/uk/faculty-name", "/uk/faculty-abbr", "/uk/file-availability", "/uk/degree-discipline", "/uk/degree-program", "/uk/publication-place", "/bundles", "/others/handle", "/others/lastModifyDate", "/repository" } sync = OAISynchronizer( uk_provider, parser_name="xoai", unhandled_paths=unhandled_paths, create_record=nusl_theses.create_draft_record, update_record=nusl_theses.update_draft_record, delete_record=nusl_theses.delete_draft_record, pid_type="dnusl", validation=nusl_theses.validate ) api = current_app.wsgi_app.mounts['/api'] with api.app_context(): sync.run(start_id=start, start_oai=start_oai, break_on_error=break_on_error)
def test_uk_one_record(app, uk_db, schemas): uk_provider = OAIProvider.query.filter_by(code="uk").one_or_none() constant_fields = { "provider": {"$ref": "http://127.0.0.1:5000/api/taxonomies/institutions/00216208/"}, "accessRights": {"$ref": "http://127.0.0.1:5000/api/taxonomies/accessRights/c_abf2/"}, "accessibility": [{"lang": "cze", "value": "Dostupné v digitálním repozitáři UK."}, { "lang": "eng", "value": "Available in the Charles University Digital Repository." }] } if not uk_provider: uk_provider = OAIProvider( code="uk", description="Univerzita Karlova", oai_endpoint="https://dspace.cuni.cz/oai/nusl", set_="nusl_set", metadata_prefix="xoai", constant_fields=constant_fields ) db.session.add(uk_provider) db.session.commit() unhandled_paths = { "/dc/date/accessioned", "/dc/date/available", "/dc/date/issued", "/dc/identifier/repId", "/dc/identifier/aleph", "/dc/description/provenance", "/dc/description/department", "/dc/description/faculty", "/dc/language/cs_CZ", "/dc/publisher", "/dcterms/created", "/thesis/degree/name", "/thesis/degree/program", "/thesis/degree/level", "/uk/abstract", "/uk/thesis", "/uk/taxonomy", "/uk/faculty-name", "/uk/faculty-abbr", "/uk/degree-discipline", "/uk/degree-program", "/uk/publication-place", "uk/file-availability", "/bundles", "/others/handle", "/others/lastModifyDate", "/repository" } sync = OAISynchronizer( uk_provider, parser_name="xoai", unhandled_paths=unhandled_paths, create_record=nusl_theses.create_draft_record, update_record=nusl_theses.update_draft_record, delete_record=nusl_theses.delete_draft_record, pid_type="dnusl", validation=nusl_theses.validate, oai_identifiers=["oai:dspace.cuni.cz:20.500.11956/111006"] ) sync.run()