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)
def check_records(records, doi_field="0247_a", extra_subfields=(("2", "DOI"),)): """ 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(): 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 record = records_to_check[record_id] 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)
def check_records(records, doi_field="0247_a", extra_subfields=(("2", "DOI"), ("9", "bibcheck")), create_ticket=False): """ 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)) if create_ticket: subject = "DOI conflict record #%s" % str(record_id) res = BIBCATALOG_SYSTEM.ticket_submit( subject=subject, recordid=record_id, text=subject, queue="Bibcheck" ) if res > 0: msg = """ DOI %s to be added to record %s already exists in record/s %s Record with conflict: %s Record with original DOI: %s Merge both records: %s """ dup_doi_recid = int(dup_doi_recid) record_id = int(record_id) msg = msg % ( doi, record_id, dup_doi_recid, "%s/record/%s" % (CFG_SITE_URL, record_id), "%s/record/%s" % (CFG_SITE_URL, dup_doi_recid), "%s/record/merge/?#recid1=%s&recid2=%s" % (CFG_SITE_URL, min(dup_doi_recid, record_id), max(dup_doi_recid, record_id)) ) if isinstance(msg, unicode): msg = msg.encode("utf-8") BIBCATALOG_SYSTEM.ticket_comment(None, res, msg) 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)
def check_records(records, doi_field="0247_a", extra_subfields=(("2", "DOI"), ("9", "bibcheck")), create_ticket=False): """ 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: check_record = True for position, value in record.iterfield("0247_2"): if value.lower() == "doi": check_record = False break # Do not consider records in the proceedings collection for position, value in record.iterfield("980__a"): if value.lower() == "proceedings": check_record = False break if check_record: 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)) if create_ticket: subject = "DOI conflict record #%s" % str(record_id) res = BIBCATALOG_SYSTEM.ticket_submit(subject=subject, recordid=record_id, text=subject, queue="Bibcheck") if res: msg = """ DOI %s to be added to record %s already exists in record/s %s Record with conflict: %s Record with original DOI: %s Merge both records: %s """ dup_doi_recid = int(dup_doi_recid) record_id = int(record_id) msg = msg % (doi, record_id, dup_doi_recid, "%s/record/%s" % (CFG_SITE_URL, record_id), "%s/record/%s" % (CFG_SITE_URL, dup_doi_recid), "%s/record/merge/?#recid1=%s&recid2=%s" % (CFG_SITE_URL, min(dup_doi_recid, record_id), max(dup_doi_recid, record_id))) if isinstance(msg, unicode): msg = msg.encode("utf-8") BIBCATALOG_SYSTEM.ticket_comment(None, res, msg) 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)