Merge branch 'rename_media' into 'master'
Add rename_media management command See merge request bde/photo21!18
This commit is contained in:
commit
f5ce880fe2
2 changed files with 40 additions and 6 deletions
37
photologue_custom/management/commands/rename_media.py
Normal file
37
photologue_custom/management/commands/rename_media.py
Normal 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()
|
||||
9
tox.ini
9
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 =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue