Skip to content

Commit

Permalink
first draft: image dimensions update managemenet command
Browse files Browse the repository at this point in the history
  • Loading branch information
benzkji committed Nov 4, 2023
1 parent c9872d8 commit 5d0b41c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
26 changes: 26 additions & 0 deletions filer/management/commands/filer_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ def add_arguments(self, parser):
default=False,
help="Delete references in database if files are missing in media folder.",
)
parser.add_argument(
'--image-dimensions',
action='store_true',
dest='image_dimensions',
default=False,
help="Look for images without dimensions set, set them accordingly.",
)
parser.add_argument(
'--noinput',
'--no-input',
Expand Down Expand Up @@ -72,6 +79,8 @@ def handle(self, *args, **options):
self.stdout.write("Aborted: Delete orphaned files from storage.")
return
self.verify_storages(options)
if options['image_dimensions']:
self.image_dimensions(options)

def verify_references(self, options):
from filer.models.filemodels import File
Expand Down Expand Up @@ -112,3 +121,20 @@ def walk(prefix):
filer_public = filer_settings.FILER_STORAGES['public']['main']
storage = import_string(filer_public['ENGINE'])()
walk(filer_public['UPLOAD_TO_PREFIX'])

def image_dimensions(self, options):
from filer.models.filemodels import Image

no_dimensions = Image.objects.filter(
Q(_width=0) | Q(_width__isnull=True)
)
self.stdout.write(f"trying to set dimensions on {no_dimensions.count()} files")
for image in no_dimensions:
try:
imgfile = image.file.file
except ValueError:
imgfile = image.file_ptr.file
imgfile.seek(0)
image._width, image._height = VILImage.load(imgfile).size
image.save()
return
8 changes: 8 additions & 0 deletions tests/test_filer_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,11 @@ def test_delete_orphans(self):

call_command('filer_check', delete_orphans=True, interactive=False, verbosity=0)
self.assertFalse(os.path.exists(orphan_file))

def test_image_dimensions(self):
self.filer_file._width = 0
self.filer_file.save()

call_command('filer_check', image_dimensions=True)
self.filer_file.refresh_from_db()
self.assertFalse(self.filer_file._width == 0)

Check notice

Code scanning / CodeQL

Imprecise assert Note test

assertFalse(a == b) cannot provide an informative message. Using assertNotEqual(a, b) instead will give more informative messages.

0 comments on commit 5d0b41c

Please sign in to comment.