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