def perform_upload_check(xml_record, mode): """ Performs a upload simulation with the given record and mode @return: string describing errors @rtype: string """ error_cache = [] def my_writer(msg, stream=sys.stdout, verbose=1): if verbose == 1: if 'DONE' not in msg: error_cache.append(msg.strip()) orig_writer = bibupload_module.write_message bibupload_module.write_message = my_writer error_cache.extend(perform_basic_upload_checks(xml_record)) if error_cache: # There has been some critical error return '\n'.join(error_cache) recs = xml_marc_to_records(xml_record) try: upload_mode = mode[2:] # Adapt input data for bibupload function if upload_mode == "r insert-or-replace": upload_mode = "replace_or_insert" for record in recs: if record: record_strip_empty_volatile_subfields(record) record_strip_empty_fields(record) bibupload(record, opt_mode=upload_mode, pretend=True) finally: bibupload_module.write_message = orig_writer return '\n'.join(error_cache)
def bst_openaire_altmetric(): """ """ recids = search_pattern(p="0->Z", f="0247_a") a = Altmetric() for recid in recids: try: # Check if we already have an Altmetric id sysno_inst = get_fieldvalues(recid, "035__9") if ['Altmetric'] in sysno_inst: continue doi_val = get_fieldvalues(recid, "0247_a")[0] json_res = a.doi(doi_val) rec = {} record_add_field(rec, "001", controlfield_value=str(recid)) if json_res: record_add_field(rec, '035', subfields=[('a', str(json_res['altmetric_id'])), ('9', 'Altmetric')]) bibupload(rec, opt_mode='correct') except AltmetricHTTPException, e: register_exception(prefix='Altmetric error (status code %s): %s' % (e.status_code, str(e)), alert_admin=False)
def bst_openaire_altmetric(): """ """ recids = search_pattern(p="0->Z", f="0247_a") a = Altmetric() for recid in recids: try: # Check if we already have an Altmetric id sysno_inst = get_fieldvalues(recid, "035__9") if ['Altmetric'] in sysno_inst: continue doi_val = get_fieldvalues(recid, "0247_a")[0] json_res = a.doi(doi_val) rec = {} record_add_field(rec, "001", controlfield_value=str(recid)) if json_res: record_add_field(rec, '035', subfields=[ ('a', str(json_res['altmetric_id'])), ('9', 'Altmetric')] ) bibupload(rec, opt_mode='correct') except AltmetricHTTPException, e: register_exception(prefix='Altmetric error (status code %s): %s' % (e.status_code, str(e)), alert_admin=False)
def main(): from invenio.legacy.search_engine import get_record from invenio.legacy.bibupload.engine import ( bibupload, ) from invenio.legacy.bibrecord import ( record_add_field, record_delete_field, ) # Loop through list of records for r in RECORDS: old_rec = get_record(r) rec = get_record(r) if not rec: break print('Processing record: {0}'.format(r)) # pprint(rec) old_690 = [f[0] for f in rec.get('690', [])] new_690 = [] for f in old_690: a = f[0] b = f[1] t = [a, (b[0], VALUES.get(r))] if (a[0] == 'a' and a[1] == 'language_code' and b[0] == 'b' and VALUES.get(r)) \ else f new_690.append(t) if not new_690 == old_690: record_delete_field(rec, '690') for f in new_690: record_add_field(rec, '690', subfields=f) # pprint(rec) print('\nOld 690:') pprint(old_rec.get('690')) print('\nNew 690:') pprint(rec.get('690')) if raw_input('Bibupload (y/n)? ') == 'y': bibupload(rec, 'delete') sleep(5) bibupload(rec, 'replace')
def update(recid, form): if not is_record_editable(recid): abort(401) from invenio.legacy.search_engine import get_record from invenio.legacy.bibupload.engine import bibupload from invenio.modules.formatter import engine as bibformat_engine bfo = bibformat_engine.BibFormatObject(recid) domain = read_basic_metadata_field_from_marc(bfo, 'domain') metaclass, meta, meta_form = _get_meta_form_data(domain, form) if meta_form.validate_on_submit(): current_app.logger.info("Updating record {}".format(recid)) _bibdoc_modify_files(recid, form) rec_changes = {} add_basic_fields(rec_changes, form, meta) updated = False rec = get_record(recid) for (k, v) in rec_changes.items(): if rec.get(k) != v: current_app.logger.info("Updating key {} from {} to {}".format( k, rec.get(k), v)) rec[k] = v updated = True if updated: bibupload(rec, 'replace') return jsonify(valid=True, newurl=url_for("record.metadata", recid=recid), html=render_template('record_waitforit.html', recid=recid)) else: html = render_template('b2share-addmeta-table.html', recid=recid, metadata=meta, form=meta_form, domain=metaclass, getattr=getattr) return jsonify(valid=False, html=html)
def main(): from invenio.legacy.search_engine import get_record from invenio.legacy.bibupload.engine import ( bibupload, ) from invenio.legacy.bibrecord import ( create_record, ) from invenio.legacy.bibedit.db_layer import get_record_revisions from invenio.legacy.bibedit.utils import ( get_record_revision_ids, get_marcxml_of_revision, ) # Loop through list of records for r in RECORDS: rec = get_record(r) if not rec: break print('Processing record: {0}'.format(r)) # pprint(rec) print(get_record_revision_ids(r)) print revs = get_record_revisions(r) print(revs) print for id, rev in revs[0:1]: marcxml = get_marcxml_of_revision(r, rev) # print(marcxml) # print rec = create_record(marcxml)[0] pprint(rec) if raw_input('Bibupload (y/n)? ') == 'y': # bibupload(rec, 'delete') # sleep(5) bibupload(rec, 'replace')
def update(recid, form): if not is_record_editable(recid): abort(401) from invenio.legacy.search_engine import get_record from invenio.legacy.bibupload.engine import bibupload from invenio.modules.formatter import engine as bibformat_engine bfo = bibformat_engine.BibFormatObject(recid) domain = read_basic_metadata_field_from_marc(bfo, 'domain') metaclass, meta, meta_form = _get_meta_form_data(domain, form) if meta_form.validate_on_submit(): current_app.logger.info("Updating record {}".format(recid)) _bibdoc_modify_files(recid, form) rec_changes = {} add_basic_fields(rec_changes, form, meta) updated = False rec = get_record(recid) for (k,v) in rec_changes.items(): if rec.get(k) != v: current_app.logger.info( "Updating key {} from {} to {}".format(k, rec.get(k),v)) rec[k] = v updated = True if updated: bibupload(rec, 'replace') return jsonify(valid=True, newurl=url_for("record.metadata", recid=recid), html=render_template('record_waitforit.html', recid=recid)) else: html = render_template('b2share-addmeta-table.html', recid=recid, metadata=meta, form=meta_form, domain=metaclass, getattr=getattr) return jsonify(valid=False, html=html)
def main(): import invenio.modules.editor.models import invenio.modules.editor.views from invenio.legacy.search_engine import get_record from invenio.legacy.bibrecord import ( record_delete_field, record_add_field, ) from invenio.legacy.bibupload.engine import ( bibupload, ) for a in itertools.count(1): old_rec = get_record(a) rec = get_record(a) if not rec: break print('Processing record: {0}'.format(a)) old_337 = [f[0] for f in rec.get('337', [])] new_337 = old_337[:] new_690 = [] new_980 = [] for f in rec.get('980', []): for sf in f[0]: if sf[0] == 'a' and sf[1] in TYPES: if [sf] not in new_337: new_337.append([sf]) else: if [sf] not in new_980: new_980.append([sf]) for f in rec.get('690', []): sfs = f[0] if sfs[0][0] == 'a' and sfs[0][1] == 'ling_resource_type': res_type = sfs[1][1] if res_type in TYPES: if [('a', res_type)] not in new_337: new_337.append([('a', res_type)]) else: print("Unrecognized 'ling_resource_type' value! '{0}'". format(res_type)) else: if sfs not in new_690: new_690.append(sfs) if not new_337 == old_337: record_delete_field(rec, '337') record_delete_field(rec, '980') record_delete_field(rec, '690') for f in new_337: record_add_field(rec, '337', subfields=f) for f in new_980: record_add_field(rec, '980', subfields=f) for f in new_690: record_add_field(rec, '690', subfields=f) print('\nOld 337:') pprint(old_rec.get('337')) print('New 337:') pprint(rec.get('337')) print('\nOld 690:') pprint(old_rec.get('690')) print('New 690:') pprint(rec.get('690')) print('\nOld 980:') pprint(old_rec.get('980')) print('New 980:') pprint(rec.get('980')) if raw_input('Bibupload (y/n)? ') == 'y': bibupload(rec, 'replace')