From 48d57d3a359b80a036e2fe5b4606045ae55ecb6b Mon Sep 17 00:00:00 2001 From: Alexander Piskun Date: Sat, 29 Oct 2022 00:48:01 +0300 Subject: [PATCH] Removed changes from setting.py. Add convert handler for device model. --- netbox/dcim/models/devices.py | 19 ++++++++++++++++++- netbox/netbox/settings.py | 5 ----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 4c542341e..b43fa0637 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1,16 +1,24 @@ import decimal +import sys +from io import BytesIO import yaml from django.apps import apps from django.contrib.contenttypes.fields import GenericRelation from django.core.exceptions import ValidationError +from django.core.files.uploadedfile import InMemoryUploadedFile from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models import F, ProtectedError from django.urls import reverse from django.utils.safestring import mark_safe +try: + from pillow_heif import HeifImageFile, HeifImagePlugin +except ImportError: + HeifImagePlugin = HeifImageFile = None + from dcim.choices import * from dcim.constants import * from extras.models import ConfigContextModel @@ -21,7 +29,6 @@ from utilities.choices import ColorChoices from utilities.fields import ColorField, NaturalOrderingField from .device_components import * - __all__ = ( 'Device', 'DeviceRole', @@ -280,6 +287,16 @@ class DeviceType(NetBoxModel): }) def save(self, *args, **kwargs): + if HeifImagePlugin is not None: + for im in (self.front_image, self.rear_image): + if im and isinstance(im.file, InMemoryUploadedFile) and isinstance(im.file.image, HeifImageFile): + output_stream = BytesIO() + im.file.image.save(output_stream, format="JPEG") + output_stream.seek(0) + im.name = "%s.jpg" % im.file.name.split('.')[0] + im.file = InMemoryUploadedFile(output_stream, 'ImageField', im.name, + 'image/jpeg', sys.getsizeof(output_stream), None) + ret = super().save(*args, **kwargs) # Delete any previously uploaded image files that are no longer in use diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 4cfad851b..c0999d3d4 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -24,11 +24,6 @@ import django from django.utils.encoding import force_str django.utils.encoding.force_text = force_str -try: - from pillow_heif import HeifImagePlugin -except ImportError: - HeifImagePlugin = None - # # Environment setup #