Manage domain and account resources.

This commit is contained in:
Antoine Nguyen
2022-04-07 12:00:44 +02:00
parent 45cce410c1
commit af044bd325
7 changed files with 134 additions and 22 deletions
+20 -3
View File
@@ -35,15 +35,24 @@ class CreateDomainAdminSerializer(serializers.Serializer):
with_aliases = serializers.BooleanField(default=False)
class DomainResourceSerializer(serializers.ModelSerializer):
"""Serializer for domain resource."""
class Meta:
fields = ("name", "label", "max_value", "current_value", "usage")
model = limits_models.DomainObjectLimit
class DomainSerializer(v1_serializers.DomainSerializer):
"""Domain serializer for v2 API."""
domain_admin = CreateDomainAdminSerializer(required=False, write_only=True)
resources = DomainResourceSerializer(many=True, source="domainobjectlimit_set")
transport = transport_serializers.TransportSerializer(required=False)
class Meta(v1_serializers.DomainSerializer.Meta):
fields = v1_serializers.DomainSerializer.Meta.fields + (
"domain_admin", "transport"
"domain_admin", "resources", "transport"
)
def validate(self, data):
@@ -122,6 +131,7 @@ class DomainSerializer(v1_serializers.DomainSerializer):
def update(self, instance, validated_data):
"""Update domain and create/update transport."""
transport_def = validated_data.pop("transport", None)
resources = validated_data.pop("domainobjectlimit_set", None)
super().update(instance, validated_data)
if transport_def and instance.type == "relaydomain":
transport = getattr(instance, "transport", None)
@@ -138,6 +148,11 @@ class DomainSerializer(v1_serializers.DomainSerializer):
if created:
instance.transport = transport
instance.save()
if resources:
for resource in resources:
instance.domainobjectlimit_set.filter(
name=resource["name"]
).update(max_value=resource["max_value"])
return instance
@@ -253,7 +268,7 @@ class IdentitySerializer(serializers.Serializer):
tags = TagSerializer(many=True)
class ResourceSerializer(serializers.ModelSerializer):
class AccountResourceSerializer(serializers.ModelSerializer):
"""Serializer for user resource."""
class Meta:
@@ -277,6 +292,8 @@ class AccountSerializer(v1_serializers.AccountSerializer):
)
def get_resources(self, account):
if account.role == 'SimpleUsers':
return []
resources = []
for limit in account.userobjectlimit_set.all():
tpl = limits_constants.DEFAULT_USER_LIMITS[limit.name]
@@ -284,7 +301,7 @@ class AccountSerializer(v1_serializers.AccountSerializer):
if account.role != tpl["required_role"]:
continue
resources.append(limit)
return ResourceSerializer(resources, many=True).data
return AccountResourceSerializer(resources, many=True).data
class MailboxSerializer(serializers.ModelSerializer):