# 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