コード例 #1
0
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)."
                }]
            })
コード例 #2
0
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
コード例 #3
0
ファイル: api.py プロジェクト: HEPData/hepdata3
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."}]})
コード例 #4
0
ファイル: views.py プロジェクト: HEPData/hepdata3
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,
    )
コード例 #5
0
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