diff --git a/photologue_custom/management/commands/rename_media.py b/photologue_custom/management/commands/rename_media.py new file mode 100644 index 0000000..62615e9 --- /dev/null +++ b/photologue_custom/management/commands/rename_media.py @@ -0,0 +1,37 @@ +from pathlib import Path +import os + +from django.core.management.base import BaseCommand +from photologue.models import Gallery +from django.conf import settings + + +class Command(BaseCommand): + help = 'Rename uploaded media file to match gallery and photo names' + + def add_arguments(self, parser): + parser.add_argument('--apply', action='store_true') + + def handle(self, *args, **options): + media_dir = Path(settings.MEDIA_ROOT) + for gallery in Gallery.objects.all(): + # Create gallery directory + gallery_year = str(gallery.extended.date_start.year) + gallery_dir = Path('photos') / gallery_year / gallery.slug + gallery_path = media_dir / gallery_dir + if not gallery_path.exists(): + self.stdout.write(f"Creating {gallery_dir}") + if options["apply"]: + gallery_path.mkdir(parents=True) + + # Move photos in gallery folder + for photo in gallery.photos.all(): + photo_name = str(gallery_dir / photo.image.name.split("/")[-1]) + if photo.image.name == photo_name: + continue + self.stdout.write(f" Moving {photo.image.name} -> {photo_name}") + if options["apply"]: + if not (media_dir / photo_name).exists(): + os.rename(photo.image.path, media_dir / photo_name) + photo.image.name = photo_name + photo.save() diff --git a/tox.ini b/tox.ini index 333bfcb..007b0c9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,17 +1,14 @@ [tox] envlist = - # Ubuntu 20.04 Python - py38-django22 - - # Debian Bullseye Python - py39-django22 - + py39-django{22,32} linters skipsdist = True [testenv] sitepackages = True deps = + django22: Django ~= 2.2.0 + django32: Django ~= 3.2.0 -r{toxinidir}/requirements.txt coverage commands =