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' })
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}
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}
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' })