def update(self, instance, validated_data, *args, **kwargs): """Update the rate object in the database.""" provider_uuids = validated_data.pop('provider_uuids', []) new_providers_for_instance = [] for uuid in provider_uuids: new_providers_for_instance.append(str(Provider.objects.filter(uuid=uuid).first().uuid)) manager = CostModelManager(cost_model_uuid=instance.uuid) manager.update_provider_uuids(new_providers_for_instance) manager.update(**validated_data) return manager.instance
def update(self, instance, validated_data, *args, **kwargs): """Update the rate object in the database.""" source_uuids = validated_data.pop("source_uuids", []) new_providers_for_instance = [] for uuid in source_uuids: new_providers_for_instance.append(str(Provider.objects.filter(uuid=uuid).first().uuid)) try: manager = CostModelManager(cost_model_uuid=instance.uuid) manager.update_provider_uuids(new_providers_for_instance) manager.update(**validated_data) except CostModelException as error: raise serializers.ValidationError(error_obj("cost-models", str(error))) return manager.instance
def test_update_distribution_choice(self): """Test creating a cost model.""" metric = metric_constants.OCP_METRIC_CPU_CORE_USAGE_HOUR source_type = Provider.PROVIDER_OCP tiered_rates = [{"unit": "USD", "value": 0.22}] distribution = "memory" update_distribution = "cpu" data = { "name": "Test Cost Model", "description": "Test", "rates": [{ "metric": { "name": metric }, "source_type": source_type, "tiered_rates": tiered_rates }], "distribution": distribution, } with tenant_context(self.tenant): manager = CostModelManager() with patch("cost_models.cost_model_manager.chain"): cost_model_obj = manager.create(**data) self.assertIsNotNone(cost_model_obj.uuid) self.assertEqual(cost_model_obj.distribution, distribution) for rate in cost_model_obj.rates: self.assertEqual(rate.get("metric", {}).get("name"), metric) self.assertEqual(rate.get("tiered_rates"), tiered_rates) self.assertEqual(rate.get("source_type"), source_type) data["distribution"] = update_distribution with patch("cost_models.cost_model_manager.chain"): cost_model_obj = manager.update(**data) self.assertEqual(manager.instance.distribution, update_distribution)