示例#1
0
    def test_smart_repr_one_setting(self):
        """
        Tests the representation with one setting
        """
        set_obj = Set.objects.get(pk=1)
        settings = [i for i in set_obj.setting_set.all()]

        setting_text, setting_list, out = reps_smart_text(settings, set_obj)
        self.assertEqual(setting_text, '2 × 8 (3 RiR)')
        self.assertEqual(len(out['list']), 2)
        self.assertEqual(
            out['list'][0], {
                'reps': 8,
                'reps_unit': '',
                'weight': None,
                'weight_unit': 'kg',
                'rir': '3'
            })
示例#2
0
    def get_canonical_representation(self):
        '''
        Creates a canonical representation for this day
        '''
        canonical_repr = []
        muscles_front = []
        muscles_back = []
        muscles_front_secondary = []
        muscles_back_secondary = []

        for set_obj in self.set_set.select_related():
            exercise_tmp = []
            has_setting_tmp = True
            for exercise in set_obj.exercises.select_related():
                setting_tmp = []

                # Muscles for this set
                for muscle in exercise.muscles.all():
                    if muscle.is_front and muscle.id not in muscles_front:
                        muscles_front.append(muscle.id)
                    elif not muscle.is_front and muscle.id not in muscles_back:
                        muscles_back.append(muscle.id)

                for muscle in exercise.muscles_secondary.all():
                    if muscle.is_front and muscle.id not in muscles_front:
                        muscles_front_secondary.append(muscle.id)
                    elif not muscle.is_front and muscle.id not in muscles_back:
                        muscles_back_secondary.append(muscle.id)

                for setting in Setting.objects.filter(set=set_obj,
                                                      exercise=exercise).order_by('order', 'id'):
                    setting_tmp.append(setting)

                # "Smart" textual representation
                setting_text, setting_list, weight_list, reps_list, repetition_units, weight_units \
                    = reps_smart_text(setting_tmp, set_obj)

                # Flag indicating whether all exercises have settings
                has_setting_tmp = True if len(setting_tmp) > 0 else False

                # Exercise comments
                comment_list = []
                for i in exercise.exercisecomment_set.all():
                    comment_list.append(i.comment)

                # Flag indicating whether any of the settings has saved weight
                has_weight = False
                for i in setting_tmp:
                    if i.weight:
                        has_weight = True
                        break

                exercise_tmp.append({'obj': exercise,
                                     'setting_obj_list': setting_tmp,
                                     'setting_list': setting_list,
                                     'repetition_units': repetition_units,
                                     'weight_units': weight_units,
                                     'weight_list': weight_list,
                                     'has_weight': has_weight,
                                     'reps_list': reps_list,
                                     'setting_text': setting_text,
                                     'comment_list': comment_list})

            # If it's a superset, check that all exercises have the same repetitions.
            # If not, just take the smallest number and drop the rest, because otherwise
            # it doesn't make sense
            if len(exercise_tmp) > 1:
                common_reps = 100
                for exercise in exercise_tmp:
                    if len(exercise['setting_list']) < common_reps:
                        common_reps = len(exercise['setting_list'])

                for exercise in exercise_tmp:
                    if len(exercise['setting_list']) > common_reps:
                        exercise['setting_list'].pop(-1)
                        exercise['setting_obj_list'].pop(-1)
                        setting_text, setting_list, weight_list,\
                            reps_list, repetition_units, weight_units = \
                            reps_smart_text(exercise['setting_obj_list'], set_obj)
                        exercise['setting_text'] = setting_text
                        exercise['repetition_units'] = repetition_units

            canonical_repr.append({'obj': set_obj,
                                   'exercise_list': exercise_tmp,
                                   'is_superset': True if len(exercise_tmp) > 1 else False,
                                   'has_settings': has_setting_tmp,
                                   'muscles': {
                                       'back': muscles_back,
                                       'front': muscles_front,
                                       'frontsecondary': muscles_front_secondary,
                                       'backsecondary': muscles_front_secondary
                                   }})

        # Days of the week
        tmp_days_of_week = []
        for day_of_week in self.day.select_related():
            tmp_days_of_week.append(day_of_week)

        return {'obj': self,
                'days_of_week': {
                    'text': u', '.join([six.text_type(_(i.day_of_week))
                                       for i in tmp_days_of_week]),
                    'day_list': tmp_days_of_week},
                'muscles': {
                    'back': muscles_back,
                    'front': muscles_front,
                    'frontsecondary': muscles_front_secondary,
                    'backsecondary': muscles_front_secondary
                },
                'set_list': canonical_repr}
