Exemple #1
0
def doi_redirect(doi):
    """Redirect to record for DOI."""
    from invenio.legacy.bibupload.engine import find_record_from_doi
    recid = find_record_from_doi(doi)
    if recid is None:
        return render_template("404.html"), 404
    return redirect(url_for('record.metadata', recid=recid))
Exemple #2
0
def check_records(records, doi_field="0247_a", extra_subfields=(("2", "DOI"), ("9", "bibcheck"))):
    """
    Find the DOI for the records using crossref and add it to the specified
    field.

    This plugin won't ask for the DOI if it's already set.
    """
    records_to_check = {}
    for record in records:
        has_doi = False
        for position, value in record.iterfield("0247_2"):
            if value.lower() == "doi":
                has_doi = True
                break
        if not has_doi:
            records_to_check[record.record_id] = record

    dois = get_doi_for_records(records_to_check.values())
    for record_id, doi in dois.iteritems():
        record = records_to_check[record_id]
        dup_doi_recid = find_record_from_doi(doi)
        if dup_doi_recid:
            record.warn("DOI %s to be added to record %s already exists in record/s %s" % (doi, record_id, dup_doi_recid))
            continue
        subfields = [(doi_field[5], doi.encode("utf-8"))] + map(tuple, extra_subfields)
        record_add_field(record, tag=doi_field[:3], ind1=doi_field[3],
                ind2=doi_field[4], subfields=subfields)
        record.set_amended("Added DOI in field %s" % doi_field)
Exemple #3
0
def doi_redirect(doi):
    """Redirect to record for DOI."""
    from invenio.legacy.bibupload.engine import find_record_from_doi
    recid = find_record_from_doi(doi)
    if recid is None:
        return render_template("404.html"), 404
    return redirect(url_for('record.metadata', recid=recid))
Exemple #4
0
def existing_doi_validator(form, field):
    """Test if DOI already exists in Zenodo."""
    from invenio.legacy.bibupload.engine import find_record_from_doi
    from invenio.config import CFG_SITE_NAME

    if field.data:
        if find_record_from_doi(field.data) is not None:
            raise ValidationError("DOI already exists in %s." % CFG_SITE_NAME)
Exemple #5
0
def check_records(records,
                  doi_field="0247_a",
                  extra_subfields=(("2", "DOI"), ("9", "bibcheck"))):
    """
    Find the DOI for the records using crossref and add it to the specified
    field.

    This plugin won't ask for the DOI if it's already set.
    """
    records_to_check = {}
    for record in records:
        has_doi = False
        for position, value in record.iterfield("0247_2"):
            if value.lower() == "doi":
                has_doi = True
                break
        if not has_doi:
            records_to_check[record.record_id] = record

    dois = get_doi_for_records(records_to_check.values())
    for record_id, doi in dois.iteritems():
        record = records_to_check[record_id]
        dup_doi_recid = find_record_from_doi(doi)
        if dup_doi_recid:
            record.warn(
                "DOI %s to be added to record %s already exists in record/s %s"
                % (doi, record_id, dup_doi_recid))
            continue
        subfields = [(doi_field[5], doi.encode("utf-8"))] + map(
            tuple, extra_subfields)
        record_add_field(record,
                         tag=doi_field[:3],
                         ind1=doi_field[3],
                         ind2=doi_field[4],
                         subfields=subfields)
        record.set_amended("Added DOI in field %s" % doi_field)