import os from flask_restful import Resource, request from app.api import mailsModels from app.model import * from app.utils import * class GroupAPI(Resource): """ Group Api Resource """ def post(self): args = request.get_json(cache=False, force=True) if not checkParams(['name', 'year', 'class_short', 'class_long', 'department', 'resp_id', 'sec_id'], args): return {"ERROR": "One or more parameters are missing !"}, 400 name = args['name'] year = args['year'] class_short = args['class_short'] class_long = args['class_long'] department = args['department'] resp_id = args['resp_id'] sec_id = args['sec_id'] res_dir = app.config['BASE_RESSOURCES_DIR'] + name + "/" group = getGroup(name=name) if group is not None: return {"GID": group["id"]}, 200 user = getUser(uid=resp_id) if user is None: return {"ERROR": "The user with id " + str(resp_id) + " does not exists !"}, 400 else: if "2" not in user['role'].split('-'): role = user['role'] + "-2" query = USER.update().values(role=role).where(USER.c.id == resp_id) query.execute() user = getUser(uid=sec_id) if user is None: return {"ERROR": "The user with id " + str(sec_id) + " does not exists !"}, 400 else: if "1" not in user['role'].split('-'): role = user['role'] + "-1" query = USER.update().values(role=role).where(USER.c.id == sec_id) query.execute() query = GROUP.insert().values(name=name, year=year, class_short=class_short, class_long=class_long, department=department, resp_id=resp_id, sec_id=sec_id, ressources_dir=res_dir) res = query.execute() os.mkdir(res_dir) return {"GID": res.lastrowid}, 201 def put(self, gid): args = request.get_json(cache=False, force=True) if not checkParams(['name', 'year', 'class_short', 'class_long', 'department', 'resp_id', 'sec_id'], args): return {"ERROR": "One or more parameters are missing !"}, 400 name = args['name'] year = args['year'] class_short = args['class_short'] class_long = args['class_long'] department = args['department'] resp_id = args['resp_id'] sec_id = args['sec_id'] res_dir = app.config['BASE_RESSOURCES_DIR'] + name + "/" group = getGroup(gid=gid) if group is None: return {"ERROR": "This group does not exists !"}, 405 group2 = getGroup(name=name) if group2 is not None: return {"ERROR": "A group with this name already exists !"}, 405 user = getUser(uid=resp_id) if user is None: return {"ERROR": "The user with id " + str(resp_id) + " does not exists !"}, 400 else: if "2" not in user['role'].split('-'): role = user['role'] + "-2" query = USER.update().values(role=role).where(USER.c.id == resp_id) query.execute() user = getUser(uid=sec_id) if user is None: return {"ERROR": "The user with id " + str(sec_id) + " does not exists !"}, 400 else: if "1" not in user['role'].split('-'): role = user['role'] + "-1" query = USER.update().values(role=role).where(USER.c.id == sec_id) query.execute() query = GROUP.update().values(name=name, year=year, class_short=class_short, class_long=class_long, department=department, resp_id=resp_id, sec_id=sec_id, ressources_dir=res_dir) \ .where(GROUP.c.id == gid) query.execute() if group["ressources_dir"] != res_dir: os.rename(group["ressources_dir"], res_dir) return {"GID": gid}, 200 def get(self, gid=0, name=""): if gid > 0: return {'GROUP': getGroup(gid=gid)}, 200 elif name != "": return {'GROUP': getGroup(name=name)}, 200 def options(self, gid): args = request.get_json(cache=False, force=True) if not checkParams(['pairs'], args): return {"ERROR": "One or more parameters are missing !"}, 400 pairs = args["pairs"] group = getGroup(gid=gid) if group is None: return {"ERROR": "This group does not exists !"}, 405 for p in pairs: try: stud = getUser(uid=p[0]) if stud is None: return {"ERROR": "The user with id " + str(p[0]) + " does not exists !"}, 400 elif stud['role'] != "4": return {"ERROR": "A student must have the 'student' role !"}, 400 tutor = getUser(uid=p[1]) if tutor is None: return {"ERROR": "The user with id " + str(p[1]) + " does not exists !"}, 400 elif tutor['role'] == "4": return {"ERROR": "A student can't be a tutor !"}, 400 elif "3" not in tutor['role'].split('-'): role = tutor['role'] + "-3" query = USER.update().values(role=role).where(USER.c.id == p[1]) query.execute() except IndexError: return {"ERROR": "Pairs are incorrectly formed !"}, 409 query = TUTORSHIP.insert().values(group_id=gid, student_id=p[0], ptutor_id=p[1]) query.execute() mail = mailsModels.getMailContent("NEW_TO_GROUP", {"GROUP": group["name"], "URL": "ola.univ-tlse2.fr/registration/" + get_random_string()}) send_mail(mail[0], stud["email"], mail[1]) return {"RESULT": "Pairs added successfully"}, 200