Fixed --cleanup for empty export, #481
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
""" version info """
|
""" version info """
|
||||||
|
|
||||||
__version__ = "0.42.50"
|
__version__ = "0.42.51"
|
||||||
|
|||||||
@@ -1647,6 +1647,9 @@ def export(
|
|||||||
previous_uuids = {uuid: 1 for uuid in export_db.get_previous_uuids()}
|
previous_uuids = {uuid: 1 for uuid in export_db.get_previous_uuids()}
|
||||||
photos = [p for p in photos if p.uuid not in previous_uuids]
|
photos = [p for p in photos if p.uuid not in previous_uuids]
|
||||||
|
|
||||||
|
# store results of export
|
||||||
|
results = ExportResults()
|
||||||
|
|
||||||
if photos:
|
if photos:
|
||||||
num_photos = len(photos)
|
num_photos = len(photos)
|
||||||
# TODO: photos or photo appears several times, pull into a separate function
|
# TODO: photos or photo appears several times, pull into a separate function
|
||||||
@@ -1658,8 +1661,6 @@ def export(
|
|||||||
# because the original code used --original-name as an option
|
# because the original code used --original-name as an option
|
||||||
original_name = not current_name
|
original_name = not current_name
|
||||||
|
|
||||||
results = ExportResults()
|
|
||||||
|
|
||||||
# set up for --add-export-to-album if needed
|
# set up for --add-export-to-album if needed
|
||||||
album_export = (
|
album_export = (
|
||||||
PhotosAlbum(add_exported_to_album, verbose=verbose_)
|
PhotosAlbum(add_exported_to_album, verbose=verbose_)
|
||||||
@@ -1834,41 +1835,6 @@ def export(
|
|||||||
if fp is not None:
|
if fp is not None:
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
if cleanup:
|
|
||||||
all_files = (
|
|
||||||
results.exported
|
|
||||||
+ results.skipped
|
|
||||||
+ results.exif_updated
|
|
||||||
+ results.touched
|
|
||||||
+ results.converted_to_jpeg
|
|
||||||
+ results.sidecar_json_written
|
|
||||||
+ results.sidecar_json_skipped
|
|
||||||
+ results.sidecar_exiftool_written
|
|
||||||
+ results.sidecar_exiftool_skipped
|
|
||||||
+ results.sidecar_xmp_written
|
|
||||||
+ results.sidecar_xmp_skipped
|
|
||||||
# include missing so a file that was already in export directory
|
|
||||||
# but was missing on --update doesn't get deleted
|
|
||||||
# (better to have old version than none)
|
|
||||||
+ results.missing
|
|
||||||
# include files that have error in case they exist from previous export
|
|
||||||
+ [r[0] for r in results.error]
|
|
||||||
+ [str(pathlib.Path(export_db_path).resolve())]
|
|
||||||
)
|
|
||||||
click.echo(f"Cleaning up {dest}")
|
|
||||||
cleaned_files, cleaned_dirs = cleanup_files(dest, all_files, fileutil)
|
|
||||||
file_str = "files" if len(cleaned_files) != 1 else "file"
|
|
||||||
dir_str = "directories" if len(cleaned_dirs) != 1 else "directory"
|
|
||||||
click.echo(
|
|
||||||
f"Deleted: {len(cleaned_files)} {file_str}, {len(cleaned_dirs)} {dir_str}"
|
|
||||||
)
|
|
||||||
results.deleted_files = cleaned_files
|
|
||||||
results.deleted_directories = cleaned_dirs
|
|
||||||
|
|
||||||
if report:
|
|
||||||
verbose_(f"Writing export report to {report}")
|
|
||||||
write_export_report(report, results)
|
|
||||||
|
|
||||||
photo_str_total = "photos" if len(photos) != 1 else "photo"
|
photo_str_total = "photos" if len(photos) != 1 else "photo"
|
||||||
if update:
|
if update:
|
||||||
summary = (
|
summary = (
|
||||||
@@ -1893,6 +1859,42 @@ def export(
|
|||||||
else:
|
else:
|
||||||
click.echo("Did not find any photos to export")
|
click.echo("Did not find any photos to export")
|
||||||
|
|
||||||
|
# cleanup files and do report if needed
|
||||||
|
if cleanup:
|
||||||
|
all_files = (
|
||||||
|
results.exported
|
||||||
|
+ results.skipped
|
||||||
|
+ results.exif_updated
|
||||||
|
+ results.touched
|
||||||
|
+ results.converted_to_jpeg
|
||||||
|
+ results.sidecar_json_written
|
||||||
|
+ results.sidecar_json_skipped
|
||||||
|
+ results.sidecar_exiftool_written
|
||||||
|
+ results.sidecar_exiftool_skipped
|
||||||
|
+ results.sidecar_xmp_written
|
||||||
|
+ results.sidecar_xmp_skipped
|
||||||
|
# include missing so a file that was already in export directory
|
||||||
|
# but was missing on --update doesn't get deleted
|
||||||
|
# (better to have old version than none)
|
||||||
|
+ results.missing
|
||||||
|
# include files that have error in case they exist from previous export
|
||||||
|
+ [r[0] for r in results.error]
|
||||||
|
+ [str(pathlib.Path(export_db_path).resolve())]
|
||||||
|
)
|
||||||
|
click.echo(f"Cleaning up {dest}")
|
||||||
|
cleaned_files, cleaned_dirs = cleanup_files(dest, all_files, fileutil)
|
||||||
|
file_str = "files" if len(cleaned_files) != 1 else "file"
|
||||||
|
dir_str = "directories" if len(cleaned_dirs) != 1 else "directory"
|
||||||
|
click.echo(
|
||||||
|
f"Deleted: {len(cleaned_files)} {file_str}, {len(cleaned_dirs)} {dir_str}"
|
||||||
|
)
|
||||||
|
results.deleted_files = cleaned_files
|
||||||
|
results.deleted_directories = cleaned_dirs
|
||||||
|
|
||||||
|
if report:
|
||||||
|
verbose_(f"Writing export report to {report}")
|
||||||
|
write_export_report(report, results)
|
||||||
|
|
||||||
export_db.close()
|
export_db.close()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5324,6 +5324,50 @@ def test_export_cleanup():
|
|||||||
assert not pathlib.Path("./foo/delete_me_too.txt").is_file()
|
assert not pathlib.Path("./foo/delete_me_too.txt").is_file()
|
||||||
|
|
||||||
|
|
||||||
|
def test_export_cleanup_empty_album():
|
||||||
|
"""test export with --cleanup flag with an empty album (#481)"""
|
||||||
|
import pathlib
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from osxphotos.cli import export
|
||||||
|
|
||||||
|
runner = CliRunner()
|
||||||
|
cwd = os.getcwd()
|
||||||
|
# pylint: disable=not-context-manager
|
||||||
|
with runner.isolated_filesystem():
|
||||||
|
result = runner.invoke(export, [os.path.join(cwd, CLI_PHOTOS_DB), ".", "-V"])
|
||||||
|
assert result.exit_code == 0
|
||||||
|
|
||||||
|
# run cleanup with dry-run
|
||||||
|
with tempfile.TemporaryDirectory() as tempdir:
|
||||||
|
result = runner.invoke(
|
||||||
|
export,
|
||||||
|
[
|
||||||
|
os.path.join(cwd, CLI_PHOTOS_DB),
|
||||||
|
tempdir,
|
||||||
|
"-V",
|
||||||
|
"--uuid",
|
||||||
|
UUID_LOCATION,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# run cleanup with an empty folder
|
||||||
|
result = runner.invoke(
|
||||||
|
export,
|
||||||
|
[
|
||||||
|
os.path.join(cwd, CLI_PHOTOS_DB),
|
||||||
|
tempdir,
|
||||||
|
"-V",
|
||||||
|
"--update",
|
||||||
|
"--cleanup",
|
||||||
|
"--album",
|
||||||
|
"EmptyAlbum",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
assert "Did not find any photos to export" in result.output
|
||||||
|
assert "Deleted: 1 file" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_save_load_config():
|
def test_save_load_config():
|
||||||
"""test --save-config, --load-config"""
|
"""test --save-config, --load-config"""
|
||||||
import glob
|
import glob
|
||||||
|
|||||||
Reference in New Issue
Block a user