def delete_submission(recid): """ Submissions can only be removed if they are not finalised, meaning they should never be in the index. Only delete the latest version of a submission. Delete indexed information only if version = 1. :param recid: :return: """ if has_role(current_user, 'admin') or has_role(current_user, 'coordinator') \ or check_is_sandbox_record(recid): submission = get_latest_hepsubmission(publication_recid=recid) unload_submission(recid, submission.version) if submission.version == 1: admin_idx = AdminIndexer() admin_idx.find_and_delete('recid', recid) return json.dumps({"success": True, "recid": recid, "errors": [ "Record successfully removed!"]}) else: return json.dumps( {"success": False, "recid": recid, "errors": [ "You do not have permission to delete this submission. " "Only coordinators can do that."]})
def remove_submission(record_id): """ Removes the database entries related to a record. :param record_id: :return: True if Successful, False if the record does not exist. """ hepdata_submissions = HEPSubmission.query.filter_by( publication_recid=record_id).all() try: try: for hepdata_submission in hepdata_submissions: db.session.delete(hepdata_submission) except NoResultFound as nrf: print(nrf.args) admin_idx = AdminIndexer() admin_idx.find_and_delete(term=record_id, fields=['recid']) submissions = DataSubmission.query.filter_by( publication_recid=record_id).all() reviews = DataReview.query.filter_by(publication_recid=record_id).all() for review in reviews: db.session.delete(review) for submission in submissions: resource = DataResource.query.filter_by( id=submission.data_file).first() db.session.delete(submission) if resource: db.session.delete(resource) try: SubmissionParticipant.query.filter_by( publication_recid=record_id).delete() except Exception: print("Unable to find a submission participant for {0}".format( record_id)) try: record = get_record_by_id(record_id) data_records = get_records_matching_field('related_publication', record_id, doc_type=CFG_DATA_TYPE) if 'hits' in data_records: for data_record in data_records['hits']['hits']: data_record_obj = get_record_by_id( data_record['_source']['recid']) if data_record_obj: data_record_obj.delete() if record: record.delete() except PIDDoesNotExistError as e: print( 'No record entry exists for {0}. Proceeding to delete other files.' .format(record_id)) db.session.commit() db.session.flush() return True except Exception as e: db.session.rollback() raise e