Skip to content
Snippets Groups Projects
Verified Commit 6c84faae authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

Update HostSerializer

- remove ThumbnailsMixin and thumbnails fields,
- remove image_* fields and theis usage,
- introduce utils.delete_links function
parent e3666261
No related branches found
No related tags found
No related merge requests found
Pipeline #3067 passed
...@@ -46,7 +46,7 @@ from program.models import ( ...@@ -46,7 +46,7 @@ from program.models import (
Type, Type,
UserProfile, UserProfile,
) )
from program.utils import get_audio_url from program.utils import delete_links, get_audio_url
from steering.settings import THUMBNAIL_SIZES from steering.settings import THUMBNAIL_SIZES
SOLUTION_CHOICES = { SOLUTION_CHOICES = {
...@@ -259,45 +259,42 @@ class ImageSerializer(serializers.ModelSerializer): ...@@ -259,45 +259,42 @@ class ImageSerializer(serializers.ModelSerializer):
return instance return instance
class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer): class HostSerializer(serializers.ModelSerializer):
image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all(), required=False)
links = HostLinkSerializer(many=True, required=False) links = HostLinkSerializer(many=True, required=False)
thumbnails = serializers.SerializerMethodField()
class Meta: class Meta:
model = Host model = Host
fields = (
"biography",
"email",
"is_active",
"links",
"name",
"thumbnails",
# ModelWithImageFields
"image",
"image_alt_text",
"image_credits",
"image_height",
"image_ppoi",
"image_width",
# ModelWithCreatedUpdatedFields
"created_at",
"created_by",
"updated_at",
"updated_by",
)
read_only_fields = ( read_only_fields = (
"created_at", "created_at",
"created_by", "created_by",
"updated_at", "updated_at",
"updated_by", "updated_by",
) )
fields = (
"biography",
"email",
"id",
"image",
"is_active",
"links",
"name",
) + read_only_fields
def create(self, validated_data): def create(self, validated_data):
"""
Create and return a new Host instance, given the validated data.
"""
links_data = validated_data.pop("links", []) links_data = validated_data.pop("links", [])
host = Host.objects.create(**validated_data | self.context)
host = Host.objects.create(**validated_data | self.context) # created_by
for link_data in links_data: for link_data in links_data:
HostLink.objects.create(host=host, **link_data) HostLink.objects.create(host=host, **link_data)
host.save() host.save()
return host return host
def update(self, instance, validated_data): def update(self, instance, validated_data):
...@@ -305,24 +302,20 @@ class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer): ...@@ -305,24 +302,20 @@ class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer):
Update and return an existing Host instance, given the validated data. Update and return an existing Host instance, given the validated data.
""" """
instance.name = validated_data.get("name", instance.name)
instance.is_active = validated_data.get("is_active", instance.is_active)
instance.email = validated_data.get("email", instance.email)
instance.biography = validated_data.get("biography", instance.biography) instance.biography = validated_data.get("biography", instance.biography)
instance.email = validated_data.get("email", instance.email)
instance.image = validated_data.get("image", instance.image) instance.image = validated_data.get("image", instance.image)
instance.image_ppoi = validated_data.get("image_ppoi", instance.image_ppoi) instance.is_active = validated_data.get("is_active", instance.is_active)
instance.image_credits = validated_data.get("image_credits", instance.image_credits) instance.name = validated_data.get("name", instance.name)
instance.image_alt_text = validated_data.get("image_alt_text", instance.image_alt_text)
instance.updated_by = self.context.get("updated_by")
if instance.links.count() > 0:
for link in instance.links.all():
link.delete(keep_parents=True)
if links_data := validated_data.get("links"): if links_data := validated_data.get("links"):
instance = delete_links(instance)
for link_data in links_data: for link_data in links_data:
HostLink.objects.create(host=instance, **link_data) HostLink.objects.create(host=instance, **link_data)
instance.updated_by = self.context.get("updated_by")
instance.save() instance.save()
return instance return instance
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
# #
import json import json
import typing
from datetime import date, datetime, time from datetime import date, datetime, time
from typing import Dict, Optional, Tuple, Union from typing import Dict, Optional, Tuple, Union
...@@ -28,6 +29,9 @@ from rest_framework import exceptions ...@@ -28,6 +29,9 @@ from rest_framework import exceptions
from django.utils import timezone from django.utils import timezone
from steering.settings import CBA_AJAX_URL, CBA_API_KEY, DEBUG from steering.settings import CBA_AJAX_URL, CBA_API_KEY, DEBUG
if typing.TYPE_CHECKING:
from program.models import Host, Note, Show
def parse_datetime(date_string: str) -> datetime: def parse_datetime(date_string: str) -> datetime:
""" """
...@@ -110,6 +114,16 @@ def get_values( ...@@ -110,6 +114,16 @@ def get_values(
return int_if_digit(values[0]) return int_if_digit(values[0])
def delete_links(instance: Union["Host", "Note", "Show"]) -> Union["Host", "Note", "Show"]:
"""Delete the links associated with the instance."""
if instance.links.count() > 0:
for link in instance.links.all():
link.delete(keep_parents=True)
return instance
class DisabledObjectPermissionCheckMixin: class DisabledObjectPermissionCheckMixin:
""" """
At the time of writing permission checks were entirely circumvented by manual At the time of writing permission checks were entirely circumvented by manual
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment