def test_user_exercise_model(self): """Test adding exercises to a user's exercises functionality.""" # Create test exercises e1 = Exercise(name="Bench Press", description="Chest exercise", category_id=10) e1.id = 500 e2 = Exercise(name="Triceps Pushdown", description="Triceps exercise", category_id=11) e2.id = 501 # Create test user u = User.register("testing1", "password", "*****@*****.**", "John", "Doe", None) u.id = 777 db.session.add_all([e1, e2]) ue1 = UserExercise(user_id=u.id, exercise_id=e1.id) ue2 = UserExercise(user_id=u.id, exercise_id=e2.id) db.session.add_all([ue1, ue2]) db.session.commit() exc = UserExercise.query.filter_by(user_id=u.id) self.assertEqual(exc.count(), 2) self.assertEqual(exc[0].exercise_id, e1.id) self.assertEqual(exc[1].exercise_id, e2.id)
def favorite_exercise(username): """Handle favoriting an exercise.""" # Make sure the logged in user is the authorized user. if "username" not in session or username != session['username']: raise Unauthorized() user = User.query.filter_by(username=username).first() # Get the exercise id from the form. exercise_id = request.form['data'] # Create a UserExercise instance user_exercise = UserExercise(user_id=user.id, exercise_id=exercise_id) db.session.add(user_exercise) db.session.commit() return redirect(request.referrer)
def post(self): user = util.get_current_user() student = user if not user: self.response.out.write("please login first") elif App.is_dev_server: student_email = self.request.get('student_email') if student_email and student_email != user.email(): #logging.info("user is a coach trying to look at data for student") student = users.User(email=student_email) user_data = UserData.get_or_insert_for(student) if users.is_current_user_admin(): pass # allow admin to import to anyone's account elif user.email() not in user_data.coaches and user.email( ).lower() not in user_data.coaches: raise Exception('Student ' + student_email + ' does not have you as their coach') else: #logging.info("user is a student looking at their own data") user_data = UserData.get_or_insert_for(user) file_contents = self.request.POST.get('userdata').file.read() import_dict = json.loads(file_contents) user_data_dict = import_dict['UserData'] user_exercises = import_dict['UserExercise'] problems_unsorted = import_dict['ProblemLog'] user_videos = import_dict['UserVideo'] user_data.moderator = user_data_dict['moderator'] user_data.joined = self.datetime_from_str(user_data_dict['joined']) user_data.last_login = self.datetime_from_str( user_data_dict['last_login']) user_data.proficient_exercises = user_data_dict[ 'proficient_exercises'] user_data.all_proficient_exercises = user_data_dict[ 'all_proficient_exercises'] user_data.suggested_exercises = user_data_dict[ 'suggested_exercises'] user_data.assigned_exercises = user_data_dict['assigned_exercises'] user_data.need_to_reassess = user_data_dict['need_to_reassess'] user_data.points = user_data_dict['points'] user_data.coaches = user_data_dict['coaches'] user_data.put() proficient_dates = {} correct_in_a_row = {} for problem in ProblemLog.all().filter('user ='******'time_done'])) for problem in problems: problem_log = ProblemLog() problem_log.user = student problem_log.exercise = problem['exercise'] problem_log.time_done = self.datetime_from_str( problem['time_done']) problem_log.correct = problem['correct'] if problem_log.correct: if problem_log.exercise not in correct_in_a_row: correct_in_a_row[problem_log.exercise] = 1 else: correct_in_a_row[problem_log.exercise] += 1 if not problem_log.exercise in proficient_dates and correct_in_a_row[ problem_log.exercise] == 10: proficient_dates[ problem_log.exercise] = problem_log.time_done #for coach in user_data.coaches: # class_data = coaches.Class.get_or_insert(coach, coach=coach) # class_data.compute_stats(user_data, problem_log.time_done.date()) problem_log.time_taken = problem['time_taken'] if problem.has_key('problem_number'): problem_log.problem_number = problem['problem_number'] if problem.has_key('hint_used'): problem_log.hint_used = problem['hint_used'] problem_log.put() for user_exercise in UserExercise.all().filter('user ='******'exercise'] user_exercise.parent = user_data user_exercise.user = student user_exercise.exercise = ue['exercise'] user_exercise.streak = ue['streak'] user_exercise.longest_streak = ue['longest_streak'] user_exercise.first_done = self.datetime_from_str( ue['first_done']) user_exercise.last_done = self.datetime_from_str( ue['last_done']) user_exercise.total_done = ue['total_done'] last_review = self.datetime_from_str(ue['last_review']) if last_review: user_exercise.last_review = last_review user_exercise.review_interval_secs = ue['review_interval_secs'] if user_exercise.exercise in proficient_dates: user_exercise.proficient_date = proficient_dates[ user_exercise.exercise] else: user_exercise.proficient_date = self.datetime_from_str( ue['proficient_date']) user_exercise.put() for user_video in UserVideo.all().filter('user ='******'/individualreport?student_email=' + student.email()) else: self.response.out.write("import is not supported on the live site")