Source code for server.views_api.session

from flask import Blueprint, request, jsonify

from .. import db
from ..models import Session, User, Experiment
from .validations import get_session_metadata_errors
from ..functions import submit_session
from ..protections import user_required, admin_required, content_json

bp = Blueprint('session_api', __name__, url_prefix="/api")


[docs] @bp.route('/session', methods=['GET']) @user_required def get_all_sessions(): sessions = Session.query.all() return jsonify(sessions=[s.to_dict() for s in sessions]), 200
[docs] @bp.route('/session/<id_>', methods=['GET']) @user_required def get_session(id_): session = Session.by_id(id_) if not session: return jsonify(message="Session not found."), 404 return jsonify(session=session.to_dict()), 200
[docs] @bp.route('/session', methods=['POST']) @admin_required @content_json(["name", "begin", "end", "experiment"]) def create_session(): data = request.get_json() metadata = { "name": data["name"], "begin": data["begin"], "end": data["end"], } experiment = Experiment.by_id(data["experiment"]) users = list(map(User.by_id, data.get("users", []))) errors = dict(get_session_metadata_errors(**metadata)) if not experiment: errors["experiment"] = "Invalid experiment id" if not all(users): errors["users"] = "One or more invalid user ids" if not errors: session = submit_session(**metadata, experiment=experiment, users=users) return jsonify(message="Session '{}' created.".format(session.name), session=session.to_dict()), 201 else: return jsonify(message="Session creation failed.", errors=errors), 400
[docs] @bp.route('/session/<id_>', methods=['DELETE']) @admin_required def delete_session(id_): session = Session.by_id(id_) if not session: return jsonify(message="Session not found."), 404 db.session.delete(session) db.session.commit() return jsonify(message="Session '{}' has been deleted.".format(session.name)), 200
[docs] @bp.route('/session/<id_>', methods=['PATCH']) @admin_required @content_json([]) def modify_session(id_): session = Session.by_id(id_) if not session: return jsonify(message="Session not found."), 404 data = request.get_json() metadata = { "name": data.get("name", session.name), "begin": data.get("begin", session.begin), "end": data.get("end", session.end), } experiment = Experiment.by_id(data["experiment"]) if "experiment" in data else session.experiment users = list(map(User.by_id, data["users"])) if "users" in data else session.users errors = dict(get_session_metadata_errors(**metadata)) if not experiment: errors["experiment"] = "Invalid experiment id" if not all(users): errors["users"] = "One or more invalid user ids" if not errors: submit_session(**metadata, users=users, experiment=experiment, replace=session) return jsonify(message="Session '{}' modified.".format(session.name)), 200 else: return jsonify(message="Session modification failed.", errors=errors), 400