Add cli command new_photo.

This commit is contained in:
voussoir 2022-08-31 20:21:07 -07:00
parent b52e79f99c
commit 97e14b9917
No known key found for this signature in database
GPG key ID: 5F7554F8C26DACCB

View file

@ -7,12 +7,15 @@ from voussoirkit import betterhelp
from voussoirkit import interactive from voussoirkit import interactive
from voussoirkit import pathclass from voussoirkit import pathclass
from voussoirkit import pipeable from voussoirkit import pipeable
from voussoirkit import ratelimiter
from voussoirkit import spinal from voussoirkit import spinal
from voussoirkit import stringtools from voussoirkit import stringtools
from voussoirkit import vlogging from voussoirkit import vlogging
import etiquette import etiquette
log = vlogging.get_logger(__name__, 'etiquette_cli')
photodb = None photodb = None
def load_photodb(): def load_photodb():
global photodb global photodb
@ -364,6 +367,40 @@ def init_argparse(args):
photodb = etiquette.photodb.PhotoDB(create=True) photodb = etiquette.photodb.PhotoDB(create=True)
return 0 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): def purge_deleted_files_argparse(args):
load_photodb() 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( p_purge_deleted_files = subparsers.add_parser(
'purge_deleted_files', 'purge_deleted_files',
aliases=['purge-deleted-files'], aliases=['purge-deleted-files'],