Bug fix for --download-missing, #456
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
""" version info """
|
""" version info """
|
||||||
|
|
||||||
__version__ = "0.42.41"
|
__version__ = "0.42.42"
|
||||||
|
|||||||
@@ -221,6 +221,7 @@ def _export_photo_uuid_applescript(
|
|||||||
timeout=120,
|
timeout=120,
|
||||||
burst=False,
|
burst=False,
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
overwrite=False,
|
||||||
):
|
):
|
||||||
"""Export photo to dest path using applescript to control Photos
|
"""Export photo to dest path using applescript to control Photos
|
||||||
If photo is a live photo, exports both the photo and associated .mov file
|
If photo is a live photo, exports both the photo and associated .mov file
|
||||||
@@ -300,6 +301,8 @@ def _export_photo_uuid_applescript(
|
|||||||
# use the name Photos provided
|
# use the name Photos provided
|
||||||
dest_new = dest / path.name
|
dest_new = dest / path.name
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
|
if overwrite and dest_new.exists():
|
||||||
|
FileUtil.unlink(dest_new)
|
||||||
FileUtil.copy(str(path), str(dest_new))
|
FileUtil.copy(str(path), str(dest_new))
|
||||||
exported_paths.append(str(dest_new))
|
exported_paths.append(str(dest_new))
|
||||||
return exported_paths
|
return exported_paths
|
||||||
@@ -1194,6 +1197,7 @@ def _export_photo_with_photos_export(
|
|||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
burst=self.burst,
|
burst=self.burst,
|
||||||
dry_run=dry_run,
|
dry_run=dry_run,
|
||||||
|
overwrite=overwrite,
|
||||||
)
|
)
|
||||||
all_results.exported.extend(exported)
|
all_results.exported.extend(exported)
|
||||||
except ExportError as e:
|
except ExportError as e:
|
||||||
@@ -1244,6 +1248,7 @@ def _export_photo_with_photos_export(
|
|||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
burst=self.burst,
|
burst=self.burst,
|
||||||
dry_run=dry_run,
|
dry_run=dry_run,
|
||||||
|
overwrite=overwrite,
|
||||||
)
|
)
|
||||||
all_results.exported.extend(exported)
|
all_results.exported.extend(exported)
|
||||||
except ExportError as e:
|
except ExportError as e:
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ UUID_BURST_ALBUM = {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UUID_DOWNLOAD_MISSING = "C6C712C5-9316-408D-A3C3-125661422DA9" # IMG_8844.JPG
|
||||||
|
|
||||||
UUID_FILE = "tests/uuid_from_file.txt"
|
UUID_FILE = "tests/uuid_from_file.txt"
|
||||||
|
|
||||||
CLI_OUTPUT_NO_SUBCOMMAND = [
|
CLI_OUTPUT_NO_SUBCOMMAND = [
|
||||||
@@ -5933,6 +5935,55 @@ def test_export_burst_folder_album():
|
|||||||
assert sorted(files) == sorted(UUID_BURST_ALBUM[uuid])
|
assert sorted(files) == sorted(UUID_BURST_ALBUM[uuid])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(
|
||||||
|
"OSXPHOTOS_TEST_EXPORT" not in os.environ,
|
||||||
|
reason="Skip if not running on author's personal library.",
|
||||||
|
)
|
||||||
|
def test_export_download_missing_file_exists():
|
||||||
|
"""test --download-missing with file exists and --update, issue #456"""
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
import pathlib
|
||||||
|
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, PHOTOS_DB_RHET),
|
||||||
|
".",
|
||||||
|
"-V",
|
||||||
|
"--uuid",
|
||||||
|
UUID_DOWNLOAD_MISSING,
|
||||||
|
"--download-missing",
|
||||||
|
"--use-photos-export",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
assert result.exit_code == 0
|
||||||
|
|
||||||
|
# export again with --update
|
||||||
|
result = runner.invoke(
|
||||||
|
export,
|
||||||
|
[
|
||||||
|
os.path.join(cwd, PHOTOS_DB_RHET),
|
||||||
|
".",
|
||||||
|
"-V",
|
||||||
|
"--uuid",
|
||||||
|
UUID_DOWNLOAD_MISSING,
|
||||||
|
"--download-missing",
|
||||||
|
"--use-photos-export",
|
||||||
|
"--update",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "exported: 1" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_query_name():
|
def test_query_name():
|
||||||
"""test query --name"""
|
"""test query --name"""
|
||||||
import json
|
import json
|
||||||
@@ -6446,7 +6497,7 @@ def test_export_post_command_bad_command():
|
|||||||
|
|
||||||
|
|
||||||
def test_export_directory_template_function():
|
def test_export_directory_template_function():
|
||||||
"""Test --directory with template function """
|
"""Test --directory with template function"""
|
||||||
import os.path
|
import os.path
|
||||||
import pathlib
|
import pathlib
|
||||||
from osxphotos.cli import cli
|
from osxphotos.cli import cli
|
||||||
@@ -6456,7 +6507,7 @@ def test_export_directory_template_function():
|
|||||||
# pylint: disable=not-context-manager
|
# pylint: disable=not-context-manager
|
||||||
with runner.isolated_filesystem():
|
with runner.isolated_filesystem():
|
||||||
with open("foo.py", "w") as f:
|
with open("foo.py", "w") as f:
|
||||||
f.writelines(["def foo(photo, **kwargs):\n"," return 'foo/bar'"])
|
f.writelines(["def foo(photo, **kwargs):\n", " return 'foo/bar'"])
|
||||||
|
|
||||||
tempdir = os.getcwd()
|
tempdir = os.getcwd()
|
||||||
result = runner.invoke(
|
result = runner.invoke(
|
||||||
@@ -6470,9 +6521,8 @@ def test_export_directory_template_function():
|
|||||||
"--uuid",
|
"--uuid",
|
||||||
CLI_EXPORT_UUID,
|
CLI_EXPORT_UUID,
|
||||||
"--directory",
|
"--directory",
|
||||||
"{function:"+f"{tempdir}" + "/foo.py::foo}"
|
"{function:" + f"{tempdir}" + "/foo.py::foo}",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
assert result.exit_code == 0
|
assert result.exit_code == 0
|
||||||
assert pathlib.Path(f"foo/bar/{CLI_EXPORT_UUID_FILENAME}").is_file()
|
assert pathlib.Path(f"foo/bar/{CLI_EXPORT_UUID_FILENAME}").is_file()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user