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
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)
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)
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)