def process_payload(recid, file, redirect_url): if file and (allowed_file(file.filename)): errors = process_zip_archive(file, recid) if errors: return render_template('hepdata_records/error_page.html', redirect_url=redirect_url.format(recid), errors=errors) else: update_action_for_submission_participant(recid, current_user.get_id(), 'uploader') return redirect(redirect_url.format(recid)) else: return render_template( 'hepdata_records/error_page.html', redirect_url=redirect_url.format(recid), message="Incorrect file type uploaded.", errors={ "Submission": [{ "level": "error", "message": "You must upload a .zip, .tar, .tar.gz or .tgz file" + " (or a .oldhepdata or single .yaml file)." }] })
def add_data_review_messsage(publication_recid, data_recid): """ Adds a new review message for a data submission. :param publication_recid: :param data_recid: """ trace = [] message = encode_string(request.form.get('message', '')) version = request.form['version'] userid = current_user.get_id() try: datareview_query = DataReview.query.filter_by(data_recid=data_recid, version=version) # if the data review is not already created, create one. try: data_review_record = datareview_query.one() trace.append("adding data review record") except: data_review_record = create_data_review(data_recid, publication_recid) trace.append("created a new data review record") data_review_message = Message(user=userid, message=message) data_review_record.messages.append(data_review_message) db.session.commit() current_user_obj = get_user_from_id(userid) update_action_for_submission_participant(publication_recid, userid, 'reviewer') send_new_review_message_email(data_review_record, data_review_message, current_user_obj) return json.dumps( { "publication_recid": data_review_record.publication_recid, "data_recid": data_review_record.data_recid, "status": data_review_record.status, "message": decode_string(data_review_message.message), "post_time": data_review_message.creation_date, 'user': current_user_obj.email }, default=default_time) except Exception as e: db.session.rollback() raise e
def process_payload(recid, file, redirect_url): if file and (allowed_file(file.filename)): errors = process_zip_archive(file, recid) if errors: remove_submission(recid) return render_template('hepdata_records/error_page.html', recid=None, errors=errors) else: update_action_for_submission_participant(recid, current_user.get_id(), 'uploader') return redirect(redirect_url.format(recid)) else: return render_template('hepdata_records/error_page.html', recid=recid, message="Incorrect file type uploaded.", errors={"Submission": [{"level": "error", "message": "You must upload a .zip, .tar, or .tar.gz file."}]})
def add_data_review_messsage(publication_recid, data_recid): # need to set up a session and query for the data review. trace = [] message = request.form["message"] version = request.form["version"] userid = current_user.get_id() datareview_query = DataReview.query.filter_by(data_recid=data_recid, version=version) # if the data review is not already created, create one. try: data_review_record = datareview_query.one() trace.append("adding data review record") except: data_review_record = create_data_review(data_recid, publication_recid) trace.append("created a new data review record") data_review_message = Message(user=userid, message=message) data_review_record.messages.append(data_review_message) db.session.commit() current_user_obj = get_user_from_id(userid) update_action_for_submission_participant(publication_recid, userid, "reviewer") send_new_review_message_email(data_review_record, data_review_message, current_user_obj) return json.dumps( { "publication_recid": data_review_record.publication_recid, "data_recid": data_review_record.data_recid, "status": data_review_record.status, "message": data_review_message.message, "post_time": data_review_message.creation_date, "user": current_user_obj.email, }, default=default_time, )
def process_saved_file(file_path, recid, userid, redirect_url, previous_status): try: hepsubmission = get_latest_hepsubmission(publication_recid=recid) if hepsubmission.overall_status != 'processing' and hepsubmission.overall_status != 'sandbox_processing': log.error('Record {} is not in a processing state.'.format(recid)) return errors = process_zip_archive(file_path, recid) uploader = User.query.get(userid) site_url = current_app.config.get('SITE_URL', 'https://www.hepdata.net') submission_participant = SubmissionParticipant.query.filter_by( publication_recid=recid, user_account=userid, role='uploader').first() if submission_participant: full_name = submission_participant.full_name else: full_name = uploader.email if errors: cleanup_submission(recid, hepsubmission.version, []) # delete all tables if errors message_body = render_template('hepdata_theme/email/upload_errors.html', name=full_name, article=recid, redirect_url=redirect_url.format(recid), errors=errors, site_url=site_url) create_send_email_task(uploader.email, '[HEPData] Submission {0} upload failed'.format(recid), message_body) else: update_action_for_submission_participant(recid, userid, 'uploader') message_body = render_template('hepdata_theme/email/upload_complete.html', name=full_name, article=recid, link=redirect_url.format(recid), site_url=site_url) create_send_email_task(uploader.email, '[HEPData] Submission {0} upload succeeded'.format(recid), message_body) # Reset the status of the submission back to the previous value. hepsubmission.overall_status = previous_status db.session.add(hepsubmission) db.session.commit() # Delete any previous upload folders relating to non-final versions # of this hepsubmission cleanup_old_files(hepsubmission) except Exception as e: # Reset the status and send error emails, unless we're working # asynchronously and celery is about to retry if not process_saved_file.request.id \ or process_saved_file.request.retries >= process_saved_file.max_retries: try: cleanup_submission(recid, hepsubmission.version, []) errors = { "Unexpected error": [{ "level": "error", "message": "An unexpected error occurred: {}".format(e) }] } uploader = User.query.get(userid) site_url = current_app.config.get('SITE_URL', 'https://www.hepdata.net') message_body = render_template('hepdata_theme/email/upload_errors.html', name=uploader.email, article=recid, redirect_url=redirect_url.format(recid), errors=errors, site_url=site_url) create_send_email_task(uploader.email, '[HEPData] Submission {0} upload failed'.format(recid), message_body) log.error("Final attempt of process_saved_file for recid %s failed. Resetting to previous status." % recid) # Reset the status of the submission back to the previous value. hepsubmission.overall_status = previous_status db.session.add(hepsubmission) db.session.commit() except Exception as ex: log.error("Exception while cleaning up: %s" % ex) else: log.debug("Celery will retry task, attempt %s" % process_saved_file.request.retries) raise e