import logging
from django.contrib import admin
from django.contrib.auth.models import Group
from django.urls import reverse
from django.utils.html import mark_safe
from sorl.thumbnail.admin import AdminImageMixin
from sorl.thumbnail.shortcuts import get_thumbnail
from core_images.models import FallbackUrl, LabelImage
logger = logging.getLogger(__name__)
class FallbackUrlAdmin(admin.ModelAdmin):
search_fields = ("gras_id", "url")
list_display = ("gras_id", "image_preview")
list_display_links = ("gras_id", "image_preview")
def image_preview(self, instance):
return mark_safe(f'
')
def get_form(self, request, obj=None, change=False, **kwargs):
form = super().get_form(request, obj, change, **kwargs)
form.base_fields[
"url"
].widget.template_name = "widgets/url_with_image.html"
return form
class LabelImageAdmin(AdminImageMixin, admin.ModelAdmin):
PREVIEW_RESOLUTION = "100x100"
search_fields = ("label_id",)
list_display = ("label_id", "image_preview")
list_display_links = ("label_id", "image_preview")
def image_preview(self, instance):
try:
thumbnail = get_thumbnail(
instance.image,
self.PREVIEW_RESOLUTION,
upscale=False,
crop=False,
)
url = thumbnail.url
except Exception as e:
logger.exception(f"Unable to get thumbnail: {e}")
url = instance.image.url
return mark_safe(f'
')
admin.site.register(FallbackUrl, FallbackUrlAdmin)
admin.site.register(LabelImage, LabelImageAdmin)
admin.site.unregister(Group)
admin.site.site_header = "Core Images Service"
admin.site.site_title = admin.site.site_header
admin.site.site_url = reverse("docs")