示例#1
0
    def post(self):
        data = request.get_json()
        user = UserModel.get_by_username(get_jwt_identity())
        if not user.is_admin:
            return {MESSAGE: "admin privilege required"}, 400
        if not data or CLASSROOM_NAME not in data:
            return {MESSAGE: "invalid data"}, 400
        if ClassroomModel.get_by_classroom_name(data[CLASSROOM_NAME]):
            return {MESSAGE: "A classroom with that name already exists"}, 400

        vjudge_username = {}
        for username in data["user_list"]:
            user = UserModel.get_by_username(username)
            if not user:
                return {MESSAGE: "user not found"}, 404
            try:
                vjudge_handle = OjModel.get_by_username(
                    username).oj_info["VJudge"]["username"]
            except:
                continue
            vjudge_username[username] = vjudge_handle

        data["user_details"] = {"vjudge_username": vjudge_username}
        classroom = ClassroomModel(**data)
        classroom.save_to_mongo()
        threading.Thread(target=update_students, args=[classroom]).start()
        return {MESSAGE: "Classroom created successfully."}, 201
示例#2
0
    def put(self):
        user = UserModel.get_by_username(get_jwt_identity())
        data = request.get_json()
        if not user or not user.is_admin:
            return {MESSAGE: "admin privilege required"}, 400

        if not data or CLASSROOM_NAME not in data:
            return {MESSAGE: "invalid data"}, 400

        classroom = ClassroomModel.get_by_classroom_name(data[CLASSROOM_NAME])
        if not classroom:
            return {MESSAGE: "classroom not found"}, 404

        vjudge_username = {}
        for username in data["user_list"]:
            user = UserModel.get_by_username(username)
            if not user:
                return {MESSAGE: "user not found"}, 404
            try:
                vjudge_handle = OjModel.get_by_username(
                    username).oj_info["VJudge"]["username"]
            except:
                continue
            vjudge_username[username] = vjudge_handle

        data["user_details"] = {"vjudge_username": vjudge_username}
        classroom.update_to_mongo(data)
        classroom = ClassroomModel.get_by_classroom_name(data[CLASSROOM_NAME])
        threading.Thread(target=update_students, args=[classroom]).start()
        return {MESSAGE: "data updated"}, 200
示例#3
0
def update_everything():
    print("start_updating")
    blacklist.remove_old_tokens()
    update_all_users()
    classroom_list = ClassroomModel.get_all_classrooms()
    for classroom in classroom_list:
        update_students(ClassroomModel(**classroom))
    update_contest_data_formatted()
    print("done_updating")
示例#4
0
 def post(self):
     user = UserModel.get_by_username(get_jwt_identity())
     data = request.get_json()
     if not data or data == {}:
         classroom_list = ClassroomModel.get_all_classrooms()
         return {
             "classroom_list": classroom_list,
             "edit_access": user.is_admin
         }, 200
     elif CLASSROOM_NAME in data:
         classroom = ClassroomModel.get_by_classroom_name(
             data[CLASSROOM_NAME])
         if classroom:
             return classroom.json(), 200
         else:
             return {MESSAGE: "classroom not found"}, 404
     else:
         return {MESSAGE: "invalid data"}, 400
示例#5
0
    def delete(self):
        user = UserModel.get_by_username(get_jwt_identity())
        data = request.get_json()
        if not user.is_admin:
            return {MESSAGE: "admin privilege required"}, 400

        if not ClassroomModel.remove({CLASSROOM_NAME: data[CLASSROOM_NAME]}):
            return {MESSAGE: "invalid data"}, 400
        else:
            StudentModel.remove({CLASSROOM_NAME: data[CLASSROOM_NAME]})
            return {MESSAGE: "classroom deleted"}, 200
示例#6
0
def update_contest_data_formatted():
    classroom_list = ClassroomModel.get_all_classrooms()
    contest_id_set = set()
    for classroom in classroom_list:
        for contest in classroom["vjudge_contest_list"]:
            contest_id_set.add(contest[CONTEST_ID])
    contest_data = {}
    for contest_id in contest_id_set:
        contest_data[
            contest_id] = vjudge_sraper.get_contest_details_data_formatted(
                contest_id)
    ContestDataModel.update_contest_data(
        updated_on=datetime.datetime.today().timestamp(), data=contest_data)
示例#7
0
    def post(self):
        user = UserModel.get_by_username(get_jwt_identity())
        if not user.is_admin:
            return {MESSAGE: "admin privilege required"}, 400

        data = request.get_json()
        if CLASSROOM_NAME not in data:
            return {MESSAGE: "invalid data"}, 400
        classroom = ClassroomModel.get_by_classroom_name(data[CLASSROOM_NAME])
        if not classroom:
            return {MESSAGE: "classroom not found"}, 404

        threading.Thread(target=update_students, args=[classroom]).start()
        return {MESSAGE: "Classroom data is being updated"}, 200
    def post(self):
        data = request.get_json()
        username = get_jwt_identity()
        if data and USERNAME in data:
            username = data[USERNAME]
        classroom_name = ""
        if "classroom_name" in data:
            classroom_name = data["classroom_name"]
        else:
            classroom_list = ClassroomModel.get_all_classrooms({})
            # print(username, classroom_list)
            for classroom in classroom_list:
                if username not in classroom["user_list"]:
                    continue
                curr_name = classroom["classroom_name"]
                if curr_name == "rated":
                    classroom_name = curr_name
                    break
                else:
                    if classroom_name == "":
                        classroom_name = curr_name
                    else:
                        if int(curr_name[1, len(curr_name) - 1]) > int(
                                classroom_name[1, len(classroom_name) - 1]):
                            classroom_name = curr_name
        student = StudentModel.get_by_username_and_classroom_name(
            username, classroom_name)
        if not student:
            return {MESSAGE: "no data found"}, 404

        res = student.json()

        vjudge_username = OjModel.get_vjudge_username(username)
        if not vjudge_username:
            return res, 200

        contest_data = ContestDataModel.get_vjudge_contest_data()
        last_day_solve = get_last_day_solve(contest_data.data, vjudge_username)
        last_30_days_solve = get_last_30_days_solve(contest_data.data,
                                                    vjudge_username)
        todo_list = get_todos(username, classroom_name)
        announcement_list = get_announcements(username, classroom_name)

        res["last_day_solve"] = last_day_solve
        res["last_30_days_solve"] = last_30_days_solve
        res["todo_list"] = todo_list
        res["announcement_list"] = announcement_list
        return res, 200
示例#9
0
 def post(self):
     data = request.get_json()
     if CLASSROOM_NAME not in data:
         return {MESSAGE: "invalid data"}, 400
     classroom = ClassroomModel.get_by_classroom_name(data[CLASSROOM_NAME])
     user_list = classroom.user_list
     vjudge_contest_list = classroom.vjudge_contest_list
     if "contest_type" in data and data["contest_type"] != "all":
         vjudge_contest_list = list(
             filter(
                 lambda contest: contest["contest_type"] == data[
                     "contest_type"], vjudge_contest_list))
     start_time = data["start_time"] if "start_time" in data else -INF
     end_time = data["end_time"] if "end_time" in data else INF
     return solve_updater.get_rank_list_from_db(user_list,
                                                vjudge_contest_list,
                                                start_time, end_time), 200
示例#10
0
def test():
    database.Database.initialize()
    classroom = ClassroomModel.get_by_classroom_name("Rated")
    update_students(classroom)