Esempio n. 1
0
def sandbox_display(id):

    hepdata_submission = HEPSubmission.query.filter(
        HEPSubmission.publication_recid == id,
        or_(HEPSubmission.overall_status == 'sandbox',
            HEPSubmission.overall_status == 'sandbox_processing')).first()

    if hepdata_submission is not None:
        if hepdata_submission.overall_status == 'sandbox_processing':
            ctx = {'recid': id}
            determine_user_privileges(id, ctx)
            return render_template(
                'hepdata_records/publication_processing.html', ctx=ctx)
        else:
            ctx = format_submission(id, None, 1, 1, hepdata_submission)
            ctx['mode'] = 'sandbox'
            ctx['show_review_widget'] = False
            increment(id)
            return render_template('hepdata_records/sandbox.html', ctx=ctx)

    else:
        return render_template('hepdata_records/error_page.html',
                               recid=None,
                               message="No submission exists with that ID.",
                               errors={})
Esempio n. 2
0
def test_stats(app):
    increment(1)
    assert (get_count(1)['sum'] == 1)

    increment(1)
    assert (get_count(1)['sum'] == 2)

    # in case of failure, this always returns 1
    assert (get_count(1999)['sum'] == 1)
Esempio n. 3
0
def sandbox_display(id):
    hepdata_submission = HEPSubmission.query.filter_by(publication_recid=id).first()

    if hepdata_submission is not None:
        ctx = format_submission(id, None, 1, 1, hepdata_submission)
        ctx["mode"] = "sandbox"
        ctx["show_review_widget"] = False
        increment(id)
        return render_template("hepdata_records/sandbox.html", ctx=ctx)
    else:
        return render_template(
            "hepdata_records/error_page.html", recid=None, message="No submission exists with that ID.", errors={}
        )
Esempio n. 4
0
def sandbox_display(id):
    hepdata_submission = HEPSubmission.query.filter_by(
        publication_recid=id).first()

    if hepdata_submission is not None:
        ctx = format_submission(id, None, 1, 1, hepdata_submission)
        ctx['mode'] = 'sandbox'
        ctx['show_review_widget'] = False
        increment(id)
        return render_template('hepdata_records/sandbox.html', ctx=ctx)
    else:
        return render_template('hepdata_records/error_page.html', recid=None,
                               message="No submission exists with that ID.",
                               errors={})
Esempio n. 5
0
def render_record(recid, record, version, output_format, light_mode=False):

    if user_allowed_to_perform_action(recid):
        version_count = HEPSubmission.query.filter_by(
            publication_recid=recid).count()
    else:
        version_count = HEPSubmission.query.filter_by(
            publication_recid=recid, overall_status='finished').count()

    if version == -1:
        version = version_count

    hepdata_submission = get_latest_hepsubmission(publication_recid=recid, version=version)

    if hepdata_submission is not None:
        ctx = format_submission(recid, record, version, version_count, hepdata_submission)
        increment(recid)
        if output_format == "json":
            ctx = process_ctx(ctx, light_mode)
            return jsonify(ctx)
        else:
            return render_template('hepdata_records/publication_record.html',
                                   ctx=ctx)

    else:  # this happens when we access an id of a data record
        # in which case, we find the related publication, and
        # make the front end focus on the relevant data table.
        try:
            publication_recid = int(record['related_publication'])
            publication_record = get_record_contents(publication_recid)

            hepdata_submission = get_latest_hepsubmission(recid=publication_recid)

            ctx = format_submission(publication_recid, publication_record,
                                    hepdata_submission.version, 1, hepdata_submission,
                                    data_table=record['title'])
            ctx['related_publication_id'] = publication_recid
            ctx['table_name'] = record['title']

            if output_format == "json":
                ctx = process_ctx(ctx, light_mode)

                return jsonify(ctx)
            else:
                return render_template('hepdata_records/data_record.html', ctx=ctx)
        except Exception:
            return render_template('hepdata_theme/404.html')
