def get(self, request, class_id): params = {} user = request.user c = class_exists(class_id) if c is None: params["message"] = f"Class with id {class_id} does not exist" params["status"] = 404 return Response(params, status=params["status"]) student, is_in_class = _is_student(user, c) teacher, teaches_class = _is_teacher(user, c) if is_in_class is True or teaches_class is True: print(c.teacher_set.all()) params["teacher(s)"] = [] for teach in c.teacher_set.all(): params["teacher(s)"].append(teach.user.last_name + ", " + teach.user.first_name) params["name"] = c.name params["droplet_image"] = c.droplet_image params["droplet_size"] = c.droplet_size params["droplet_region"] = c.droplet_region params["droplet_limit"] = c.droplet_student_limit if teaches_class is True: params["created_at"] = c.created_at params["prefix"] = c.prefix params["priv_net"] = c.droplet_priv_net params["ipv6"] = c.droplet_ipv6 params["user_data"] = c.droplet_user_data return Response(params, status=200)
def get(self, request, class_id): params = {} request_user = request.user user_data = get_user_role(request_user)[1] if user_data["is_student"] is False: params[ "message"] = "User is not a student, therefore cannot be enrolled in a class" params["status"] = 401 return Response(params, params["status"]) c = class_exists(class_id) if c is None: params["message"] = f"Class with id {class_id} does not exist" params["status"] = 404 return Response(params, status=params["status"]) if c in user_data["user"].classes.all(): params["message"] = "Student is enrolled." params["status"] = 200 else: params["message"] = "Student is not enrolled." params["status"] = 401 return Response(params, params["status"])
def post(self, request): params = {} class_id = request.data.get("id") class_obj = class_exists(class_id) if class_obj is None: params["message"] = f"Class with id {class_id} does not exist" params["status"] = 404 return Response(params, status=params["status"]) class_dict = model_to_dict(class_obj) # Droplet count not updating....why? class_dict.update(request.data) clas = ClassSerializer(class_obj, data=class_dict) if clas.is_valid() is True: class_obj_save = clas.save() params["status"] = 200 params["message"] = "Class was updated successfully" params["info"] = model_to_dict(class_obj_save) else: params[ "message"] = "Invalid parameters passed. You must data for every class field." params["status"] = 400 params["errors"] = clas.errors return Response(params, status=params.get("status", 200))
def get(self, request, class_id): params = {} request_user = request.user clas = class_exists(class_id) if clas is None: params["message"] = "Invalid class" params["status"] = 404 return Response(params, status=params["status"]) user_data = get_user_role(request_user, clas) if user_data[0] is False: return Response(user_data[1], status=user_data[1]["status"]) user_data = user_data[1] if ( user_data["is_in_class"] is not True and user_data["teaches_class"] is not True ): params[ "message" ] = "Only teachers of the class or students in the class can view droplet count" params["status"] = 403 return Response(params, status=params["status"]) droplets = Droplet.objects.filter(class_id=clas) params["droplet_count"] = len(droplets) return Response(params, status=params.get("status", 200))
def delete(self, request, class_id): params = {} class_obj = class_exists(class_id) if class_obj is None: params["message"] = "Invalid class" params["status"] = 404 return Response(params, status=params["status"]) class_obj.delete() params["message"] = "Class was successfully deleted" params["status"] = 200 return Response(params, status=params.get("status", 200))
def get(self, request, class_id): params = {} request_user = request.user clas = class_exists(class_id) if clas is None: params["message"] = "Invalid class" params["status"] = 404 return Response(params, status=params["status"]) user_data = get_user_role(request_user, clas) if user_data[0] is False: return Response(user_data[1], status=user_data[1]["status"]) user_data = user_data[1] user = user_data["user"] if user_data["is_teacher"] is not True: params["message"] = "Only teachers can view class droplets" params["status"] = 403 return Response(params, status=params["status"]) if user_data["teaches_class"] is not True: params["message"] = "Only official class teachers can view class droplets" params["status"] = 403 return Response(params, status=params["status"]) droplets = Droplet.objects.filter(class_id=clas) params["droplets"] = [] for droplet in droplets: params["droplets"].append( { "name": droplet.name, "owner": str(droplet.owner), "owner_email": droplet.owner.email, "owner_id": droplet.owner.id, "initial_password": droplet.initial_password, "ip_addr": droplet.ip_addr, "class": str(droplet.class_id), "class_id": droplet.class_id.id, "droplet_id": droplet.droplet_id, } ) return Response(params, status=params.get("status", 200))
def post(self, request): params = {} request_user = request.user class_id = request.data.get("class_id", None) passcode = request.data.get("passcode", None) if class_id is None or passcode is None: params["message"] = "Missing parameters class_id or passcode" params["status"] = 400 return Response(params, params["status"]) try: class_id = int(class_id) except ValueError: params["message"] = "class_id must be numerical" params["status"] = 400 return Response(params, params["status"]) c = class_exists(class_id) if c is None: params["message"] = f"Class with id {class_id} does not exist" params["status"] = 404 return Response(params, status=params["status"]) if c.allow_registration is False: params["message"] = "Class not configured for registration" params["status"] = 403 return Response(params, params["status"]) user_data = get_user_role(request_user, c)[1] print(user_data) if user_data["teaches_class"] is True: params[ "message"] = "User teaches this class, therefore cannot enroll" params["status"] = 401 return Response(params, params["status"]) if user_data["is_in_class"] is True: params["message"] = "User is already enrolled in this class" params["status"] = 401 return Response(params, params["status"]) if user_data["is_student"] is False: if user_data["user"] is None: student = Student.objects.create(user=request_user) student.classes.add(c) student.save() params["message"] = "User was enrolled in class" params["status"] = 200 elif user_data["is_teacher"] is True: student = Student.objects.create(user=user_data["user"].user) student.classes.add(c) student.save() params["message"] = "User was enrolled in class" params["status"] = 200 else: student = Student.objects.get(user=user_data["user"].user) student.classes.add(c) student.save() params["message"] = "User was enrolled in class" params["status"] = 200 return Response(params, params["status"])
def get( self, request, droplet_id, user_id, class_id, ): params = {} request_user = request.user user_data = get_user_role(request_user) if user_data[0] is False: return Response(user_data[1], status=user_data[1]["status"]) user_data = user_data[1] user = user_data["user"] if user_data["is_teacher"] is False: params["message"] = "Only Teachers can assign resources" params["status"] = 403 return Response(params, status=params["status"]) try: droplet = Droplet.objects.get(droplet_id=droplet_id) except Droplet.DoesNotExist: params["message"] = "Droplet does not exist" params["status"] = 404 return Response(params, status=params["status"]) user_is_student = False user_is_teacher = False student = None teacher = None try: usr = User.objects.get(id=user_id) except User.DoesNotExist: params["message"] = "Invalid user" params["status"] = 400 return Response(params, status=params["status"]) try: student = Student.objects.get(user=usr) user_is_student = True except Student.DoesNotExist: pass try: teacher = Teacher.objects.get(user=usr) user_is_teacher = True except Teacher.DoesNotExist: pass if user_is_student is False and user_is_teacher is False: params["message"] = "Invalid user" params["status"] = 404 return Response(params, status=params["status"]) clas = class_exists(class_id) if clas is None: params["message"] = "Invalid class" params["status"] = 404 return Response(params, status=params["status"]) if clas not in user.classes.all(): params["message"] = "Only the official class teacher can assign droplets" params["status"] = 403 return Response(params, status=params["status"]) recipient = None if teacher is None: recipient = student else: recipient = teacher if clas not in recipient.classes.all(): params["message"] = "Recipient is not in specified class" params["status"] = 400 return Response(params, status=params["status"]) droplet.owner = recipient.user droplet.save() params["message"] = "Droplet successfully reassigned" params["status"] = 200 return Response(params, status=params["status"])
def get(self, request, class_id, count=1): """ Create a droplet inside a specific class """ params = {} request_user = request.user user_data = get_user_role(request_user) # If user data is False then the user is neither a teacher or student # and cannot create a droplet. if user_data[0] is False: return Response(user_data[1], status=user_data[1]["status"]) user_data = user_data[1] user = user_data["user"] if count < 1 or count > 20: params[ "message" ] = "Invalid amount for count. Can't be less than 1 or greater than 20" params["status"] = 400 return Response(params, status=params["status"]) clas = class_exists(class_id) if clas is None: params["message"] = "Invalid class" params["status"] = 404 return Response(params, status=params["status"]) if clas in user.classes.all(): droplets = Droplet.objects.filter(owner=user.user, class_id=clas.id) if user_data["is_teacher"]: if count + len(droplets) > user.droplet_limit: params["status"] = 403 params["message"] = "Max number of droplets reached" return Response(params, status=params["status"]) else: if count + len(droplets) > clas.droplet_student_limit: params["status"] = 403 params["message"] = "Max number of droplets reached" return Response(params, status=params["status"]) params["droplets"] = [] for i in range(0, count): droplet = Droplet(owner=user.user, class_id=clas) droplet.save() droplet_info = model_to_dict(droplet) del droplet_info["image"] del droplet_info["id"] del droplet_info["owner"] droplet_info["class"] = droplet.class_id.name params["droplets"].append(droplet_info) params["droplet_count"] = count params["message"] = "Droplet(s) created" params["status"] = 200 # params["droplet-id"].append(droplet_id) else: params["message"] = "User is not in the class" params["status"] = 400 return Response(params, status=params["status"])