Example #1
0
def lab(category_name, experiment_name):
    """
    Renders a specific laboratory.
    """
    try:
        experiment_list = weblab_api.api.list_experiments(experiment_name, category_name)

        experiment = None
        for exp_allowed in experiment_list:
            if exp_allowed.experiment.name == experiment_name and exp_allowed.experiment.category.name == category_name:
                experiment = _get_experiment(exp_allowed)

        if experiment is None:
            # TODO: check what to do in case there is no session_id (e.g., federated mode)
            if weblab_api.db.check_experiment_exists(experiment_name, category_name):
                flash(gettext("You don't have permission on this laboratory"), 'danger')
            else:
                flash(gettext("Experiment does not exist"), 'danger')
            return redirect(url_for('.labs'))

        # Get the target URL for the JS API.
        lab_url = url_for(".static", filename="")

        return render_template("webclient/lab.html", experiment=experiment, lab_url=lab_url)
    except Exception as ex:
        raise
Example #2
0
def lab(category_name, experiment_name):
    """
    Renders a specific laboratory.
    """
    federated_reservation_id = session.get('reservation_id')
    federated_mode = federated_reservation_id is not None
    if federated_mode:
        back_url = session.get('back_url')
    else:
        back_url = None

    experiment = None
    if federated_mode:
        finished = request.args.get('finished', 'false').lower() == 'true'
        if finished:
            return render_template("webclient/error.html", error_level='info', error_message = gettext("You have finished using this experiment."), federated_mode = True, back_url = back_url)
            
        weblab_api.ctx.reservation_id = federated_reservation_id
        # Now obtain the current experiment
        try:
            experiment = _get_experiment_data(weblab_api.api.get_reservation_experiment_info())
            reservation_status = weblab_api.api.get_reservation_status()
        except SessionNotFoundError:
            session.pop('reservation_id', None)
            session.pop('back_url', None)
            federated_mode = False

            # Check if the user has a valid session (it may happen that this comes from an old reservation_id)
            try:
                experiment_list = weblab_api.api.list_experiments(experiment_name, category_name)
            except SessionNotFoundError:
                return render_template("webclient/error.html", error_message = gettext("Your use has finished."), federated_mode = True, back_url = back_url)
        else:
            if experiment is not None and reservation_status is not None and experiment['type'] == 'redirect':
                if reservation_status.status == Reservation.CONFIRMED:
                    local_url = reservation_status.url
                    if local_url is not None:
                        return redirect(local_url.replace("TIME_REMAINING", unicode(local_url.time)))

    if experiment is None:
        try:
            experiment_list = weblab_api.api.list_experiments(experiment_name, category_name)
        except SessionNotFoundError:
            flash(gettext("You are not logged in"), 'danger')
            return redirect(url_for('.login', next=request.url))

        for exp_allowed in experiment_list:
            if exp_allowed.experiment.name == experiment_name and exp_allowed.experiment.category.name == category_name:
                experiment = _get_experiment(exp_allowed)

        if experiment is None:
            # TODO: check what to do in case there is no session_id (e.g., federated mode)
            if weblab_api.db.check_experiment_exists(experiment_name, category_name):
                flash(gettext("You don't have permission on this laboratory"), 'danger')
            else:
                flash(gettext("Experiment does not exist"), 'danger')
            return redirect(url_for('.labs'))

    return render_template("webclient/lab.html", experiment=experiment, federated_mode = federated_mode, back_url = back_url, federated_reservation_id = federated_reservation_id)
Example #3
0
def lab(category_name, experiment_name):
    """
    Renders a specific laboratory.
    """
    federated_reservation_id = session.get('reservation_id')
    federated_mode = federated_reservation_id is not None
    if federated_mode:
        back_url = session.get('back_url')
    else:
        back_url = None

    experiment = None
    if federated_mode:
        weblab_api.ctx.reservation_id = federated_reservation_id
        # Now obtain the current experiment
        try:
            experiment = _get_experiment_data(weblab_api.api.get_reservation_experiment_info())
            reservation_status = weblab_api.api.get_reservation_status()
        except SessionNotFoundError:
            session.pop('reservation_id', None)
            session.pop('back_url', None)
            federated_mode = False

            # Check if the user has a valid session (it may happen that this comes from an old reservation_id)
            try:
                experiment_list = weblab_api.api.list_experiments(experiment_name, category_name)
            except SessionNotFoundError:
                return render_template("webclient/error.html", error_message = gettext("The reservation you used has expired."), federated_mode = True, back_url = back_url)
        else:
            if experiment is not None and reservation_status is not None and experiment['type'] == 'redirect':
                if reservation_status.status == Reservation.CONFIRMED:
                    local_url = reservation_status.url
                    if local_url is not None:
                        return redirect(local_url.replace("TIME_REMAINING", unicode(local_url.time)))

    if experiment is None:
        try:
            experiment_list = weblab_api.api.list_experiments(experiment_name, category_name)
        except SessionNotFoundError:
            flash(gettext("You are not logged in"), 'danger')
            return redirect(url_for('.login', next=request.url))

        for exp_allowed in experiment_list:
            if exp_allowed.experiment.name == experiment_name and exp_allowed.experiment.category.name == category_name:
                experiment = _get_experiment(exp_allowed)

        if experiment is None:
            # TODO: check what to do in case there is no session_id (e.g., federated mode)
            if weblab_api.db.check_experiment_exists(experiment_name, category_name):
                flash(gettext("You don't have permission on this laboratory"), 'danger')
            else:
                flash(gettext("Experiment does not exist"), 'danger')
            return redirect(url_for('.labs'))

    return render_template("webclient/lab.html", experiment=experiment, federated_mode = federated_mode, back_url = back_url, federated_reservation_id = federated_reservation_id)
Example #4
0
def labs_json():
    experiments_raw = weblab_api.api.list_experiments()
    experiments = [_get_experiment(raw_exp) for raw_exp in experiments_raw]
    return weblab_api.jsonify(experiments=experiments)
Example #5
0
def labs_json():
    experiments_raw = weblab_api.api.list_experiments()
    experiments = [_get_experiment(raw_exp) for raw_exp in experiments_raw]
    return weblab_api.jsonify(experiments=experiments)