Esempio n. 6
0
def render_record(recid, record, version, output_format, light_mode=False):

    # Count number of all versions and number of finished versions of a publication record.
    version_count_all = HEPSubmission.query.filter(
        HEPSubmission.publication_recid == recid,
        HEPSubmission.overall_status != 'sandbox').count()
    version_count_finished = HEPSubmission.query.filter_by(
        publication_recid=recid, overall_status='finished').count()

    # Number of versions that a user is allowed to access based on their permissions.
    version_count = version_count_all if user_allowed_to_perform_action(
        recid) else version_count_finished

    # If version not given explicitly, take to be latest allowed version (or 1 if there are no allowed versions).
    if version == -1:
        version = version_count if version_count else 1

    # Check for a user trying to access a version of a publication record where they don't have permissions.
    if version_count < version_count_all and version == version_count_all:
        # Prompt the user to login if they are not authenticated then redirect, otherwise return a 403 error.
        if not current_user.is_authenticated:
            redirect_url_after_login = '******'.format(
                recid, version, output_format)
            if 'table' in request.args:
                redirect_url_after_login += '%26table%3D{0}'.format(
                    request.args['table'])
            return redirect(
                '/login/?next={0}'.format(redirect_url_after_login))
        else:
            abort(403)

    hepdata_submission = get_latest_hepsubmission(publication_recid=recid,
                                                  version=version)

    if hepdata_submission is not None:
        if hepdata_submission.overall_status != 'sandbox':
            ctx = format_submission(recid, record, version, version_count,
                                    hepdata_submission)
            increment(recid)

            if output_format == 'html':
                return render_template(
                    'hepdata_records/publication_record.html', ctx=ctx)
            elif 'table' not in request.args:
                if output_format == 'json':
                    ctx = process_ctx(ctx, light_mode)
                    return jsonify(ctx)
                elif output_format == 'yoda' and 'rivet' in request.args:
                    return redirect(
                        '/download/submission/{0}/{1}/{2}/{3}'.format(
                            recid, version, output_format,
                            request.args['rivet']))
                else:
                    return redirect('/download/submission/{0}/{1}/{2}'.format(
                        recid, version, output_format))
            else:
                file_identifier = 'ins{}'.format(
                    hepdata_submission.inspire_id
                ) if hepdata_submission.inspire_id else recid
                if output_format == 'yoda' and 'rivet' in request.args:
                    return redirect(
                        '/download/table/{0}/{1}/{2}/{3}/{4}'.format(
                            file_identifier, request.args['table'].replace(
                                '%', '%25').replace('\\', '%5C'), version,
                            output_format, request.args['rivet']))
                else:
                    return redirect('/download/table/{0}/{1}/{2}/{3}'.format(
                        file_identifier, request.args['table'].replace(
                            '%', '%25').replace('\\', '%5C'), version,
                        output_format))
        else:
            abort(404)

    elif record is not None:  # this happens when we access an id of a data record
        # in which case, we find the related publication, and
        # make the front end focus on the relevant data table.
        try:
            publication_recid = int(record['related_publication'])
            publication_record = get_record_contents(publication_recid)

            hepdata_submission = get_latest_hepsubmission(
                publication_recid=publication_recid)

            ctx = format_submission(publication_recid,
                                    publication_record,
                                    hepdata_submission.version,
                                    1,
                                    hepdata_submission,
                                    data_table=record['title'])
            ctx['related_publication_id'] = publication_recid
            ctx['table_name'] = record['title']

            if output_format == 'html':
                return render_template('hepdata_records/data_record.html',
                                       ctx=ctx)
            elif output_format == 'yoda' and 'rivet' in request.args:
                return redirect('/download/table/{0}/{1}/{2}/{3}/{4}'.format(
                    publication_recid,
                    ctx['table_name'].replace('%', '%25').replace('\\', '%5C'),
                    hepdata_submission.version, output_format,
                    request.args['rivet']))
            else:
                return redirect('/download/table/{0}/{1}/{2}/{3}'.format(
                    publication_recid,
                    ctx['table_name'].replace('%', '%25').replace('\\', '%5C'),
                    hepdata_submission.version, output_format))

        except Exception as e:
            abort(404)
    else:
        abort(404)
Esempio n. 7
0
def render_record(recid, record, version, output_format, light_mode=False):
    if user_allowed_to_perform_action(recid):
        version_count = HEPSubmission.query.filter_by(
            publication_recid=recid).count()
    else:
        version_count = HEPSubmission.query.filter_by(
            publication_recid=recid, overall_status='finished').count()

    if version == -1:
        version = version_count

    hepdata_submission = get_latest_hepsubmission(publication_recid=recid,
                                                  version=version)

    if hepdata_submission is not None:
        ctx = format_submission(recid, record, version, version_count,
                                hepdata_submission)
        increment(recid)

        if output_format == 'html':
            return render_template('hepdata_records/publication_record.html',
                                   ctx=ctx)
        elif 'table' not in request.args:
            if output_format == 'json':
                ctx = process_ctx(ctx, light_mode)
                return jsonify(ctx)
            else:
                return redirect('/download/submission/{0}/{1}/{2}'.format(
                    recid, version, output_format))
        else:
            file_identifier = 'ins{}'.format(
                hepdata_submission.inspire_id
            ) if hepdata_submission.inspire_id else recid
            return redirect('/download/table/{0}/{1}/{2}/{3}'.format(
                file_identifier, request.args['table'], version,
                output_format))

    elif record is not None:  # this happens when we access an id of a data record
        # in which case, we find the related publication, and
        # make the front end focus on the relevant data table.
        try:
            publication_recid = int(record['related_publication'])
            publication_record = get_record_contents(publication_recid)

            hepdata_submission = get_latest_hepsubmission(
                publication_recid=publication_recid)

            ctx = format_submission(publication_recid,
                                    publication_record,
                                    hepdata_submission.version,
                                    1,
                                    hepdata_submission,
                                    data_table=record['title'])
            ctx['related_publication_id'] = publication_recid
            ctx['table_name'] = record['title']

            if output_format == 'html':
                return render_template('hepdata_records/data_record.html',
                                       ctx=ctx)
            else:
                return redirect('/download/table/{0}/{1}/{2}/{3}'.format(
                    publication_recid, ctx['table_name'],
                    hepdata_submission.version, output_format))

        except Exception as e:
            raise e
            return render_template('hepdata_theme/404.html')
    else:
        return render_template('hepdata_theme/404.html')