From 419b34ea73f15ccbe29f51896e11e9735ea5786b Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Fri, 15 Oct 2021 05:36:41 -0700 Subject: [PATCH] Fix for #526 with --update --- osxphotos/_version.py | 2 +- osxphotos/photoinfo/_photoinfo_export.py | 5 ++- tests/test_cli.py | 44 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/osxphotos/_version.py b/osxphotos/_version.py index fef8b01f..0c54375f 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.42.93" +__version__ = "0.42.94" diff --git a/osxphotos/photoinfo/_photoinfo_export.py b/osxphotos/photoinfo/_photoinfo_export.py index 6b271e92..191a9955 100644 --- a/osxphotos/photoinfo/_photoinfo_export.py +++ b/osxphotos/photoinfo/_photoinfo_export.py @@ -912,9 +912,12 @@ def export2( preview_path = pathlib.Path(self.path_derivatives[0]) preview_ext = preview_path.suffix preview_name = dest.parent / f"{dest.stem}{preview_suffix}{preview_ext}" + # if original is missing, the filename won't have been incremented so + # need to check here to make sure there aren't duplicate preview files in + # the export directory preview_name = ( preview_name - if overwrite + if overwrite or update else pathlib.Path(increment_filename(preview_name)) ) if preview_path is not None: diff --git a/tests/test_cli.py b/tests/test_cli.py index 03554ec4..1c651eb5 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1527,6 +1527,50 @@ def test_export_preview_overwrite(): assert len(files) == 2 # preview + original +def test_export_preview_update(): + """test export with --preview and --update (#526)""" + import glob + import os + import os.path + + import osxphotos + 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", + "--preview", + "--uuid", + CLI_EXPORT_UUID, + ], + ) + assert result.exit_code == 0 + + # export again + result = runner.invoke( + export, + [ + os.path.join(cwd, CLI_PHOTOS_DB), + ".", + "-V", + "--preview", + "--uuid", + CLI_EXPORT_UUID, + "--update", + ], + ) + assert result.exit_code == 0 + files = glob.glob("*") + assert len(files) == 2 # preview + original + + def test_export_as_hardlink(): import glob import os