diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index caa22fcd..379323b9 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -1,5 +1,6 @@ """ activitypub-aware django model fields """ from dataclasses import MISSING +import imghdr import re from uuid import uuid4 @@ -9,7 +10,7 @@ from django.contrib.postgres.fields import ArrayField as DjangoArrayField from django.core.exceptions import ValidationError from django.core.files.base import ContentFile from django.db import models -from django.forms import ClearableFileInput, ImageField +from django.forms import ClearableFileInput, ImageField as DjangoImageField from django.utils import timezone from django.utils.translation import gettext_lazy as _ from bookwyrm import activitypub @@ -334,10 +335,14 @@ class TagField(ManyToManyField): class ClearableFileInputWithWarning(ClearableFileInput): + """max file size warning""" + template_name = "widgets/clearable_file_input_with_warning.html" -class CustomImageField(ImageField): +class CustomImageField(DjangoImageField): + """overwrites image field for form""" + widget = ClearableFileInputWithWarning @@ -400,11 +405,12 @@ class ImageField(ActivitypubFieldMixin, models.ImageField): if not response: return None - image_name = str(uuid4()) + "." + url.split(".")[-1] image_content = ContentFile(response.content) + image_name = str(uuid4()) + "." + imghdr.what(None, image_content.read()) return [image_name, image_content] def formfield(self, **kwargs): + """special case for forms""" return super().formfield( **{ "form_class": CustomImageField,