fix some 404 when external search result has no cover image

This commit is contained in:
Your Name 2024-07-17 22:27:55 -04:00 committed by Henri Dickson
parent 065c4fc0f8
commit 26471657e4
9 changed files with 22 additions and 20 deletions

View file

@ -518,6 +518,9 @@ STORAGES = { # TODO: support S3
},
}
DEFAULT_ITEM_COVER = "item/default.svg"
SITE_INFO["default_cover_url"] = MEDIA_URL + DEFAULT_ITEM_COVER
CSRF_TRUSTED_ORIGINS = [SITE_INFO["site_url"]]
if DEBUG:
CSRF_TRUSTED_ORIGINS += ["http://127.0.0.1:8000", "http://localhost:8000"]

View file

@ -29,7 +29,7 @@ from common.models import (
from common.models.lang import get_current_locales
from common.models.misc import uniq
from .utils import DEFAULT_ITEM_COVER, item_cover_path, resource_cover_path
from .utils import item_cover_path, resource_cover_path
if TYPE_CHECKING:
from journal.models import Collection
@ -382,7 +382,10 @@ class Item(PolymorphicModel):
)
metadata = models.JSONField(_("metadata"), blank=True, null=True, default=dict)
cover = models.ImageField(
_("cover"), upload_to=item_cover_path, default=DEFAULT_ITEM_COVER, blank=True
_("cover"),
upload_to=item_cover_path,
default=settings.DEFAULT_ITEM_COVER,
blank=True,
)
created_time = models.DateTimeField(auto_now_add=True)
edited_time = models.DateTimeField(auto_now=True)
@ -715,13 +718,13 @@ class Item(PolymorphicModel):
)
def has_cover(self) -> bool:
return bool(self.cover) and self.cover != DEFAULT_ITEM_COVER
return bool(self.cover) and self.cover != settings.DEFAULT_ITEM_COVER
@property
def cover_image_url(self) -> str | None:
return (
f"{settings.SITE_INFO['site_url']}{self.cover.url}" # type:ignore
if self.cover and self.cover != DEFAULT_ITEM_COVER
if self.cover and self.cover != settings.DEFAULT_ITEM_COVER
else None
)
@ -825,7 +828,7 @@ class ExternalResource(models.Model):
_("url to the resource"), blank=False, max_length=1000, unique=True
)
cover = models.ImageField(
upload_to=resource_cover_path, default=DEFAULT_ITEM_COVER, blank=True
upload_to=resource_cover_path, default=settings.DEFAULT_ITEM_COVER, blank=True
)
other_lookup_ids = models.JSONField(default=dict)
metadata = models.JSONField(default=dict)

View file

@ -2,8 +2,6 @@ import uuid
from django.utils import timezone
DEFAULT_ITEM_COVER = "item/default.svg"
def resource_cover_path(resource, filename):
fn = (

View file

@ -1,6 +1,7 @@
from functools import cached_property
from typing import TYPE_CHECKING
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
from ninja import Schema
@ -15,7 +16,6 @@ from catalog.common import (
jsondata,
)
from catalog.common.models import LanguageListField
from catalog.common.utils import DEFAULT_ITEM_COVER
class CrewMemberSchema(Schema):
@ -390,7 +390,7 @@ class PerformanceProduction(Item):
def cover_image_url(self) -> str | None:
return (
self.cover.url # type:ignore
if self.cover and self.cover != DEFAULT_ITEM_COVER
if self.cover and self.cover != settings.DEFAULT_ITEM_COVER
else self.show.cover_image_url if self.show else None
)

View file

@ -190,6 +190,8 @@ class TheMovieDatabase:
subtitle = f"{m.get('release_date', '')} {m.get('original_name', '')}"
cover = (
f"https://image.tmdb.org/t/p/w500/{m.get('poster_path')}"
if m.get("poster_path")
else None
)
results.append(
SearchResultItem(

View file

@ -161,13 +161,7 @@ def external_search(request):
dedupe_urls = cache.get(cache_key, [])
items = [i for i in items if i.source_url not in dedupe_urls]
return render(
request,
"external_search_results.html",
{
"external_items": items,
},
)
return render(request, "external_search_results.html", {"external_items": items})
@login_required

View file

@ -27,7 +27,8 @@
<div class="item">
<div class="cover">
<a href="{{ item.url }}">
<img src="{{ item.cover_image_url|relative_uri }}" alt="cover" />
<img src="{{ item.cover_image_url|default:default_cover_url|relative_uri }}"
alt="cover" />
</a>
</div>
<div>

View file

@ -79,7 +79,7 @@ def rating_star(value):
@register.filter()
@stringfilter
def relative_uri(value: str) -> str:
return str(value).replace(settings.SITE_INFO["site_url"], "")
return str(value).replace(settings.SITE_INFO["site_url"], "") if value else value
@register.filter

View file

@ -2,12 +2,13 @@ import re
from functools import cached_property
from typing import TYPE_CHECKING
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
from catalog.collection.models import Collection as CatalogCollection
from catalog.common import jsondata
from catalog.common.utils import DEFAULT_ITEM_COVER, piece_cover_path
from catalog.common.utils import piece_cover_path
from catalog.models import Item
from takahe.utils import Takahe
from users.models import APIdentity
@ -52,7 +53,7 @@ class Collection(List):
title = models.CharField(_("title"), max_length=1000, default="")
brief = models.TextField(_("description"), blank=True, default="")
cover = models.ImageField(
upload_to=piece_cover_path, default=DEFAULT_ITEM_COVER, blank=True
upload_to=piece_cover_path, default=settings.DEFAULT_ITEM_COVER, blank=True
)
items = models.ManyToManyField(
Item, through="CollectionMember", related_name="collections"