mirror of
https://github.com/narrrl/holy-flavor-rater.git
synced 2026-11-03 16:41:27 +01:00
main image selections
This commit is contained in:
1 parent
caf3830d72
commit
466d0a0f9f
7 files changed
+153
-80
No files matched your search
@@ -1,5 +1,7 @@
|
||||
from typing import Any
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
def absolute_image_url(serializer: Any, image_field: Any) -> str | None:
|
||||
if not image_field:
|
||||
@@ -8,3 +10,14 @@ def absolute_image_url(serializer: Any, image_field: Any) -> str | None:
|
||||
if request:
|
||||
return request.build_absolute_uri(image_field.url)
|
||||
return image_field.url
|
||||
|
||||
|
||||
def absolute_media_url(serializer: Any, rel_path: str | None) -> str | None:
|
||||
if not rel_path:
|
||||
return None
|
||||
media_url = settings.MEDIA_URL.rstrip("/") + "/"
|
||||
url = media_url + rel_path.lstrip("/")
|
||||
request = serializer.context.get("request")
|
||||
if request:
|
||||
return request.build_absolute_uri(url)
|
||||
return url
|
||||
@@ -2,7 +2,7 @@ from django.db.models import Count
|
||||
from rest_framework import serializers
|
||||
|
||||
from api.models import Category, Flavor, Rating
|
||||
from api.serializers._helpers import absolute_image_url
|
||||
from api.serializers._helpers import absolute_image_url, absolute_media_url
|
||||
from api.serializers.rating import RatingSerializer
|
||||
|
||||
|
||||
@@ -47,18 +47,29 @@ class FlavorSerializer(serializers.ModelSerializer):
|
||||
extra_kwargs = {"image": {"write_only": True}}
|
||||
|
||||
def get_image_url(self, obj: Flavor) -> str | None:
|
||||
if obj.main_image_path:
|
||||
url = absolute_media_url(self, obj.main_image_path)
|
||||
if url:
|
||||
return url
|
||||
if obj.local_image_paths:
|
||||
url = absolute_media_url(self, obj.local_image_paths[0])
|
||||
if url:
|
||||
return url
|
||||
if obj.image:
|
||||
return absolute_image_url(self, obj.image)
|
||||
return obj.image_url
|
||||
|
||||
def get_image_urls(self, obj: Flavor) -> list[str]:
|
||||
urls: list[str] = []
|
||||
if obj.local_image_paths:
|
||||
urls = [absolute_media_url(self, p) for p in obj.local_image_paths]
|
||||
return [u for u in urls if u]
|
||||
legacy_urls: list[str] = []
|
||||
if obj.image:
|
||||
absolute = absolute_image_url(self, obj.image)
|
||||
if absolute:
|
||||
urls.append(absolute)
|
||||
urls.extend(obj.image_urls or [])
|
||||
return urls
|
||||
legacy_urls.append(absolute)
|
||||
legacy_urls.extend(obj.image_urls or [])
|
||||
return legacy_urls
|
||||
|
||||
def get_rating_distribution(self, obj: Flavor) -> dict[str, int]:
|
||||
counts = dict.fromkeys((str(i) for i in range(1, 11)), 0)
|
||||
|
||||
Reference in new issue
Block a user