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
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
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")
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
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
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)
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
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
def test(): database.Database.initialize() classroom = ClassroomModel.get_by_classroom_name("Rated") update_students(classroom)