From 0472582870858adfd3d4e4d2056bbac5df81eff0 Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Mon, 19 Dec 2022 07:39:24 -0800 Subject: [PATCH] Fix for #872, duplicate results with --exif (and --name) (#876) --- osxphotos/photosdb/photosdb.py | 4 ++-- tests/test_cli.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/osxphotos/photosdb/photosdb.py b/osxphotos/photosdb/photosdb.py index 9b5a6590..bb030da7 100644 --- a/osxphotos/photosdb/photosdb.py +++ b/osxphotos/photosdb/photosdb.py @@ -3391,7 +3391,7 @@ class PhotosDB: if n in p.filename or n in p.original_filename ] ) - photos = photo_list + photos = list(set(photo_list)) if options.min_size: photos = [ @@ -3498,7 +3498,7 @@ class PhotosDB: exifdata_value = str(exifdata_value) if exifvalue in exifdata_value: matching_photos.append(p) - photos = matching_photos + photos = list(set(matching_photos)) if options.added_after: added_after = options.added_after diff --git a/tests/test_cli.py b/tests/test_cli.py index 6728df86..e3b8b3a8 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -993,6 +993,9 @@ FILE_FAVORITE = "wedding.jpg" UUID_NOT_FAVORITE = "1EB2B765-0765-43BA-A90C-0D0580E6172C" FILE_NOT_FAVORITE = "Pumpkins3.jpg" +# number of photos in test library with Make=Canon +EXIF_MAKE_CANON = 7 + def modify_file(filename): """appends data to a file to modify it""" @@ -1385,6 +1388,33 @@ def test_query_exif_case_insensitive(exiftag, exifvalue, uuid_expected): assert sorted(uuid_got) == sorted(uuid_expected) +@pytest.mark.skipif(exiftool is None, reason="exiftool not installed") +def test_query_exif_multiple(): + """Test query with multiple --exif options, #873""" + + runner = CliRunner() + cwd = os.getcwd() + result = runner.invoke( + query, + [ + "--json", + "--db", + os.path.join(cwd, CLI_PHOTOS_DB), + "--exif", + "Make", + "Canon", + "--exif", + "Model", + "Canon PowerShot G10", + ], + ) + assert result.exit_code == 0 + + # build list of uuids we got from the output JSON + json_got = json.loads(result.output) + assert len(json_got) == EXIF_MAKE_CANON + + def test_export(): """test basic export""" runner = CliRunner()