コード例 #1
0
 def test_cache_setting(self):
     """
     Test that a cache is set once the nutritional instance is created
     """
     nutrition_object = self.create_nutrition_plan()[0]
     self.assertFalse(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
     nutrition_object.get_nutritional_values()
     self.assertTrue(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
コード例 #2
0
    def get_nutritional_values(self):
        """
        Sums the nutritional info of all items in the plan
        """
        nutritional_representation = cache.get(cache_mapper.get_nutrition_cache_by_key(self.pk))
        if not nutritional_representation:
            use_metric = self.user.userprofile.use_metric
            unit = 'kg' if use_metric else 'lb'
            result = {'total': {'energy': 0,
                                'protein': 0,
                                'carbohydrates': 0,
                                'carbohydrates_sugar': 0,
                                'fat': 0,
                                'fat_saturated': 0,
                                'fibres': 0,
                                'sodium': 0},
                      'percent': {'protein': 0,
                                  'carbohydrates': 0,
                                  'fat': 0},
                      'per_kg': {'protein': 0,
                                 'carbohydrates': 0,
                                 'fat': 0},
                      }

            # Energy
            for meal in self.meal_set.select_related():
                values = meal.get_nutritional_values(use_metric=use_metric)
                for key in result['total'].keys():
                    result['total'][key] += values[key]

            energy = result['total']['energy']
            result['total']['energy_kilojoule'] = result['total']['energy'] * Decimal(4.184)

            # In percent
            if energy:
                for key in result['percent'].keys():
                    result['percent'][key] = \
                        result['total'][key] * ENERGY_FACTOR[key][unit] / energy * 100

            # Per body weight
            weight_entry = self.get_closest_weight_entry()
            if weight_entry:
                for key in result['per_kg'].keys():
                    result['per_kg'][key] = result['total'][key] / weight_entry.weight

            # Only 2 decimal places, anything else doesn't make sense
            for key in result.keys():
                for i in result[key]:
                    result[key][i] = Decimal(result[key][i]).quantize(TWOPLACES)
            nutritional_representation = result
            cache.set(cache_mapper.get_nutrition_cache_by_key(self.pk), nutritional_representation)
        return nutritional_representation
コード例 #3
0
 def test_nutrition_save_and_delete(self):
     """
     Test that cache is deleted when a nutrition is created or deleted.
     """
     nutrition_object = self.create_nutrition_plan()[0]
     nutrition_object.get_nutritional_values()
     self.assertTrue(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
     nutrition_object.save()
     self.assertFalse(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
     nutrition_object.get_nutritional_values()
     self.assertTrue(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
     nutrition_object.delete()
     self.assertFalse(cache.get(cache_mapper.get_nutrition_cache_by_key(nutrition_object)))
コード例 #4
0
 def test_meal_item_save_delete(self):
     """
     Test that the cache is deleted once a meal undergoes a save or delete operation
     """
     test_object_list = self.create_nutrition_plan()
     nutritional_object = test_object_list[0]
     meal_item = test_object_list[2]
     nutritional_object.get_nutritional_values()
     self.assertTrue(cache.get(cache_mapper.get_nutrition_cache_by_key(nutritional_object)))
     meal_item.save()
     self.assertFalse(cache.get(cache_mapper.get_nutrition_cache_by_key(nutritional_object.pk)))
     nutritional_object.get_nutritional_values()
     self.assertTrue(cache.get(cache_mapper.get_nutrition_cache_by_key(nutritional_object)))
     meal_item.delete()
     self.assertFalse(cache.get(cache_mapper.get_nutrition_cache_by_key(meal_item)))
コード例 #5
0
ファイル: signals.py プロジェクト: yakihor/wger-master
def reset_nutritional_values_canonical_form(sender, instance, **kwargs):
    """
    Reset the nutrition values canonical form in cache
    """
    cache.delete(cache_mapper.get_nutrition_cache_by_key(instance.get_owner_object().id))