def replace_references(recid): """Replace references for a record The record itself is not updated, the marc xml of the document with updated references is returned Parameters: * recid: the id of the record """ # Parse references references_xml = extract_references_from_record_xml(recid) references = create_record(references_xml) # Record marc xml record = get_record(recid) if references[0]: fields_to_add = record_get_field_instances(references[0], tag='999', ind1='%', ind2='%') # Replace 999 fields record_delete_fields(record, '999') record_add_fields(record, '999', fields_to_add) # Update record references out_xml = record_xml_output(record) else: out_xml = None return out_xml
def replace_references(recid, uid=None, txt=None, url=None): """Replace references for a record The record itself is not updated, the marc xml of the document with updated references is returned Parameters: * recid: the id of the record * txt: references in text mode * inspire: format of ther references """ # Parse references if txt is not None: references_xml = extract_references_from_string_xml(txt, is_only_references=True) elif url is not None: references_xml = extract_references_from_url_xml(url) else: references_xml = extract_references_from_record_xml(recid) references = create_record(references_xml) dummy1, dummy2, record, dummy3, dummy4, dummy5, dummy6 = get_cache_contents(recid, uid) out_xml = None references_to_add = record_get_field_instances(references[0], tag="999", ind1="C", ind2="5") refextract_status = record_get_field_instances(references[0], tag="999", ind1="C", ind2="6") if references_to_add: # Replace 999 fields record_delete_fields(record, "999") record_add_fields(record, "999", references_to_add) record_add_fields(record, "999", refextract_status) # Update record references out_xml = record_xml_output(record) return out_xml
def _filter_fields(self, record, output_fields): """Removes from the record all the fields that are not output_fields. @param record: record structure (@see: bibrecord.py for details) @param output_fields: list of fields that should remain in the record @return: record containing only fields among output_fields """ # Tibor's new implementation: for tag in record.keys(): if tag not in output_fields: bibrecord.record_delete_fields(record, tag) return record # Rado's old implementation that leads to bibrecord-related # bug, see <https://savannah.cern.ch/task/?10267>: record_keys = record.keys() # Check if any of the tags, fields or subfields match # any value in output_fields. In case of match we leave # the element and its children in the record. # # If the element and all its children are not among the # output fields, it is deleted for tag in record_keys: tag = tag.lower() if tag not in output_fields: for (subfields, ind1, ind2, value, field_number) in record[tag]: current_field = tag + ind1.strip() + ind2.strip() current_field = current_field.lower() if current_field not in output_fields: delete_parents = True for (code, value) in subfields: current_subfield = current_field + code current_subfield = current_subfield.lower() if current_subfield not in output_fields: bibrecord.record_delete_subfield( record, tag, code, ind1, ind2) else: delete_parents = False if delete_parents: bibrecord.record_delete_field( record, tag, ind1, ind2) return record
def _filter_fields(self, record, output_fields): """Removes from the record all the fields that are not output_fields. @param record: record structure (@see: bibrecord.py for details) @param output_fields: list of fields that should remain in the record @return: record containing only fields among output_fields """ # Tibor's new implementation: for tag in record.keys(): if tag not in output_fields: bibrecord.record_delete_fields(record, tag) return record # Rado's old implementation that leads to bibrecord-related # bug, see <https://savannah.cern.ch/task/?10267>: record_keys = record.keys() # Check if any of the tags, fields or subfields match # any value in output_fields. In case of match we leave # the element and its children in the record. # # If the element and all its children are not among the # output fields, it is deleted for tag in record_keys: tag = tag.lower() if tag not in output_fields: for (subfields, ind1, ind2, value, field_number) in record[tag]: current_field = tag + ind1.strip() + ind2.strip() current_field = current_field.lower() if current_field not in output_fields: delete_parents = True for (code, value) in subfields: current_subfield = current_field + code current_subfield = current_subfield.lower() if current_subfield not in output_fields: bibrecord.record_delete_subfield(record, tag, code, ind1, ind2) else: delete_parents = False if delete_parents: bibrecord.record_delete_field(record, tag, ind1, ind2) return record
def replace_references(recid, uid=None, txt=None, url=None): """Replace references for a record The record itself is not updated, the marc xml of the document with updated references is returned Parameters: * recid: the id of the record * txt: references in text mode * inspire: format of ther references """ # Parse references if txt is not None: references_xml = extract_references_from_string_xml( txt, is_only_references=True) elif url is not None: references_xml = extract_references_from_url_xml(url) else: references_xml = extract_references_from_record_xml(recid) references = create_record(references_xml) dummy1, dummy2, record, dummy3, dummy4, dummy5, dummy6 = get_cache_contents( recid, uid) out_xml = None references_to_add = record_get_field_instances(references[0], tag='999', ind1='C', ind2='5') refextract_status = record_get_field_instances(references[0], tag='999', ind1='C', ind2='6') if references_to_add: # Replace 999 fields record_delete_fields(record, '999') record_add_fields(record, '999', references_to_add) record_add_fields(record, '999', refextract_status) # Update record references out_xml = record_xml_output(record) return out_xml
def rule_filter_out_fields(header, record): interesting_fields = ['001', '695', '773', '856', 'FFT'] for tag in record.keys(): if tag not in interesting_fields: record_delete_fields(record, tag) return record