diff --git a/etiquette/helpers.py b/etiquette/helpers.py index b25f027..08bde38 100644 --- a/etiquette/helpers.py +++ b/etiquette/helpers.py @@ -367,6 +367,10 @@ def remove_path_badchars(filepath, allowed=''): filepath = filepath.replace('\\', os.sep) return filepath +def run_generator(g): + for x in g: + pass + def seconds_to_hms(seconds): ''' Convert integer number of seconds to an hh:mm:ss string. diff --git a/etiquette/photodb.py b/etiquette/photodb.py index 4446609..7e0bf58 100644 --- a/etiquette/photodb.py +++ b/etiquette/photodb.py @@ -1344,6 +1344,8 @@ class PDBUtilMixin: new_photo_kwargs={}, new_photo_ratelimit=None, recurse=True, + yield_albums=True, + yield_photos=True, ): ''' Walk the directory and create Photos for every file. @@ -1398,6 +1400,12 @@ class PDBUtilMixin: recurse: If True, walk the whole directory tree. If False, only digest the 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): directory = pathclass.Path(directory) @@ -1486,9 +1494,7 @@ class PDBUtilMixin: new_photo_kwargs = _normalize_new_photo_kwargs(new_photo_kwargs) new_photo_ratelimit = _normalize_new_photo_ratelimit(new_photo_ratelimit) - if make_albums: - albums_by_path = {} - main_album = create_or_fetch_current_albums(albums_by_path, directory) + albums_by_path = {} walk_generator = spinal.walk_generator( directory, @@ -1504,6 +1510,9 @@ class PDBUtilMixin: photos = create_or_fetch_photos(files, new_photo_kwargs=new_photo_kwargs) + if yield_photos: + yield from photos + if not make_albums: continue @@ -1513,10 +1522,8 @@ class PDBUtilMixin: for album in current_albums: album.add_photos(photos) - if make_albums: - return main_album - else: - return None + if yield_albums: + yield from current_albums @decorators.transaction def easybake(self, ebstring, author=None): diff --git a/frontends/etiquette_flask/backend/endpoints/album_endpoints.py b/frontends/etiquette_flask/backend/endpoints/album_endpoints.py index 1c7ffff..56d899e 100644 --- a/frontends/etiquette_flask/backend/endpoints/album_endpoints.py +++ b/frontends/etiquette_flask/backend/endpoints/album_endpoints.py @@ -75,7 +75,8 @@ def post_album_remove_child(album_id): def post_album_refresh_directories(album_id): album = common.P_album(album_id, response_type='json') 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') return jsonify.make_json_response({})