From 97e14b991702cf429821cf62b69e43bd11fca42a Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Wed, 31 Aug 2022 20:21:07 -0700 Subject: [PATCH] Add cli command new_photo. --- frontends/etiquette_cli.py | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/frontends/etiquette_cli.py b/frontends/etiquette_cli.py index 51dd56c..9fb8ff0 100644 --- a/frontends/etiquette_cli.py +++ b/frontends/etiquette_cli.py @@ -7,12 +7,15 @@ from voussoirkit import betterhelp from voussoirkit import interactive from voussoirkit import pathclass from voussoirkit import pipeable +from voussoirkit import ratelimiter from voussoirkit import spinal from voussoirkit import stringtools from voussoirkit import vlogging import etiquette +log = vlogging.get_logger(__name__, 'etiquette_cli') + photodb = None def load_photodb(): global photodb @@ -364,6 +367,40 @@ def init_argparse(args): photodb = etiquette.photodb.PhotoDB(create=True) return 0 +def new_photo_argparse(args): + load_photodb() + + limiter = ratelimiter.Ratelimiter(allowance=1, period=args.ratelimit) + need_commit = False + + with photodb.transaction: + photos = [] + for file in pathclass.glob_many_files(args.globs): + try: + exists = photodb.get_photo_by_path(file) + log.info('%s exists.', file.absolute_path) + continue + except etiquette.exceptions.NoSuchPhoto: + pass + limiter.limit() + photo = photodb.new_photo(file) + photos.append(photo) + need_commit = True + + if not need_commit: + return 0 + + if args.make_album or args.album_title: + album_title = args.album_title or None + album = photodb.new_album(title=album_title) + album.add_photos(photos) + + if not (args.autoyes or interactive.getpermission('Commit?')): + photodb.rollback() + return 1 + + return 0 + def purge_deleted_files_argparse(args): load_photodb() @@ -1075,6 +1112,50 @@ def main(argv): ################################################################################################ + p_new_photo = subparsers.add_parser( + 'new_photo', + aliases=['new-photo', 'new_photos', 'new-photos'], + description=''' + ''', + ) + p_new_photo.add_argument( + 'globs', + nargs='+', + help=''' + Make Photos from files that match glob patterns. + ''', + ) + p_new_photo.add_argument( + '--ratelimit', + type=float, + default=0.25, + help=''' + ''', + ) + p_new_photo.add_argument( + '--make_album', '--make-album', + action='store_true', + help=''' + ''', + ) + p_new_photo.add_argument( + '--album_title', '--album-title', + default=None, + help=''' + ''', + ) + p_new_photo.add_argument( + '--yes', + dest='autoyes', + action='store_true', + help=''' + Commit the database without prompting. + ''', + ) + p_new_photo.set_defaults(func=new_photo_argparse) + + ################################################################################################ + p_purge_deleted_files = subparsers.add_parser( 'purge_deleted_files', aliases=['purge-deleted-files'],