osb catalog
This commit is contained in:
parent
81e55a2134
commit
ff4eb0a9ba
2 changed files with 89 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
|||
from rest_framework import serializers
|
||||
from hub.services.models import ServiceOffering, Plan
|
||||
from django.utils.html import strip_tags
|
||||
|
||||
|
||||
class ServiceUserSerializer(serializers.Serializer):
|
||||
|
@ -47,3 +48,70 @@ class ServiceInstanceProvisioningSerializer(serializers.Serializer):
|
|||
return plan
|
||||
except Plan.DoesNotExist:
|
||||
raise serializers.ValidationError("Invalid plan_id")
|
||||
|
||||
|
||||
class CostSerializer(serializers.Serializer):
|
||||
amount = serializers.DecimalField(max_digits=10, decimal_places=2)
|
||||
unit = serializers.CharField()
|
||||
|
||||
|
||||
class PlanMetadataSerializer(serializers.Serializer):
|
||||
bullets = serializers.ListField(child=serializers.CharField(), required=False)
|
||||
costs = CostSerializer(many=True, required=False)
|
||||
|
||||
|
||||
class PlanSerializer(serializers.ModelSerializer):
|
||||
description = serializers.SerializerMethodField()
|
||||
|
||||
def get_description(self, obj):
|
||||
return strip_tags(obj.description) if obj.description else ""
|
||||
|
||||
class Meta:
|
||||
model = Plan
|
||||
fields = ["id", "name", "description"]
|
||||
|
||||
|
||||
class ServiceOfferingMetadataSerializer(serializers.Serializer):
|
||||
displayName = serializers.CharField()
|
||||
providerDisplayName = serializers.CharField()
|
||||
longDescription = serializers.SerializerMethodField()
|
||||
imageUrl = serializers.URLField(required=False)
|
||||
|
||||
def get_longDescription(self, obj):
|
||||
return strip_tags(obj["longDescription"]) if obj.get("longDescription") else ""
|
||||
|
||||
|
||||
class ServiceOfferingSerializer(serializers.ModelSerializer):
|
||||
id = serializers.SerializerMethodField()
|
||||
name = serializers.SerializerMethodField()
|
||||
description = serializers.SerializerMethodField()
|
||||
plans = PlanSerializer(many=True)
|
||||
bindable = serializers.BooleanField(default=True)
|
||||
metadata = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = ServiceOffering
|
||||
fields = ["id", "name", "description", "plans", "bindable", "metadata"]
|
||||
|
||||
def get_id(self, obj):
|
||||
return str(obj.pk)
|
||||
|
||||
def get_name(self, obj):
|
||||
return f"{obj.service.name}-{obj.cloud_provider.name}".lower().replace(" ", "-")
|
||||
|
||||
def get_description(self, obj):
|
||||
return strip_tags(obj.description) if obj.description else ""
|
||||
|
||||
def get_metadata(self, obj):
|
||||
return ServiceOfferingMetadataSerializer(
|
||||
{
|
||||
"displayName": obj.service.name,
|
||||
"providerDisplayName": obj.cloud_provider.name,
|
||||
"longDescription": obj.description,
|
||||
"imageUrl": obj.service.logo.url if obj.service.logo else None,
|
||||
}
|
||||
).data
|
||||
|
||||
|
||||
class CatalogSerializer(serializers.Serializer):
|
||||
services = ServiceOfferingSerializer(many=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue