예제 #1
0
    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
예제 #2
0
 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
예제 #3
0
    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)