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,6 +1835,31 @@ def export(
|
|||||||
if fp is not None:
|
if fp is not None:
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
|
photo_str_total = "photos" if len(photos) != 1 else "photo"
|
||||||
|
if update:
|
||||||
|
summary = (
|
||||||
|
f"Processed: {len(photos)} {photo_str_total}, "
|
||||||
|
f"exported: {len(results.new)}, "
|
||||||
|
f"updated: {len(results.updated)}, "
|
||||||
|
f"skipped: {len(results.skipped)}, "
|
||||||
|
f"updated EXIF data: {len(results.exif_updated)}, "
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
summary = (
|
||||||
|
f"Processed: {len(photos)} {photo_str_total}, "
|
||||||
|
f"exported: {len(results.exported)}, "
|
||||||
|
)
|
||||||
|
summary += f"missing: {len(results.missing)}, "
|
||||||
|
summary += f"error: {len(results.error)}"
|
||||||
|
if touch_file:
|
||||||
|
summary += f", touched date: {len(results.touched)}"
|
||||||
|
click.echo(summary)
|
||||||
|
stop_time = time.perf_counter()
|
||||||
|
click.echo(f"Elapsed time: {(stop_time-start_time):.3f} seconds")
|
||||||
|
else:
|
||||||
|
click.echo("Did not find any photos to export")
|
||||||
|
|
||||||
|
# cleanup files and do report if needed
|
||||||
if cleanup:
|
if cleanup:
|
||||||
all_files = (
|
all_files = (
|
||||||
results.exported
|
results.exported
|
||||||
@@ -1869,30 +1895,6 @@ def export(
|
|||||||
verbose_(f"Writing export report to {report}")
|
verbose_(f"Writing export report to {report}")
|
||||||
write_export_report(report, results)
|
write_export_report(report, results)
|
||||||
|
|
||||||
photo_str_total = "photos" if len(photos) != 1 else "photo"
|
|
||||||
if update:
|
|
||||||
summary = (
|
|
||||||
f"Processed: {len(photos)} {photo_str_total}, "
|
|
||||||
f"exported: {len(results.new)}, "
|
|
||||||
f"updated: {len(results.updated)}, "
|
|
||||||
f"skipped: {len(results.skipped)}, "
|
|
||||||
f"updated EXIF data: {len(results.exif_updated)}, "
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
summary = (
|
|
||||||
f"Processed: {len(photos)} {photo_str_total}, "
|
|
||||||
f"exported: {len(results.exported)}, "
|
|
||||||
)
|
|
||||||
summary += f"missing: {len(results.missing)}, "
|
|
||||||
summary += f"error: {len(results.error)}"
|
|
||||||
if touch_file:
|
|
||||||
summary += f", touched date: {len(results.touched)}"
|
|
||||||
click.echo(summary)
|
|
||||||
stop_time = time.perf_counter()
|
|
||||||
click.echo(f"Elapsed time: {(stop_time-start_time):.3f} seconds")
|
|
||||||
else:
|
|
||||||
click.echo("Did not find any photos to export")
|
|
||||||
|
|
||||||
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