Skip to content

Commit

Permalink
feat: Media accept all file types
Browse files Browse the repository at this point in the history
  • Loading branch information
francesco-filicetti committed May 31, 2021
1 parent a317c0d commit 87a925b
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 12 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def get_requirements(fname='requirements.txt'):

setup(
name="unicms",
version='0.17.1',
version='0.18.0',
description="uniCMS is a Django Web Content Management System",
author='Giuseppe De Marco, Francesco Filicetti',
author_email='giuseppe.demarco@unical.it, francesco.filicetti@unical.it',
Expand Down
5 changes: 3 additions & 2 deletions src/cms/api/views/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ class MediaList(UniCMSListCreateAPIView):
"""
"""
description = ""
search_fields = ['title', 'file', 'description']
search_fields = ['title', 'file', 'description', 'file_type']
permission_classes = [MediaGetCreatePermissions]
filterset_fields = ['created', 'modified', 'created_by']
filterset_fields = ['created', 'modified', 'created_by', 'file_type']
serializer_class = MediaSerializer
queryset = Media.objects.all()

Expand Down Expand Up @@ -107,6 +107,7 @@ class MediaOptionList(UniCMSListSelectOptionsAPIView):
description = ""
search_fields = ['title']
serializer_class = MediaSelectOptionsSerializer
filterset_fields = ['file_type']
queryset = Media.objects.all()
schema = EditorialBoardMediaOptionListSchema()

Expand Down
3 changes: 2 additions & 1 deletion src/cms/carousels/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ def __init__(self, *args, **kwargs):
self.fields['carousel'].queryset = Carousel.objects.filter(pk=carousel_id)
setattr(self.fields['image'],
FORM_SOURCE_LABEL,
reverse('unicms_api:media-options'))
# only images
reverse('unicms_api:media-options') + '?file_type=image%2Fwebp')

class Meta:
model = CarouselItem
Expand Down
2 changes: 1 addition & 1 deletion src/cms/medias/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class Media(TimeStampedModel, AbstractMedia,
title = models.CharField(max_length=60, blank=False, null=False,
help_text=_("Media file title"))
file = models.FileField(upload_to=context_media_path,
validators=[validate_media_file_extension,
validators=[validate_file_extension,
validate_file_size,
validate_image_size_ratio])
description = models.TextField()
Expand Down
8 changes: 6 additions & 2 deletions src/cms/medias/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@ def to_representation(self, instance):
data = super().to_representation(instance)
data['file_size'] = instance.file_size_kb
try:
w,y = get_image_width_height(instance.file)
data['file_dimensions'] = f'{w}px*{y}px'
size = get_image_width_height(instance.file)
if size:
w,y = size
data['file_dimensions'] = f'{w}px*{y}px'
else:
data['file_dimensions'] = ''
except FileNotFoundError: # pragma: no cover
data['file_dimensions'] = ''
return data
Expand Down
17 changes: 15 additions & 2 deletions src/cms/medias/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,20 @@
import magic
import os

from django.conf import settings

from io import BytesIO
from PIL import Image

from . import settings as app_settings

logger = logging.getLogger(__name__)


FILETYPE_IMAGE = getattr(settings, 'FILETYPE_IMAGE',
app_settings.FILETYPE_IMAGE)


def get_file_type_size(media_obj) -> dict:
fopen = media_obj.file
mime = magic.Magic(mime=True)
Expand All @@ -22,8 +30,13 @@ def get_file_type_size(media_obj) -> dict:


def get_image_width_height(fopen):
pil = Image.open(fopen)
return pil.size
mime = magic.Magic(mime=True)
fopen.seek(0)
mimetype = mime.from_buffer(fopen.read())
fopen.seek(0)
if mimetype in FILETYPE_IMAGE:
pil = Image.open(fopen)
return pil.size


def to_webp(fobj):
Expand Down
3 changes: 2 additions & 1 deletion src/cms/publications/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
setattr(self.fields['presentation_image'],
FORM_SOURCE_LABEL,
reverse('unicms_api:media-options'))
# only images
reverse('unicms_api:media-options') + '?file_type=image%2Fwebp')

class Meta:
model = Publication
Expand Down
6 changes: 4 additions & 2 deletions src/cms/publications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class Category(TimeStampedModel, CreatedModifiedBy):
image = models.ImageField(upload_to="images/categories",
null=True, blank=True,
max_length=512,
validators=[validate_file_extension,
validators=[validate_image_file_extension,
validate_file_size])

class Meta:
Expand Down Expand Up @@ -463,7 +463,9 @@ class PublicationAttachment(TimeStampedModel, SortableModel, ActivableModel,
help_text=_("Specify the container "
"section in the template where "
"this block would be rendered."))
file = models.FileField(upload_to=publication_attachment_path)
file = models.FileField(upload_to=publication_attachment_path,
validators=[validate_file_extension,
validate_file_size])
description = models.TextField()

class Meta:
Expand Down

0 comments on commit 87a925b

Please sign in to comment.