Let digest_directory act as a generator, yielding photos & albums.

master
voussoir 2020-09-15 13:47:06 -07:00
parent 37c784982a
commit 50ecc4c1c1
3 changed files with 20 additions and 8 deletions

View File

@ -367,6 +367,10 @@ def remove_path_badchars(filepath, allowed=''):
filepath = filepath.replace('\\', os.sep) filepath = filepath.replace('\\', os.sep)
return filepath return filepath
def run_generator(g):
for x in g:
pass
def seconds_to_hms(seconds): def seconds_to_hms(seconds):
''' '''
Convert integer number of seconds to an hh:mm:ss string. Convert integer number of seconds to an hh:mm:ss string.

View File

@ -1344,6 +1344,8 @@ class PDBUtilMixin:
new_photo_kwargs={}, new_photo_kwargs={},
new_photo_ratelimit=None, new_photo_ratelimit=None,
recurse=True, recurse=True,
yield_albums=True,
yield_photos=True,
): ):
''' '''
Walk the directory and create Photos for every file. Walk the directory and create Photos for every file.
@ -1398,6 +1400,12 @@ class PDBUtilMixin:
recurse: recurse:
If True, walk the whole directory tree. If False, only digest the If True, walk the whole directory tree. If False, only digest the
photos from the given directory and not its subdirectories. photos from the given directory and not its subdirectories.
yield_albums:
If True, yield Albums as they are processed, new or not.
yield_photos:
If True, yield Photos as they are processed, new or not.
''' '''
def _normalize_directory(directory): def _normalize_directory(directory):
directory = pathclass.Path(directory) directory = pathclass.Path(directory)
@ -1486,9 +1494,7 @@ class PDBUtilMixin:
new_photo_kwargs = _normalize_new_photo_kwargs(new_photo_kwargs) new_photo_kwargs = _normalize_new_photo_kwargs(new_photo_kwargs)
new_photo_ratelimit = _normalize_new_photo_ratelimit(new_photo_ratelimit) new_photo_ratelimit = _normalize_new_photo_ratelimit(new_photo_ratelimit)
if make_albums:
albums_by_path = {} albums_by_path = {}
main_album = create_or_fetch_current_albums(albums_by_path, directory)
walk_generator = spinal.walk_generator( walk_generator = spinal.walk_generator(
directory, directory,
@ -1504,6 +1510,9 @@ class PDBUtilMixin:
photos = create_or_fetch_photos(files, new_photo_kwargs=new_photo_kwargs) photos = create_or_fetch_photos(files, new_photo_kwargs=new_photo_kwargs)
if yield_photos:
yield from photos
if not make_albums: if not make_albums:
continue continue
@ -1513,10 +1522,8 @@ class PDBUtilMixin:
for album in current_albums: for album in current_albums:
album.add_photos(photos) album.add_photos(photos)
if make_albums: if yield_albums:
return main_album yield from current_albums
else:
return None
@decorators.transaction @decorators.transaction
def easybake(self, ebstring, author=None): def easybake(self, ebstring, author=None):

View File

@ -75,7 +75,8 @@ def post_album_remove_child(album_id):
def post_album_refresh_directories(album_id): def post_album_refresh_directories(album_id):
album = common.P_album(album_id, response_type='json') album = common.P_album(album_id, response_type='json')
for directory in album.get_associated_directories(): for directory in album.get_associated_directories():
common.P.digest_directory(directory, new_photo_ratelimit=0.1) digest = common.P.digest_directory(directory, new_photo_ratelimit=0.1)
etiquette.helpers.run_generator(digest)
common.P.commit(message='refresh album directories endpoint') common.P.commit(message='refresh album directories endpoint')
return jsonify.make_json_response({}) return jsonify.make_json_response({})