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)
Beispiel #2
0
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)
Beispiel #3
0
    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")