def pids(): """Fetch and register PIDs.""" from invenio_db import db from invenio_oaiserver.fetchers import onaiid_fetcher from invenio_oaiserver.minters import oaiid_minter from invenio_pidstore.errors import PIDDoesNotExistError from invenio_pidstore.models import PIDStatus, PersistentIdentifier from invenio_pidstore.fetchers import recid_fetcher from invenio_records.models import RecordMetadata recids = [r.id for r in RecordMetadata.query.all()] db.session.expunge_all() with click.progressbar(recids) as bar: for record_id in bar: record = RecordMetadata.query.get(record_id) try: pid = recid_fetcher(record.id, record.json) found = PersistentIdentifier.get( pid_type=pid.pid_type, pid_value=pid.pid_value, pid_provider=pid.provider.pid_provider) click.echo('Found {0}.'.format(found)) except PIDDoesNotExistError: db.session.add( PersistentIdentifier.create(pid.pid_type, pid.pid_value, object_type='rec', object_uuid=record.id, status=PIDStatus.REGISTERED)) except KeyError: click.echo('Skiped: {0}'.format(record.id)) continue pid_value = record.json.get('_oai', {}).get('id') if pid_value is None: assert 'control_number' in record.json pid_value = current_app.config.get( 'OAISERVER_ID_PREFIX') + str(record.json['control_number']) record.json.setdefault('_oai', {}) record.json['_oai']['id'] = pid.pid_value pid = oaiid_fetcher(record.id, record.json) try: found = PersistentIdentifier.get( pid_type=pid.pid_type, pid_value=pid.pid_value, pid_provider=pid.provider.pid_provider) click.echo('Found {0}.'.format(found)) except PIDDoesNotExistError: pid = oaiid_minter(record.id, record.json) db.session.add(pid) flag_modified(record, 'json') assert record.json['_oai']['id'] db.session.add(record) db.session.commit() db.session.expunge_all()
def test_recid_fetcher(app, db): """Test legacy recid fetcher.""" with app.app_context(): rec_uuid = uuid.uuid4() data = {} minted_pid = recid_minter(rec_uuid, data) fetched_pid = recid_fetcher(rec_uuid, data) assert minted_pid.pid_value == fetched_pid.pid_value assert fetched_pid.pid_type == fetched_pid.provider.pid_type assert fetched_pid.pid_type == 'recid'
def test_recid_fetcher(app): """Test base provider.""" with app.app_context(): rec_uuid = uuid.uuid4() data = {} minted_pid = recid_minter(rec_uuid, data) fetched_pid = recid_fetcher(rec_uuid, data) assert minted_pid.pid_value == fetched_pid.pid_value assert fetched_pid.pid_type == fetched_pid.provider.pid_type assert fetched_pid.pid_type == 'recid'
def pids(): """Fetch and register PIDs.""" from invenio_db import db from invenio_oaiserver.fetchers import onaiid_fetcher from invenio_oaiserver.minters import oaiid_minter from invenio_pidstore.errors import PIDDoesNotExistError from invenio_pidstore.models import PIDStatus, PersistentIdentifier from invenio_pidstore.fetchers import recid_fetcher from invenio_records.models import RecordMetadata recids = [r.id for r in RecordMetadata.query.all()] db.session.expunge_all() with click.progressbar(recids) as bar: for record_id in bar: record = RecordMetadata.query.get(record_id) try: pid = recid_fetcher(record.id, record.json) found = PersistentIdentifier.get( pid_type=pid.pid_type, pid_value=pid.pid_value, pid_provider=pid.provider.pid_provider ) click.echo('Found {0}.'.format(found)) except PIDDoesNotExistError: db.session.add( PersistentIdentifier.create( pid.pid_type, pid.pid_value, object_type='rec', object_uuid=record.id, status=PIDStatus.REGISTERED ) ) except KeyError: click.echo('Skiped: {0}'.format(record.id)) continue pid_value = record.json.get('_oai', {}).get('id') if pid_value is None: assert 'control_number' in record.json pid_value = current_app.config.get( 'OAISERVER_ID_PREFIX' ) + str(record.json['control_number']) record.json.setdefault('_oai', {}) record.json['_oai']['id'] = pid.pid_value pid = oaiid_fetcher(record.id, record.json) try: found = PersistentIdentifier.get( pid_type=pid.pid_type, pid_value=pid.pid_value, pid_provider=pid.provider.pid_provider ) click.echo('Found {0}.'.format(found)) except PIDDoesNotExistError: pid = oaiid_minter(record.id, record.json) db.session.add(pid) flag_modified(record, 'json') assert record.json['_oai']['id'] db.session.add(record) db.session.commit() db.session.expunge_all()