Merge branch 'rename_media' into 'master'

Add rename_media management command

See merge request bde/photo21!18
This commit is contained in:
erdnaxe 2021-12-15 13:26:42 +01:00
commit f5ce880fe2
2 changed files with 40 additions and 6 deletions

View file

@ -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()

View file

@ -1,17 +1,14 @@
[tox] [tox]
envlist = envlist =
# Ubuntu 20.04 Python py39-django{22,32}
py38-django22
# Debian Bullseye Python
py39-django22
linters linters
skipsdist = True skipsdist = True
[testenv] [testenv]
sitepackages = True sitepackages = True
deps = deps =
django22: Django ~= 2.2.0
django32: Django ~= 3.2.0
-r{toxinidir}/requirements.txt -r{toxinidir}/requirements.txt
coverage coverage
commands = commands =