62 lines
2 KiB
Python
62 lines
2 KiB
Python
# Based on https://github.com/richardbarran/django-photologue/
|
|
# by Richard Barran, BSD-3 licensed
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from photologue.models import PhotoSize
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Creates a new Photologue photo size interactively."
|
|
requires_model_validation = True
|
|
can_import_settings = True
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument("name", type=str, help="Name of the new photo size")
|
|
|
|
def handle(self, *args, **options):
|
|
create_photosize(options["name"])
|
|
|
|
|
|
def get_response(msg, func=int, default=None):
|
|
while True:
|
|
resp = input(msg)
|
|
if not resp and default is not None:
|
|
return default
|
|
try:
|
|
return func(resp)
|
|
except Exception:
|
|
print("Invalid input.")
|
|
|
|
|
|
def create_photosize(
|
|
name, width=0, height=0, crop=False, pre_cache=False, increment_count=False
|
|
):
|
|
try:
|
|
size = PhotoSize.objects.get(name=name)
|
|
exists = True
|
|
except PhotoSize.DoesNotExist:
|
|
size = PhotoSize(name=name)
|
|
exists = False
|
|
if exists:
|
|
msg = (
|
|
'A "%s" photo size already exists. Do you want to replace it? (yes, no):'
|
|
% name
|
|
)
|
|
if not get_response(msg, lambda inp: inp == "yes", False):
|
|
return
|
|
print('\nWe will now define the "%s" photo size:\n' % size)
|
|
w = get_response("Width (in pixels):", lambda inp: int(inp), width)
|
|
h = get_response("Height (in pixels):", lambda inp: int(inp), height)
|
|
c = get_response("Crop to fit? (yes, no):", lambda inp: inp == "yes", crop)
|
|
p = get_response("Pre-cache? (yes, no):", lambda inp: inp == "yes", pre_cache)
|
|
i = get_response(
|
|
"Increment count? (yes, no):", lambda inp: inp == "yes", increment_count
|
|
)
|
|
size.width = w
|
|
size.height = h
|
|
size.crop = c
|
|
size.pre_cache = p
|
|
size.increment_count = i
|
|
size.save()
|
|
print('\nA "%s" photo size has been created.\n' % name)
|
|
return size
|