def cli_revert_to_revision(revid): """Submit specified record revision REVID upload, to replace current version. """ if not revision_format_valid_p(revid): print('ERROR: revision %s is invalid; ' \ 'must be NNN.YYYYMMDDhhmmss.' % revid) sys.exit(1) xml_record = get_marcxml_of_revision_id(revid) if xml_record == '': print('ERROR: Revision %s does not exist. ' % revid) sys.exit(1) recid = split_revid(revid)[0] if record_locked_by_other_user(recid, -1): print('The record is currently being edited. ' \ 'Please try again in a few minutes.') sys.exit(1) if record_locked_by_queue(recid): print('The record is locked because of unfinished upload tasks. ' \ 'Please try again in a few minutes.') sys.exit(1) save_xml_record(recid, 0, xml_record) print('Your modifications have now been submitted. They will be ' \ 'processed as soon as the task queue is empty.')
def perform_request_record(requestType, uid, data): """Handle 'major' record related requests. Handle retrieving, submitting or cancelling the merging session. """ #TODO add checks before submission and cancel, replace get_bibrecord call result = { 'resultCode': 0, 'resultText': '' } recid1 = data["recID1"] record1 = _get_record(recid1, uid, result) if result['resultCode'] != 0: #if record not accessible return error information return result if requestType == 'submit': if 'duplicate' in data: recid2 = data['duplicate'] record2 = _get_record_slave(recid2, result, 'recid', uid) if result['resultCode'] != 0: #return in case of error return result # mark record2 as deleted record_add_field(record2, '980', ' ', ' ', '', [('c', 'DELETED')]) # mark record2 as duplicate of record1 record_add_field(record2, '970', ' ', ' ', '', [('d', str(recid1))]) # submit record2 to be deleted xml_record2 = record_xml_output(record2) save_xml_record(recid2, uid, xml_record2) #submit record1 xml_record1 = record_xml_output(record1) save_xml_record(recid1, uid, xml_record1) result['resultText'] = 'Records submitted' return result #submit record1 from cache save_xml_record(recid1, uid) # Delete cache file if it exists if cache_exists(recid1, uid): delete_cache_file(recid1, uid) result['resultText'] = 'Record submitted' return result elif requestType == 'cancel': delete_cache_file(recid1, uid) result['resultText'] = 'Cancelled' return result recid2 = data["recID2"] mode = data['record2Mode'] record2 = _get_record_slave(recid2, result, mode, uid) if result['resultCode'] != 0: #if record not accessible return error information return result if requestType == 'getRecordCompare': result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records compared' elif requestType == 'recCopy': copy_R2_to_R1(record1, record2) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Record copied' elif requestType == 'recMerge': merge_record(record1, record2, merge_conflicting_fields=True) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records merged' elif requestType == 'recMergeNC': merge_record(record1, record2, merge_conflicting_fields=False) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records merged' else: result['resultCode'], result['resultText'] = 1, 'Wrong request type' return result
def perform_request_record(requestType, uid, data): """Handle 'major' record related requests. Handle retrieving, submitting or cancelling the merging session. """ #TODO add checks before submission and cancel, replace get_bibrecord call result = {'resultCode': 0, 'resultText': ''} recid1 = data["recID1"] record1 = _get_record(recid1, uid, result) if result[ 'resultCode'] != 0: #if record not accessible return error information return result if requestType == 'submit': if 'duplicate' in data: recid2 = data['duplicate'] record2 = _get_record_slave(recid2, result, 'recid', uid) if result['resultCode'] != 0: #return in case of error return result (errcode, message) = check_doi_status_after_merge( data["recID1"], data['duplicate'], record1, record2, record2_marked_as_duplicate_p=data.has_key('duplicate'), submit_confirmed_p=data.get('additional_data', { 'confirmed_submit': False }).get('confirmed_submit', False)) if errcode: result['resultCode'] = errcode result['resultText'] = message return result # mark record2 as deleted record_add_field(record2, '980', ' ', ' ', '', [('c', 'DELETED')]) # mark record2 as duplicate of record1 record_add_field(record2, '970', ' ', ' ', '', [('d', str(recid1))]) # add recid of deleted record to master record record_add_field(record1, '981', ' ', ' ', '', [('a', str(recid2))]) # To ensure updates happen in order, use a seq id sequence_id = str(random.randrange(1, 4294967296)) # submit record2 to be deleted xml_record2 = record_xml_output(record2) save_xml_record(recid2, uid, xml_record2, task_name="bibmerge", sequence_id=sequence_id) # submit record1 xml_record1 = record_xml_output(record1) save_xml_record(recid1, uid, xml_record1, task_name="bibmerge", sequence_id=sequence_id) # Delete cache file if it exists if cache_exists(recid1, uid): delete_cache(recid1, uid) result['resultText'] = 'Records submitted' return result (errcode, message) = check_doi_status_after_merge( data["recID1"], data["recID2"], record1, None, submit_confirmed_p=data.get('additional_data', { 'confirmed_submit': False }).get('confirmed_submit', False)) if errcode: result['resultCode'] = errcode result['resultText'] = message return result #submit record1 from cache save_xml_record(recid1, uid, task_name="bibmerge") # Delete cache file if it exists if cache_exists(recid1, uid): delete_cache(recid1, uid) result['resultText'] = 'Record submitted' return result elif requestType == 'cancel': delete_cache(recid1, uid) result['resultText'] = 'Cancelled' return result recid2 = data["recID2"] mode = data['record2Mode'] record2 = _get_record_slave(recid2, result, mode, uid) if result[ 'resultCode'] != 0: #if record not accessible return error information return result if requestType == 'getRecordCompare': result['resultHtml'] = bibmerge_templates.BM_html_all_diff( record1, record2) result['resultText'] = 'Records compared' elif requestType == 'recCopy': copy_R2_to_R1(record1, record2) result['resultHtml'] = bibmerge_templates.BM_html_all_diff( record1, record2) result['resultText'] = 'Record copied' elif requestType == 'recMerge': merge_record(record1, record2, merge_conflicting_fields=True) result['resultHtml'] = bibmerge_templates.BM_html_all_diff( record1, record2) result['resultText'] = 'Records merged' elif requestType == 'recMergeNC': merge_record(record1, record2, merge_conflicting_fields=False) result['resultHtml'] = bibmerge_templates.BM_html_all_diff( record1, record2) result['resultText'] = 'Records merged' else: result['resultCode'], result['resultText'] = 1, 'Wrong request type' return result
def perform_request_record(requestType, uid, data): """Handle 'major' record related requests. Handle retrieving, submitting or cancelling the merging session. """ #TODO add checks before submission and cancel, replace get_bibrecord call result = { 'resultCode': 0, 'resultText': '' } recid1 = data["recID1"] record1 = _get_record(recid1, uid, result) if result['resultCode'] != 0: #if record not accessible return error information return result if requestType == 'submit': if 'duplicate' in data: recid2 = data['duplicate'] record2 = _get_record_slave(recid2, result, 'recid', uid) if result['resultCode'] != 0: #return in case of error return result (errcode, message) = check_doi_status_after_merge(data["recID1"], data['duplicate'], record1, record2, record2_marked_as_duplicate_p=data.has_key('duplicate'), submit_confirmed_p=data.get('additional_data', {'confirmed_submit': False}).get('confirmed_submit', False)) if errcode: result['resultCode'] = errcode result['resultText'] = message return result # mark record2 as deleted record_add_field(record2, '980', ' ', ' ', '', [('c', 'DELETED')]) # mark record2 as duplicate of record1 record_add_field(record2, '970', ' ', ' ', '', [('d', str(recid1))]) # add recid of deleted record to master record record_add_field(record1, '981', ' ', ' ', '', [('a', str(recid2))]) # To ensure updates happen in order, use a seq id sequence_id = str(random.randrange(1, 4294967296)) # submit record2 to be deleted xml_record2 = record_xml_output(record2) save_xml_record(recid2, uid, xml_record2, task_name="bibmerge", sequence_id=sequence_id) # submit record1 xml_record1 = record_xml_output(record1) save_xml_record(recid1, uid, xml_record1, task_name="bibmerge", sequence_id=sequence_id) # Delete cache file if it exists if cache_exists(recid1, uid): delete_cache(recid1, uid) result['resultText'] = 'Records submitted' return result (errcode, message) = check_doi_status_after_merge(data["recID1"], data["recID2"], record1, None, submit_confirmed_p=data.get('additional_data', {'confirmed_submit': False}).get('confirmed_submit', False)) if errcode: result['resultCode'] = errcode result['resultText'] = message return result #submit record1 from cache save_xml_record(recid1, uid, task_name="bibmerge") # Delete cache file if it exists if cache_exists(recid1, uid): delete_cache(recid1, uid) result['resultText'] = 'Record submitted' return result elif requestType == 'cancel': delete_cache(recid1, uid) result['resultText'] = 'Cancelled' return result recid2 = data["recID2"] mode = data['record2Mode'] record2 = _get_record_slave(recid2, result, mode, uid) if result['resultCode'] != 0: #if record not accessible return error information return result if requestType == 'getRecordCompare': result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records compared' elif requestType == 'recCopy': copy_R2_to_R1(record1, record2) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Record copied' elif requestType == 'recMerge': merge_record(record1, record2, merge_conflicting_fields=True) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records merged' elif requestType == 'recMergeNC': merge_record(record1, record2, merge_conflicting_fields=False) result['resultHtml'] = bibmerge_templates.BM_html_all_diff(record1, record2) result['resultText'] = 'Records merged' else: result['resultCode'], result['resultText'] = 1, 'Wrong request type' return result