示例#3
0
文件: models.py 项目: marchiore/wger
    def get_canonical_representation(self):
        '''
        Creates a canonical representation for this day
        '''
        canonical_repr = []
        muscles_front = []
        muscles_back = []

        for set_obj in self.set_set.select_related():
            exercise_tmp = []
            has_setting_tmp = True
            for exercise in set_obj.exercises.select_related():
                setting_tmp = []

                # Muscles for this set
                for muscle in exercise.muscles.all():
                    if muscle.is_front and muscle.id not in muscles_front:
                        muscles_front.append(muscle.id)
                    elif not muscle.is_front and muscle.id not in muscles_back:
                        muscles_back.append(muscle.id)

                for setting in Setting.objects.filter(set=set_obj,
                                                      exercise=exercise).order_by('order', 'id'):
                    setting_tmp.append(setting)

                # "Smart" textual representation
                setting_text, setting_list = reps_smart_text(setting_tmp, set_obj)

                # Flag indicating whether all exercises have settings
                has_setting_tmp = True if len(setting_tmp) > 0 else False

                # Exercise comments
                comment_list = []
                for i in exercise.exercisecomment_set.all():
                    comment_list.append(i.comment)

                exercise_tmp.append({'obj': exercise,
                                     'setting_obj_list': setting_tmp,
                                     'setting_list': setting_list,
                                     'setting_text': setting_text,
                                     'comment_list': comment_list})

            # If it's a superset, check that all exercises have the same repetitions.
            # If not, just take the smallest number and drop the rest, because otherwise
            # it doesn't make sense
            if len(exercise_tmp) > 1:
                common_reps = 100
                for exercise in exercise_tmp:
                    if len(exercise['setting_list']) < common_reps:
                        common_reps = len(exercise['setting_list'])

                for exercise in exercise_tmp:
                    if len(exercise['setting_list']) > common_reps:
                        exercise['setting_list'].pop(-1)
                        exercise['setting_obj_list'].pop(-1)
                        setting_text, setting_list = reps_smart_text(exercise['setting_obj_list'],
                                                                     set_obj)
                        exercise['setting_text'] = setting_text

            canonical_repr.append({'obj': set_obj,
                                   'exercise_list': exercise_tmp,
                                   'is_superset': True if len(exercise_tmp) > 1 else False,
                                   'has_settings': has_setting_tmp,
                                   'muscles': {
                                       'back': muscles_back,
                                       'front': muscles_front
                                   }})

        # Days of the week
        tmp_days_of_week = []
        for day_of_week in self.day.select_related():
            tmp_days_of_week.append(day_of_week)

        return {'obj': self,
                'days_of_week': {
                    'text': u', '.join([six.text_type(_(i.day_of_week))
                                       for i in tmp_days_of_week]),
                    'day_list': tmp_days_of_week},
                'muscles': {
                    'back': muscles_back,
                    'front': muscles_front
                },
                'set_list': canonical_repr}
示例#4
0
    def test_smart_repr_custom_setting(self):
        """
        Tests the representation with several settings
        """
        set_obj = Set(exerciseday_id=1, order=1, sets=4)
        setting1 = Setting(set=set_obj,
                           exercise_id=1,
                           repetition_unit_id=1,
                           reps=8,
                           weight=Decimal(90),
                           weight_unit_id=1,
                           rir='3')
        setting2 = Setting(set=set_obj,
                           exercise_id=1,
                           repetition_unit_id=1,
                           reps=10,
                           weight=Decimal(80),
                           weight_unit_id=1,
                           rir='2.5')
        setting3 = Setting(set=set_obj,
                           exercise_id=1,
                           repetition_unit_id=1,
                           reps=10,
                           weight=Decimal(80),
                           weight_unit_id=1,
                           rir='2')
        setting4 = Setting(set=set_obj,
                           exercise_id=1,
                           repetition_unit_id=1,
                           reps=12,
                           weight=Decimal(80),
                           weight_unit_id=1,
                           rir='1')

        setting_text, setting_list, out = reps_smart_text(
            [setting1, setting2, setting3, setting4], set_obj)
        self.assertEqual(len(out['list']), 4)
        self.assertEqual(
            setting_text, '8 (90 kg, 3 RiR) – 10 (80 kg, 2.5 RiR) – '
            '10 (80 kg, 2 RiR) – 12 (80 kg, 1 RiR)')
        self.assertEqual(
            out['list'][0], {
                'reps': 8,
                'reps_unit': 'Repetitions',
                'weight': Decimal('90'),
                'weight_unit': 'kg',
                'rir': '3'
            })
        self.assertEqual(
            out['list'][1], {
                'reps': 10,
                'reps_unit': 'Repetitions',
                'weight': Decimal('80'),
                'weight_unit': 'kg',
                'rir': '2.5'
            })
        self.assertEqual(
            out['list'][2], {
                'reps': 10,
                'reps_unit': 'Repetitions',
                'weight': Decimal('80'),
                'weight_unit': 'kg',
                'rir': '2'
            })
        self.assertEqual(
            out['list'][3], {
                'reps': 12,
                'reps_unit': 'Repetitions',
                'weight': Decimal('80'),
                'weight_unit': 'kg',
                'rir': '1'
            })