Skip to content

Commit

Permalink
Coverage | refactored client config serializers remove redundancy
Browse files Browse the repository at this point in the history
  • Loading branch information
snyaggarwal committed Mar 24, 2022
1 parent 1fa5155 commit d5fcc6d
Showing 1 changed file with 15 additions and 62 deletions.
77 changes: 15 additions & 62 deletions core/client_configs/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@
from core.client_configs.models import ClientConfig


class ClientConfigTemplateSerializer(serializers.ModelSerializer):
class ClientConfigAbstractSerializer(serializers.ModelSerializer):
config = JSONField(required=False)
url = CharField(source='uri', read_only=True)
scope = CharField(read_only=True, source='resource_type.name')

class Meta:
abstract = True
model = ClientConfig
fields = (
'id', 'name', 'description', 'type', 'is_default', 'config', 'url', 'scope', 'public', 'is_template'
Expand All @@ -25,17 +26,11 @@ def __init__(self, *args, **kwargs):
def create(self, validated_data):
user = self.context['request'].user
from core.common.utils import get_content_type_from_resource_name
resource_type = get_content_type_from_resource_name(self.resource)
resource_type = get_content_type_from_resource_name(validated_data.pop('resource_type', None) or self.resource)

instance = ClientConfig(
**validated_data, created_by=user, updated_by=user, resource_type=resource_type,
resource_id=0, is_template=True
)

if not instance.type:
instance.type = HOME_TYPE
if instance.is_default is None:
instance.is_default = False
instance = self.get_instance(validated_data, resource_type=resource_type, created_by=user, updated_by=user)
instance.type = instance.type or HOME_TYPE
instance.is_default = bool(instance.is_default)

try:
instance.full_clean()
Expand All @@ -50,66 +45,24 @@ def create(self, validated_data):

return instance

def update(self, instance, validated_data):
user = self.context['request'].user
instance.name = validated_data.get('name', instance.name)
instance.config = validated_data.get('config', instance.config)
instance.type = validated_data.get('type', instance.type)
instance.is_default = bool(validated_data.get('is_default', instance.is_default))
instance.updated_by = user
@staticmethod
def get_instance(validated_data, **kwargs):
return ClientConfig(**validated_data, **kwargs)

try:
instance.full_clean()
instance.save()
if instance.id and instance.is_default:
instance.siblings.filter(is_default=True).update(is_default=False)
except ValidationError as ex:
self._errors.update(ex.message_dict)

if self._errors:
raise serializers.ValidationError(self._errors)

return instance
class ClientConfigTemplateSerializer(ClientConfigAbstractSerializer):
@staticmethod
def get_instance(validated_data, **kwargs):
return ClientConfig(**validated_data, **kwargs, resource_id=0, is_template=True)


class ClientConfigSerializer(serializers.ModelSerializer):
config = JSONField(required=False)
url = CharField(source='uri', read_only=True)
class ClientConfigSerializer(ClientConfigAbstractSerializer):
resource_type = CharField(write_only=True, required=False)
resource_id = IntegerField(write_only=True, required=False)
scope = CharField(read_only=True, source='resource_type.name')

class Meta:
model = ClientConfig
fields = (
'id', 'name', 'description', 'type', 'is_default', 'config', 'url', 'resource_type', 'resource_id', 'scope',
'is_template', 'public'
)

def create(self, validated_data):
user = self.context['request'].user
from core.common.utils import get_content_type_from_resource_name
resource_type = get_content_type_from_resource_name(validated_data.pop('resource_type', None))

instance = ClientConfig(**validated_data, created_by=user, updated_by=user, resource_type=resource_type)

if not instance.type:
instance.type = HOME_TYPE
if instance.is_default is None:
instance.is_default = False

try:
instance.full_clean()
instance.save()
if instance.id and instance.is_default:
instance.siblings.filter(is_default=True).update(is_default=False)
except ValidationError as ex:
self._errors.update(ex.message_dict)

if self._errors:
raise serializers.ValidationError(self._errors)

return instance
fields = ClientConfigAbstractSerializer.Meta.fields + ('resource_type', 'resource_id')

def update(self, instance, validated_data):
user = self.context['request'].user
Expand Down

0 comments on commit d5fcc6d

Please sign in to comment.