Esempio n. 1
0
def id_minter(record_uuid, data, provider, pid_key='pid', object_type='rec'):
    """Document PID minter."""
    # Create persistent identifier
    provider = provider.create(object_type=object_type,
                               object_uuid=record_uuid,
                               pid_value=data.get(pid_key))

    pid = provider.pid
    data[pid_key] = pid.pid_value

    # Mandatory to check if PID for OAI exists, as the minter is called twice
    # during API calls..
    try:
        oai_pid_value = current_app.config.get('OAISERVER_ID_PREFIX',
                                               '') + str(pid.pid_value)
        OAIIDProvider.get(oai_pid_value, 'oai')
    except PIDDoesNotExistError:
        oaiid_minter(record_uuid, data)

    return pid
Esempio n. 2
0
def zenodo_oaiid_minter(record_uuid, data):
    """Mint OAI identifiers."""
    pid_value = data.get('_oai', {}).get('id')
    if pid_value is None:
        assert 'recid' in data
        pid_value = current_app.config.get('OAISERVER_ID_PREFIX', '') + str(
            data['recid']
        )
    provider = OAIIDProvider.create(
        object_type='rec', object_uuid=record_uuid,
        pid_value=str(pid_value)
    )
    data.setdefault('_oai', {})
    data['_oai']['id'] = provider.pid.pid_value
    return provider.pid
Esempio n. 3
0
def zenodo_oaiid_minter(record_uuid, data):
    """Mint OAI identifiers."""
    pid_value = data.get('_oai', {}).get('id')
    if pid_value is None:
        assert 'recid' in data
        pid_value = current_app.config.get('OAISERVER_ID_PREFIX', '') + str(
            data['recid']
        )
    provider = OAIIDProvider.create(
        object_type='rec', object_uuid=record_uuid,
        pid_value=str(pid_value)
    )
    data.setdefault('_oai', {})
    data['_oai']['id'] = provider.pid.pid_value
    data['_oai']['updated'] = datetime_to_datestamp(datetime.utcnow())
    return provider.pid
Esempio n. 4
0
def add_records_to_set(ids):
    """Add records to set."""
    # use invenio-record functions to add set information to the record
    # get record via invenio-record.api.Record.... get_record
    for recid, oaiid in ids:
        if oaiid:
            # how to get and modify record
            rec = get_record(recid)
            rec['_oai'].append(new_set.name)
        else:
            # use minter for this
            oaiid = OAIIDProvider.create('rec', recid)
            rec = get_record(recid)
            # append set nam to the record (with append date as a separete
            # field) this needs to be configurable
            rec['_oai'].append(new_set.name)
Esempio n. 5
0
def add_records_to_set(ids):
    """Add records to set."""
    # use invenio-record functions to add set information to the record
    # get record via invenio-record.api.Record.... get_record
    for recid, oaiid in ids:
        if oaiid:
            # how to get and modify record
            rec = get_record(recid)
            rec['_oai'].append(new_set.name)
        else:
            # use minter for this
            oaiid = OAIIDProvider.create('rec', recid)
            rec = get_record(recid)
            # append set nam to the record (with append date as a separete
            # field) this needs to be configurable
            rec['_oai'].append(new_set.name)
Esempio n. 6
0
def b2share_oaiid_minter(rec_pid, data):
    """Mint record identifiers."""
    oai_pid_value = data.get('_oai', {}).get('id')
    if oai_pid_value is None:
        oai_prefix = current_app.config.get('OAISERVER_ID_PREFIX', 'oai:')
        oai_pid_value = str(oai_prefix) + str(rec_pid.pid_value)
    provider = OAIIDProvider.create(object_type='rec',
                                    object_uuid=rec_pid.object_uuid,
                                    pid_value=oai_pid_value)
    data.setdefault('_oai', {})
    data['_oai'].update({
        'id': oai_pid_value,
        'sets': [data.get('community')],  # community_id == setSpec
        'updated': datetime_to_datestamp(datetime.utcnow()),
    })
    return provider.pid
Esempio n. 7
0
def b2share_oaiid_minter(record_uuid, data):
    """Mint record identifiers."""
    pid_value = data.get('_oai', {}).get('id')
    if pid_value is None:
        assert '_deposit' in data and 'id' in data['_deposit']
        id_ = str(data['_deposit']['id'])
        pid_value = current_app.config.get('OAISERVER_ID_PREFIX', '') + id_
    provider = OAIIDProvider.create(object_type='rec',
                                    object_uuid=record_uuid,
                                    pid_value=str(pid_value))
    data.setdefault('_oai', {})
    data['_oai'].update({
        'id': provider.pid.pid_value,
        'sets': [],
        'updated': datetime_to_datestamp(datetime.utcnow()),
    })
    return provider.pid
Esempio n. 8
0
def b2share_oaiid_minter(rec_pid, data):
    """Mint record identifiers."""
    oai_pid_value = data.get('_oai', {}).get('id')
    if oai_pid_value is None:
        oai_prefix = current_app.config.get('OAISERVER_ID_PREFIX', 'oai:')
        oai_pid_value = str(oai_prefix) + str(rec_pid.pid_value)
    provider = OAIIDProvider.create(
        object_type='rec',
        object_uuid=rec_pid.object_uuid,
        pid_value=oai_pid_value
    )
    data.setdefault('_oai', {})
    data['_oai'].update({
        'id': oai_pid_value,
        'sets': [data.get('community')], # community_id == setSpec
        'updated': datetime_to_datestamp(datetime.utcnow()),
    })
    return provider.pid