From c7e149f0f9f10b0ba220b4a13dde34805c7e638e Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Wed, 11 Sep 2024 20:40:36 -0500 Subject: [PATCH] Test updates --- osxphotos/cli/timewarp.py | 26 +- osxphotos/exifinfo.py | 9 +- osxphotos/exifwriter.py | 107 ++++-- osxphotos/photodates.py | 180 ++++++++- osxphotos/photoinfo.py | 46 +-- tests/README.md | 3 +- tests/conftest.py | 49 +++ tests/dt_utils.py | 12 + tests/sidecars/15uNd7%8RguTEgNPKHfTWw.json | 2 +- ...d7%8RguTEgNPKHfTWw_albums_as_keywords.json | 2 +- ...%8RguTEgNPKHfTWw_ignore_date_modified.json | 2 +- ...uNd7%8RguTEgNPKHfTWw_keyword_template.json | 2 +- .../15uNd7%8RguTEgNPKHfTWw_no_tag_groups.json | 2 +- ...7%8RguTEgNPKHfTWw_persons_as_keywords.json | 2 +- tests/sidecars/3Jn73XpSQQCluzRBMWRsMA.json | 2 +- ...3XpSQQCluzRBMWRsMA_albums_as_keywords.json | 2 +- ...pSQQCluzRBMWRsMA_ignore_date_modified.json | 2 +- ...n73XpSQQCluzRBMWRsMA_keyword_template.json | 2 +- .../3Jn73XpSQQCluzRBMWRsMA_no_tag_groups.json | 2 +- ...XpSQQCluzRBMWRsMA_persons_as_keywords.json | 2 +- .../6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.json | 2 +- ...-92BE-9BBBA308AAC4_albums_as_keywords.json | 2 +- ...2BE-9BBBA308AAC4_ignore_date_modified.json | 2 +- ...4C-92BE-9BBBA308AAC4_keyword_template.json | 2 +- ...-4D4C-92BE-9BBBA308AAC4_no_tag_groups.json | 2 +- ...92BE-9BBBA308AAC4_persons_as_keywords.json | 2 +- tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ.json | 2 +- ...NnzRQKGnK4uPrCJ9UQ_albums_as_keywords.json | 2 +- ...zRQKGnK4uPrCJ9UQ_ignore_date_modified.json | 2 +- ...xcNnzRQKGnK4uPrCJ9UQ_keyword_template.json | 2 +- .../6bxcNnzRQKGnK4uPrCJ9UQ_no_tag_groups.json | 2 +- ...nzRQKGnK4uPrCJ9UQ_persons_as_keywords.json | 2 +- tests/sidecars/8SOE9s0XQVGsuq4ONohTng.json | 2 +- ...9s0XQVGsuq4ONohTng_albums_as_keywords.json | 2 +- ...0XQVGsuq4ONohTng_ignore_date_modified.json | 2 +- ...OE9s0XQVGsuq4ONohTng_keyword_template.json | 2 +- .../8SOE9s0XQVGsuq4ONohTng_no_tag_groups.json | 2 +- ...s0XQVGsuq4ONohTng_persons_as_keywords.json | 2 +- .../A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C.json | 2 +- ...-9AC9-5AFEFE2D3A5C_albums_as_keywords.json | 2 +- ...AC9-5AFEFE2D3A5C_ignore_date_modified.json | 2 +- ...1F-9AC9-5AFEFE2D3A5C_keyword_template.json | 2 +- ...-431F-9AC9-5AFEFE2D3A5C_no_tag_groups.json | 2 +- ...9AC9-5AFEFE2D3A5C_persons_as_keywords.json | 2 +- .../D79B8D77-BFFC-460B-9312-034F2877D35B.json | 2 +- ...-9312-034F2877D35B_albums_as_keywords.json | 2 +- ...312-034F2877D35B_ignore_date_modified.json | 2 +- ...0B-9312-034F2877D35B_keyword_template.json | 2 +- ...-460B-9312-034F2877D35B_no_tag_groups.json | 2 +- ...9312-034F2877D35B_persons_as_keywords.json | 2 +- .../DC99FBDD-7A52-4100-A5BB-344131646C30.json | 2 +- ...-A5BB-344131646C30_albums_as_keywords.json | 2 +- ...5BB-344131646C30_ignore_date_modified.json | 2 +- ...00-A5BB-344131646C30_keyword_template.json | 2 +- ...-4100-A5BB-344131646C30_no_tag_groups.json | 2 +- ...A5BB-344131646C30_persons_as_keywords.json | 2 +- .../E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.json | 2 +- ...-A72B-8B8FAC227D51_albums_as_keywords.json | 2 +- ...72B-8B8FAC227D51_ignore_date_modified.json | 2 +- ...A1-A72B-8B8FAC227D51_keyword_template.json | 2 +- ...-40A1-A72B-8B8FAC227D51_no_tag_groups.json | 2 +- ...A72B-8B8FAC227D51_persons_as_keywords.json | 2 +- .../F12384F6-CD17-4151-ACBA-AE0E3688539E.json | 2 +- ...-ACBA-AE0E3688539E_albums_as_keywords.json | 2 +- ...CBA-AE0E3688539E_ignore_date_modified.json | 2 +- ...51-ACBA-AE0E3688539E_keyword_template.json | 2 +- ...-4151-ACBA-AE0E3688539E_no_tag_groups.json | 2 +- ...ACBA-AE0E3688539E_persons_as_keywords.json | 2 +- tests/test_cli.py | 5 +- tests/test_cli_timewarp.py | 1 + tests/test_exifwriter.py | 5 + tests/test_export_catalina_10_15_7.py | 37 +- tests/test_modified_date_mojave_10_14_6.py | 9 +- tests/test_mojave_10_14_6.py | 4 +- tests/test_photodates.py | 358 ++++++++++++++++++ tests/test_template.py | 2 +- 76 files changed, 812 insertions(+), 161 deletions(-) create mode 100644 tests/dt_utils.py create mode 100644 tests/test_photodates.py diff --git a/osxphotos/cli/timewarp.py b/osxphotos/cli/timewarp.py index ac02cfb64..cf3026a2a 100644 --- a/osxphotos/cli/timewarp.py +++ b/osxphotos/cli/timewarp.py @@ -80,7 +80,7 @@ def get_help(self, ctx): **Caution**: This app directly modifies your Photos library database using undocumented features. It may corrupt, damage, or destroy your Photos library. Use at your own caution. I strongly recommend you make a backup of your Photos library before using this script (e.g. use Time Machine). -## Examples +## Examples **Add 1 day to the date of each photo** @@ -130,7 +130,7 @@ def get_help(self, ctx): `osxphotos timewarp --compare-exif` -**Read the date/time/timezone from the photos' original EXIF metadata to update the photos' date/time/timezone; +**Read the date/time/timezone from the photos' original EXIF metadata to update the photos' date/time/timezone; if the EXIF data is missing, use the file modification date/time; show verbose output** `osxphotos timewarp --pull-exif --use-file-time --verbose` @@ -151,14 +151,14 @@ def get_help(self, ctx): - {n}: Match exactly n characters - {n,}: Match at least n characters - {n,m}: Match at least n characters and at most m characters -- In addition to `%%` for a literal `%`, the following format codes are supported: +- In addition to `%%` for a literal `%`, the following format codes are supported: `%^`, `%$`, `%*`, `%|`, `%{`, `%}` for `^`, `$`, `*`, `|`, `{`, `}` respectively - |: join multiple format codes; each code is tried in order until one matches -- Unlike the standard library, the leading zero is not optional for +- Unlike the standard library, the leading zero is not optional for %d, %m, %H, %I, %M, %S, %j, %U, %W, and %V - For optional leading zero, use %-d, %-m, %-H, %-I, %-M, %-S, %-j, %-U, %-W, and %-V -For more information on strptime format codes, see: +For more information on strptime format codes, see: https://docs.python.org/3/library/datetime.html?highlight=strptime#strftime-and-strptime-format-codes **Note**: The time zone of the parsed date/time is assumed to be the local time zone. @@ -244,6 +244,13 @@ def get_help(self, ctx): "This changes the date added or imported date in Photos but " "does not change the date/time/timezone of the photo itself. ", ) +@click.option( + "--reset", + "-R", + is_flag=True, + help="Reset date/time/timezone for selected photos to the original values. " + "This only works on macOS >= 13.0 (Ventura).", +) @click.option( "--inspect", "-i", @@ -405,6 +412,7 @@ def timewarp( plain, timestamp, force, + reset, ): """Adjust date/time/timezone of photos in Apple Photos. @@ -429,6 +437,7 @@ def timewarp( parse_date, pull_exif, push_exif, + reset, time_delta, time, timezone, @@ -437,7 +446,7 @@ def timewarp( raise click.UsageError( "At least one of --date, --date-delta, --time, --time-delta, " "--timezone, --inspect, --compare-exif, --push-exif, --pull-exif, " - "--parse-date, --function, --date-added, or --date-added-from-photo " + "--parse-date, --reset, --function, --date-added, or --date-added-from-photo " "must be specified." ) @@ -453,6 +462,8 @@ def timewarp( if add_to_album and not compare_exif: raise click.UsageError("--add-to-album must be used with --compare-exif.") + # ZZZ add check for --reset and Photos >= 8 , warn if not supported + verbose = verbose_print(verbose=verbose_flag, timestamp=timestamp, theme=theme) if any([compare_exif, push_exif, pull_exif]): @@ -491,6 +502,7 @@ def timewarp( parse_date, pull_exif, push_exif, + reset, time_delta, time, timezone, @@ -575,7 +587,7 @@ def timewarp( tz_seconds, tz_str, tz_name = tzinfo.get_timezone(photo) photo_date_local = datetime_naive_to_local(photo.date) photo_date_tz = datetime_to_new_tz(photo_date_local, tz_seconds) - date_added = datetime_naive_to_local(get_photo_date_added_(photo)) + date_added = get_photo_date_added_(photo) echo( f"[filename]{photo.filename}[/filename], [uuid]{photo.uuid}[/uuid], " f"[time]{photo_date_local.strftime(DATETIME_FORMAT)}[/time], " diff --git a/osxphotos/exifinfo.py b/osxphotos/exifinfo.py index 7a48a710a..759a2d772 100644 --- a/osxphotos/exifinfo.py +++ b/osxphotos/exifinfo.py @@ -65,10 +65,13 @@ def exifinfo_factory(data: dict[str, Any] | None) -> ExifInfo: codec=data["ZCODEC"], lens_model=data["ZLENSMODEL"], # ZDATECREATED, ZTIMEZONEOFFSET, ZTIMEZONENAME added in Ventura / Photos 8 so may not be present - date=photos_datetime( - data.get("ZDATECREATED"), data.get("ZTIMEZONEOFFSET"), default=False - ), tzoffset=data.get("ZTIMEZONEOFFSET"), tzname=data.get("ZTIMEZONENAME"), + date=photos_datetime( + data.get("ZDATECREATED"), + data.get("ZTIMEZONEOFFSET"), + data.get("ZTIMEZONENAME"), + default=False, + ), ) return exif_info diff --git a/osxphotos/exifwriter.py b/osxphotos/exifwriter.py index 241fe068a..39b097620 100644 --- a/osxphotos/exifwriter.py +++ b/osxphotos/exifwriter.py @@ -4,6 +4,7 @@ import contextlib import dataclasses +import datetime import json import logging import os @@ -13,7 +14,7 @@ from typing import TYPE_CHECKING, Any from ._constants import _MAX_IPTC_KEYWORD_LEN, _OSXPHOTOS_NONE_SENTINEL, _UNKNOWN_PERSON -from .datetime_utils import datetime_tz_to_utc +from .datetime_utils import datetime_has_tz, datetime_tz_to_utc from .exiftool import ExifTool, ExifToolCaching from .exportoptions import ExportOptions from .phototemplate import RenderOptions @@ -226,8 +227,11 @@ def exiftool_dict( EXIF:GPSLatitude, EXIF:GPSLongitude EXIF:GPSPosition EXIF:DateTimeOriginal - EXIF:OffsetTimeOriginal + EXIF:SubSecTimeOriginal + EXIF:OffsetTimeOriginal (UTC offset for DateTimeOriginal) EXIF:ModifyDate + EXIF:SubSecTime + EXIF:OffsetTime (UTC offset for ModifyDate) IPTC:DateCreated IPTC:TimeCreated QuickTime:CreationDate @@ -417,18 +421,16 @@ def exiftool_dict( if options.datetime: date = self.photo.date - offsettime = date.strftime("%z") - # find timezone offset in format "-04:00" - offset = re.findall(r"([+-]?)([\d]{2})([\d]{2})", offsettime) - offset = offset[0] # findall returns list of tuples - offsettime = f"{offset[0]}{offset[1]}:{offset[2]}" + offsettime = utc_offset_time(date) + subsec = subsec_time(date) # exiftool expects format to "2015:01:18 12:00:00" - datetimeoriginal = date.strftime("%Y:%m:%d %H:%M:%S") + datetimeoriginal = exiftool_datetime(date) if self.photo.isphoto: exif["EXIF:DateTimeOriginal"] = datetimeoriginal exif["EXIF:CreateDate"] = datetimeoriginal + exif["EXIF:SubSecTimeOriginal"] = subsec exif["EXIF:OffsetTimeOriginal"] = offsettime dateoriginal = date.strftime("%Y:%m:%d") @@ -441,13 +443,15 @@ def exiftool_dict( self.photo.date_modified is not None and not options.ignore_date_modified ): - exif["EXIF:ModifyDate"] = self.photo.date_modified.strftime( - "%Y:%m:%d %H:%M:%S" + exif["EXIF:ModifyDate"] = exiftool_datetime( + self.photo.date_modified ) + exif["EXIF:SubSecTime"] = subsec_time(self.photo.date_modified) + exif["EXIF:OffsetTime"] = utc_offset_time(self.photo.date_modified) else: - exif["EXIF:ModifyDate"] = self.photo.date.strftime( - "%Y:%m:%d %H:%M:%S" - ) + exif["EXIF:ModifyDate"] = exiftool_datetime(self.photo.date) + exif["EXIF:SubSectime"] = subsec + exif["EXIF:OffsetTime"] = offsettime elif self.photo.ismovie: # QuickTime spec specifies times in UTC # QuickTime:CreateDate and ModifyDate are in UTC w/ no timezone @@ -462,14 +466,14 @@ def exiftool_dict( exif["QuickTime:ContentCreateDate"] = f"{datetimeoriginal}{offsettime}" date_utc = datetime_tz_to_utc(date) - creationdate = date_utc.strftime("%Y:%m:%d %H:%M:%S") + creationdate = exiftool_datetime(date_utc) exif["QuickTime:CreateDate"] = creationdate if self.photo.date_modified is None or options.ignore_date_modified: exif["QuickTime:ModifyDate"] = creationdate else: exif["QuickTime:ModifyDate"] = datetime_tz_to_utc( - self.photo.date_modified - ).strftime("%Y:%m:%d %H:%M:%S") + exiftool_datetime(self.photo.date_modified) + ) # if photo in PNG remove any IPTC tags (#1031) if self.photo.isphoto and self.photo.uti == "public.png": @@ -528,28 +532,44 @@ def exiftool_json_sidecar( Returns: JSON string for dict with exiftool tags / values Exports the following: - EXIF:ImageDescription + EXIF:ImageDescription (may include template) XMP:Description (may include template) - IPTC:CaptionAbstract XMP:Title IPTC:ObjectName - XMP:TagsList + XMP:TagsList (may include album name, person name, or template) IPTC:Keywords (may include album name, person name, or template) - XMP:Subject (set to keywords + person) + IPTC:Caption-Abstract + XMP:Subject (set to keywords + persons) XMP:PersonInImage EXIF:GPSLatitudeRef, EXIF:GPSLongitudeRef EXIF:GPSLatitude, EXIF:GPSLongitude EXIF:GPSPosition EXIF:DateTimeOriginal - EXIF:OffsetTimeOriginal + EXIF:SubSecTimeOriginal + EXIF:OffsetTimeOriginal (UTC offset for DateTimeOriginal) EXIF:ModifyDate - IPTC:DigitalCreationDate + EXIF:SubSecTime + EXIF:OffsetTime (UTC offset for ModifyDate) IPTC:DateCreated + IPTC:TimeCreated QuickTime:CreationDate + QuickTime:ContentCreateDate QuickTime:CreateDate (UTC) QuickTime:ModifyDate (UTC) QuickTime:GPSCoordinates UserData:GPSCoordinates + XMP:Rating + XMP:RegionAppliedToDimensionsW + XMP:RegionAppliedToDimensionsH + XMP:RegionAppliedToDimensionsUnit + XMP:RegionName + XMP:RegionType + XMP:RegionAreaX + XMP:RegionAreaY + XMP:RegionAreaW + XMP:RegionAreaH + XMP:RegionAreaUnit + XMP:RegionPersonDisplayName """ options = options or ExifOptions() @@ -564,3 +584,46 @@ def exiftool_json_sidecar( exif = exif_new return json.dumps([exif]) + + +def utc_offset_time(dt: datetime.datetime) -> str: + """Find the UTC offset for a datetime in format expected by exiftool (+/-HH:MM) + + Args: + dt: datetime object to find offset for + + Returns: string with offset in format "+/-HH:MM + + Raises: + ValueError if datetime is not timezone aware or if timezone cannot be determined + """ + if not datetime_has_tz(dt): + raise ValueError("datetime must be timezone aware") + offsettime = dt.strftime("%z") + offset = re.findall(r"([+-]?)([\d]{2})([\d]{2})", offsettime) + if not offset: + raise ValueError(f"could not parse timezone from datetime {dt}") + offset = offset[0] # findall returns list of tuples + if len(offset) != 3: + raise ValueError(f"could not parse timezone from datetime {dt}") + offsettime = f"{offset[0]}{offset[1]}:{offset[2]}" + return offsettime + + +def exiftool_datetime(dt: datetime.datetime) -> str: + """Format a datetime to the format expected by exiftool (YYYY:MM:DD HH:MM:SS) + + Args: + dt: datetime to format + + Returns: string formatted as date/time value expected by exiftool in YYYY:MM:DD HH:MM:SS format + """ + return dt.strftime("%Y:%m:%d %H:%M:%S") + + +def subsec_time(dt: datetime.datetime) -> str: + """Return sub-second time as a string as expected by exiftool for EXIF:SubSecTime""" + # strftime("%f") returns microseconds but only want milliseconds + # if sub-second time is 0, it will return all zeros + # strip off trailing zeroes + return dt.strftime("%f")[:-3].rstrip("0") diff --git a/osxphotos/photodates.py b/osxphotos/photodates.py index d2da6e5dd..75c5089ce 100644 --- a/osxphotos/photodates.py +++ b/osxphotos/photodates.py @@ -3,6 +3,7 @@ from __future__ import annotations import datetime +import os import pathlib import sqlite3 from typing import Callable @@ -19,6 +20,7 @@ datetime_utc_to_local, utc_offset_seconds, ) +from .photos_datetime import photos_datetime, photos_datetime_local from .photosdb.photosdb_utils import get_photos_library_version from .phototz import PhotoTimeZone, PhotoTimeZoneUpdater from .timeutils import update_datetime @@ -28,6 +30,11 @@ MACOS_TIME_EPOCH = datetime.datetime(2001, 1, 1, 0, 0, 0) +def reset_photo_date_time_tz(photo: photoscript.Photo, verbose: Callable[..., None]): + """Reset the date/time/timezone of a photo to the original values""" + ... + + def update_photo_date_time( photo: photoscript.Photo, date, @@ -212,10 +219,23 @@ def set_photo_date_added( stop=stop_after_attempt(10), ) def _set_date_added(library_path: str, uuid: str, date_added: datetime.datetime): - """Set the ADDEDDATE of a photo""" + """Set the ADDEDDATE of a photo + + Args: + library_path: Path to Photos library + uuid: UUID of photo + date_added: New date added for photo + + Raises: + FileNotFoundError: If Photos library path is not found or Photos database is not found + """ # Use retry decorator to retry if database is locked + if not os.path.exists(library_path): + raise FileNotFoundError(f"Photos library path not found: {library_path}") photos_version = get_photos_library_version(library_path) db_path = str(pathlib.Path(library_path) / "database/Photos.sqlite") + if not os.path.exists(db_path): + raise FileNotFoundError(f"Photos database not found: {db_path}") asset_table = _DB_TABLE_NAMES[photos_version]["ASSET"] timestamp = datetime_to_photos_timestamp(date_added) @@ -242,38 +262,176 @@ def _get_photos_library_path(library_path: str | None = None) -> str: return library_path -def datetime_to_photos_timestamp(dt: datetime.datetime) -> int: - """Convert datetime to Photos timestamp (seconds since 2001-01-01)""" - return int((dt - MACOS_TIME_EPOCH).total_seconds()) +def datetime_to_photos_timestamp(dt: datetime.datetime) -> float: + """Convert naive datetime to Photos timestamp (seconds since 2001-01-01)""" + return float((dt - MACOS_TIME_EPOCH).total_seconds()) + + +@retry( + wait=wait_exponential(multiplier=1, min=0.100, max=5), + stop=stop_after_attempt(5), +) +def get_photo_date_added( + photo: photoscript.Photo, + library_path: str | None = None, +) -> datetime.datetime | None: + """Get the ADDEDDATE of a photo + Args: + photo: Photo to get date added + library_path: Path to Photos library; if not provided, will attempt to determine automatically -def photos_timestamp_to_datetime(ts: int) -> datetime.datetime: - """Convert Photos timestamp (seconds since 2001-01-01) to datetime""" - return MACOS_TIME_EPOCH + datetime.timedelta(seconds=ts) + Returns: datetime.datetime: date added of photo or None if date added cannot be determined + + Raises: + ValueError if library_path is None and Photos library path cannot be determined + FileNotFoundError if Photos database path cannot be found + """ + + if not (library_path := _get_photos_library_path(library_path)): + raise ValueError("Could not determine Photos library path") + + photos_version = get_photos_library_version(library_path) + db_path = str(pathlib.Path(library_path) / "database/Photos.sqlite") + if not os.path.exists(db_path): + raise FileNotFoundError(f"Photos database not found at {db_path}") + asset_table = _DB_TABLE_NAMES[photos_version]["ASSET"] + conn = sqlite3.connect(db_path, check_same_thread=SQLITE_CHECK_SAME_THREAD) + c = conn.cursor() + c.execute( + f"SELECT ZADDEDDATE FROM {asset_table} WHERE ZUUID=?;", + (photo.uuid,), + ) + row = c.fetchone() + conn.close() + return photos_datetime_local(row[0]) @retry( wait=wait_exponential(multiplier=1, min=0.100, max=5), stop=stop_after_attempt(5), ) -def get_photo_date_added( +def _get_photo_date_original( photo: photoscript.Photo, library_path: str | None = None, ) -> datetime.datetime | None: - """Get the ADDEDDATE of a photo""" + """Get the original date of a photo as timezone aware datetime + (date Photos recorded as creation date at import) or None if not found + + Args: + photo: photoscript.Photo object + library_path: path to Photos library or None to use last opened library + + Raises: + ValueError if library_path is None and Photos library path cannot be determined + FileNotFoundError if Photos database path cannot be found + """ if not (library_path := _get_photos_library_path(library_path)): raise ValueError("Could not determine Photos library path") photos_version = get_photos_library_version(library_path) db_path = str(pathlib.Path(library_path) / "database/Photos.sqlite") + if not os.path.exists(db_path): + raise FileNotFoundError(f"Photos database not found at {db_path}") + asset_table = _DB_TABLE_NAMES[photos_version]["ASSET"] + conn = sqlite3.connect(db_path, check_same_thread=SQLITE_CHECK_SAME_THREAD) + c = conn.cursor() + try: + c.execute( + f""" + SELECT + ZEXTENDEDATTRIBUTES.ZDATECREATED, + ZEXTENDEDATTRIBUTES.ZTIMEZONEOFFSET, + ZEXTENDEDATTRIBUTES.ZTIMEZONENAME + FROM ZEXTENDEDATTRIBUTES + JOIN {asset_table} + ON ZEXTENDEDATTRIBUTES.ZASSET = {asset_table}.Z_PK + WHERE {asset_table}.ZUUID = ?; + """, + (photo.uuid,), + ) + row = c.fetchone() + except sqlite3.OperationalError as e: + # error will be no such column: ZEXTENDEDATTRIBUTES.ZDATECREATED + # if on Photos < 8.0 / Ventura + if "ZEXTENDEDATTRIBUTES.ZDATECREATED" in str(e): + row = None + else: + raise e + conn.close() + if row and row[0] is not None: + return photos_datetime(timestamp=row[0], tzoffset=row[1], tzname=row[2]) + else: + return None + + +@retry( + wait=wait_exponential(multiplier=1, min=0.100, max=5), + stop=stop_after_attempt(5), +) +def _get_photo_date_created( + photo: photoscript.Photo, + library_path: str | None = None, +) -> datetime.datetime: + """Get the creation date of a photo as timezone aware datetime or default date if not found or error converting date + + Args: + photo: photoscript.Photo object + library_path: path to Photos library or None to use last opened library + + Raises: + ValueError if library_path is None and Photos library path cannot be determined + FileNotFoundError if Photos database path cannot be found + """ + + if not (library_path := _get_photos_library_path(library_path)): + raise ValueError("Could not determine Photos library path") + + photos_version = get_photos_library_version(library_path) + db_path = str(pathlib.Path(library_path) / "database/Photos.sqlite") + if not os.path.exists(db_path): + raise FileNotFoundError(f"Photos database not found at {db_path}") asset_table = _DB_TABLE_NAMES[photos_version]["ASSET"] conn = sqlite3.connect(db_path, check_same_thread=SQLITE_CHECK_SAME_THREAD) c = conn.cursor() c.execute( - f"SELECT ZADDEDDATE FROM {asset_table} WHERE ZUUID=?", + f""" + SELECT + {asset_table}.ZDATECREATED, + ZADDITIONALASSETATTRIBUTES.ZTIMEZONEOFFSET, + ZADDITIONALASSETATTRIBUTES.ZTIMEZONENAME + FROM {asset_table} + JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = {asset_table}.Z_PK + WHERE {asset_table}.ZUUID = ?; + """, (photo.uuid,), ) row = c.fetchone() conn.close() - return photos_timestamp_to_datetime(row[0]) + if row and row[0] is not None: + return photos_datetime( + timestamp=row[0], tzoffset=row[1], tzname=row[2], default=True + ) + else: + return photos_datetime(None, default=True) + + +def get_photo_date_original( + photo: photoscript.Photo, + library_path: str | None = None, +) -> datetime.datetime | None: + """Get the original date of a photo as timezone aware datetime + (date Photos recorded as creation date at import) or None if not found + + Args: + photo: photoscript.Photo object + library_path: path to Photos library or None to use last opened library + + Raises: + ValueError if library_path is None and Photos library path cannot be determined + FileNotFoundError if Photos database path cannot be found + """ + return _get_photo_date_original(photo, library_path) or _get_photo_date_created( + photo, library_path + ) diff --git a/osxphotos/photoinfo.py b/osxphotos/photoinfo.py index be454abe5..10a9e6231 100644 --- a/osxphotos/photoinfo.py +++ b/osxphotos/photoinfo.py @@ -148,8 +148,8 @@ def date_original(self) -> datetime.datetime: @property def date_modified(self) -> datetime.datetime | None: - """Asset modification date as timezone aware datetime object - or None if no modification date set""" + """Asset modification date as timezone aware datetime.datetime object + in local timezone or None if no modification date set""" # Photos <= 4 provides no way to get date of adjustment and will update # lastmodifieddate anytime photo database record is updated (e.g. adding tags) @@ -158,17 +158,11 @@ def date_modified(self) -> datetime.datetime | None: if not self.hasadjustments and self._db._db_version <= _PHOTOS_4_VERSION: return None - if imagedate := self._info["lastmodifieddate"]: - seconds = self._info["imageTimeZoneOffsetSeconds"] or 0 - delta = timedelta(seconds=seconds) - tz = timezone(delta) - return imagedate.astimezone(tz=tz) - else: - return None + return self._info["lastmodifieddate"] or None @property def tzoffset(self) -> int: - """timezone offset from UTC in seconds""" + """timezone offset from UTC in seconds for the Photo creation date""" return self._info["imageTimeZoneOffsetSeconds"] @property @@ -784,34 +778,18 @@ def intrash(self) -> bool: @property def date_trashed(self) -> datetime.datetime | None: - """Date asset was placed in the trash or None""" - # TODO: add add_timezone(dt, offset_seconds) to datetime_utils - # also update date_modified - trasheddate = self._info["trasheddate"] - if trasheddate: - seconds = self._info["imageTimeZoneOffsetSeconds"] or 0 - delta = timedelta(seconds=seconds) - tz = timezone(delta) - return trasheddate.astimezone(tz=tz) - else: - return None + """Date asset was placed in the trash or None. + + Returns a timezone aware datetime.datetime object in the local timezone.""" + return self._info["trasheddate"] or None @property def date_added(self) -> datetime.datetime | None: - """Date photo was added to the database""" - try: - return self._date_added - except AttributeError: - added_date = self._info["added_date"] - if added_date: - seconds = self._info["imageTimeZoneOffsetSeconds"] or 0 - delta = timedelta(seconds=seconds) - tz = timezone(delta) - self._date_added = added_date.astimezone(tz=tz) - else: - self._date_added = None + """Date photo was added to the database or None if no added date is recorded. - return self._date_added + Returns a timezone aware datetime.datetime object in the local timezone + """ + return self._info["added_date"] or None @property def location(self) -> tuple[float, float] | tuple[None, None]: diff --git a/tests/README.md b/tests/README.md index 6e650a575..ac60ff8c7 100644 --- a/tests/README.md +++ b/tests/README.md @@ -29,7 +29,8 @@ Some tests require GPU and will look for `OSXPHOTOS_TEST_CONVERT=1`. These will A couple of tests require interaction with Photos and configuring a specific test library. Currently these run only on Catalina. The tests must be specified by using a pytest flag. Only one of these interactive tests can be run at a time. The current flags are: --addalbum: test --add-to-album options (pytest -vv tests/test_photosalbum_unicode.py tests/test_cli_add_to_album.py --addalbum) ---timewarp: test `osxphotos timewarp` (pytest -vv --timewarp tests/test_cli_timewarp.py) +--timewarp: test `osxphotos timewarp` (pytest -vv --timewarp tests/test_cli_timewarp.py tests/test_photodates.py) +--photodates: test `osxphotos photodates` (pytest -vv --photodates tests/test_photodates.py) --test-import: test `osxphotos import` (pytest -vv --test-import tests/test_cli_import.py) --test-sync: test `osxphotos sync` (pytest -vv --test-sync tests/test_cli_sync.py) --test-add-locations: test `osxphotos add-locations` (pytest -vv --test-add-locations tests/test_cli_add_locations.py) diff --git a/tests/conftest.py b/tests/conftest.py index 6102734af..8cb82adb7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,6 +9,11 @@ import pytest +from osxphotos.datetime_utils import ( + datetime_naive_to_local, + datetime_remove_tz, + get_local_tz, +) from osxphotos.platform import is_macos if is_macos: @@ -23,6 +28,9 @@ # run timewarp tests (configured with --timewarp) TEST_TIMEWARP = False +# run photodates tests (configured with --photodates) +TEST_PHOTODATES = False + # run import tests (configured with --test-import) TEST_IMPORT = False @@ -67,6 +75,8 @@ def get_os_version(): return (ver, major, minor) +# Configure test libraries for different OS versions +# TODO: this is hacky and should be refactored OS_VER = get_os_version() if is_macos else [None, None] if OS_VER[0] == "10" and OS_VER[1] == "15": # Catalina @@ -76,6 +86,8 @@ def get_os_version(): TEST_LIBRARY_TAKOUT = None from tests.config_timewarp_catalina import TEST_LIBRARY_TIMEWARP + TEST_LIBRARY_PHOTODATES = TEST_LIBRARY + TEST_LIBRARY_ADD_LOCATIONS = None elif OS_VER[0] == "13": # Ventura @@ -85,6 +97,8 @@ def get_os_version(): TEST_LIBRARY_TAKEOUT = "tests/Test-Empty-Library-Ventura-13-5.photoslibrary" from tests.config_timewarp_ventura import TEST_LIBRARY_TIMEWARP + TEST_LIBRARY_PHOTODATES = TEST_LIBRARY + TEST_LIBRARY_ADD_LOCATIONS = "tests/Test-13.0.0.photoslibrary" else: TEST_LIBRARY = None @@ -92,6 +106,7 @@ def get_os_version(): TEST_LIBRARY_SYNC = None TEST_LIBRARY_ADD_LOCATIONS = None TEST_LIBRARY_TAKEOUT = None + TEST_LIBRARY_PHOTODATES = None @pytest.fixture(scope="session", autouse=is_macos) @@ -101,6 +116,13 @@ def setup_photos_timewarp(): copy_photos_library(TEST_LIBRARY_TIMEWARP, delay=LIBRARY_COPY_DELAY) +@pytest.fixture(scope="session", autouse=is_macos) +def setup_photos_photodates(): + if not TEST_PHOTODATES: + return + copy_photos_library(TEST_LIBRARY_PHOTODATES, delay=LIBRARY_COPY_DELAY) + + @pytest.fixture(scope="session", autouse=is_macos) def setup_photos_import(): if not TEST_IMPORT: @@ -145,6 +167,12 @@ def pytest_addoption(parser): parser.addoption( "--timewarp", action="store_true", default=False, help="run --timewarp tests" ) + parser.addoption( + "--photodates", + action="store_true", + default=False, + help="run --photodates tests", + ) parser.addoption( "--test-import", action="store_true", @@ -185,6 +213,7 @@ def pytest_configure(config): for x in [ config.getoption("--addalbum"), config.getoption("--timewarp"), + config.getoption("--photodates"), config.getoption("--test-import"), config.getoption("--test-import-takeout"), config.getoption("--test-sync"), @@ -204,6 +233,9 @@ def pytest_configure(config): config.addinivalue_line( "markers", "timewarp: mark test as requiring --timewarp to run" ) + config.addinivalue_line( + "markers", "photodates: mark test as requiring --photodates to run" + ) config.addinivalue_line( "markers", "test_import: mark test as requiring --test-import to run" ) @@ -227,6 +259,10 @@ def pytest_configure(config): global TEST_TIMEWARP TEST_TIMEWARP = True + if config.getoption("--photodates"): + global TEST_PHOTODATES + TEST_PHOTODATES = True + if config.getoption("--test-import"): global TEST_IMPORT TEST_IMPORT = True @@ -265,6 +301,12 @@ def pytest_collection_modifyitems(config, items): if "timewarp" in item.keywords: item.add_marker(skip_timewarp) + if not (config.getoption("--photodates") and TEST_LIBRARY_PHOTODATES is not None): + skip_photodates = pytest.mark.skip(reason="need --photodates option to run") + for item in items: + if "photodates" in item.keywords: + item.add_marker(skip_photodates) + if not (config.getoption("--test-import") and TEST_LIBRARY_IMPORT is not None): skip_test_import = pytest.mark.skip(reason="need --test-import option to run") for item in items: @@ -429,6 +471,13 @@ def set_tz_pacific(): yield +@pytest.fixture +def set_tz_central(): + timezone = "US/Central" + with set_timezone(timezone): + yield + + @pytest.fixture def set_tz_cest(): timezone = "CEST" diff --git a/tests/dt_utils.py b/tests/dt_utils.py new file mode 100644 index 000000000..b0b90b6e2 --- /dev/null +++ b/tests/dt_utils.py @@ -0,0 +1,12 @@ +"""Utilities for working with datetime values in tests""" + +import datetime + +from osxphotos.datetime_utils import datetime_naive_to_local, datetime_remove_tz + + +def dt_to_local(dt: datetime.datetime) -> datetime.datetime: + """Convert a datetime local timezone without changing the time""" + dt = datetime_remove_tz(dt) + dt = datetime_naive_to_local(dt) + return dt diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw.json index 1972d34be..068b63429 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_albums_as_keywords.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_albums_as_keywords.json index 1c1572350..88086f474 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_albums_as_keywords.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:Subject": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:TagsList": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:Subject": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:TagsList": ["AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_ignore_date_modified.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_ignore_date_modified.json index 1972d34be..068b63429 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_ignore_date_modified.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_keyword_template.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_keyword_template.json index a9994d8fb..15c72c94d 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_keyword_template.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:Subject": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:TagsList": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:Subject": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:TagsList": ["Folder1/SubFolder2/AlbumInFolder", "Kids", "Pumpkin Farm", "Test Album (1)"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_no_tag_groups.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_no_tag_groups.json index 62f96339e..bbaad7972 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_no_tag_groups.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Girl holding pumpkin", "Description": "Girl holding pumpkin", "Caption-Abstract": "Girl holding pumpkin", "Title": "I found one!", "ObjectName": "I found one!", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie"], "RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 16:07:07", "CreateDate": "2018:09:28 16:07:07", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "16:07:07-04:00", "ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"ImageDescription": "Girl holding pumpkin", "Description": "Girl holding pumpkin", "Caption-Abstract": "Girl holding pumpkin", "Title": "I found one!", "ObjectName": "I found one!", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie"], "RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 16:07:07", "CreateDate": "2018:09:28 16:07:07", "SubSecTimeOriginal": "", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "16:07:07-04:00", "ModifyDate": "2018:09:28 16:07:07", "SubSectime": "", "OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_persons_as_keywords.json b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_persons_as_keywords.json index 833e900fd..135d00dc8 100644 --- a/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_persons_as_keywords.json +++ b/tests/sidecars/15uNd7%8RguTEgNPKHfTWw_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Katie", "Kids"], "XMP:Subject": ["Katie", "Kids"], "XMP:TagsList": ["Katie", "Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Katie", "Kids"], "XMP:Subject": ["Katie", "Kids"], "XMP:TagsList": ["Katie", "Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5832663178443909, "Y": 0.27730926126241684, "W": 0.24365156888961792, "H": 0.16239472242887132, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA.json index 96df97c57..4b627f631 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:43:45"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:43:45", "EXIF:SubSecTime": "714", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_albums_as_keywords.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_albums_as_keywords.json index 96df97c57..4b627f631 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_albums_as_keywords.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_albums_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:43:45"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:43:45", "EXIF:SubSecTime": "714", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_ignore_date_modified.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_ignore_date_modified.json index 2e6cbb015..bc1144a3c 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_ignore_date_modified.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_ignore_date_modified.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2018:10:13 09:18:12"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2018:10:13 09:18:12", "EXIF:SubSectime": "501", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_keyword_template.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_keyword_template.json index 96df97c57..4b627f631 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_keyword_template.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_keyword_template.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:43:45"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:43:45", "EXIF:SubSecTime": "714", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_no_tag_groups.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_no_tag_groups.json index 278453af2..ca7d85afc 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_no_tag_groups.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_no_tag_groups.json @@ -1 +1 @@ -[{"Title": "St. James's Park", "ObjectName": "St. James's Park", "Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "GPSLatitude": 51.50357167, "GPSLongitude": -0.1318055, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:10:13 09:18:12", "CreateDate": "2018:10:13 09:18:12", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:10:13", "TimeCreated": "09:18:12-04:00", "ModifyDate": "2019:12:01 11:43:45"}] \ No newline at end of file +[{"Title": "St. James's Park", "ObjectName": "St. James's Park", "Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "GPSLatitude": 51.50357167, "GPSLongitude": -0.1318055, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:10:13 09:18:12", "CreateDate": "2018:10:13 09:18:12", "SubSecTimeOriginal": "501", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:10:13", "TimeCreated": "09:18:12-04:00", "ModifyDate": "2019:12:01 09:43:45", "SubSecTime": "714", "OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_persons_as_keywords.json b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_persons_as_keywords.json index 96df97c57..4b627f631 100644 --- a/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_persons_as_keywords.json +++ b/tests/sidecars/3Jn73XpSQQCluzRBMWRsMA_persons_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:43:45"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:43:45", "EXIF:SubSecTime": "714", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.json index 92cf89fb4..172c68d70 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 23:39:38"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 22:39:38", "EXIF:SubSecTime": "402", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_albums_as_keywords.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_albums_as_keywords.json index 92cf89fb4..172c68d70 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_albums_as_keywords.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 23:39:38"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 22:39:38", "EXIF:SubSecTime": "402", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_ignore_date_modified.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_ignore_date_modified.json index 0c0332c8b..c48418a46 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_ignore_date_modified.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2019:07:04 16:24:01"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2019:07:04 16:24:01", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_keyword_template.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_keyword_template.json index 92cf89fb4..172c68d70 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_keyword_template.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 23:39:38"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 22:39:38", "EXIF:SubSecTime": "402", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_no_tag_groups.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_no_tag_groups.json index 5bf27190e..096c9222d 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_no_tag_groups.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Wedding tulips", "Description": "Wedding tulips", "Caption-Abstract": "Wedding tulips", "Title": "Tulips tied together at a flower shop", "ObjectName": "Tulips tied together at a flower shop", "Keywords": ["flowers", "wedding"], "Subject": ["flowers", "wedding"], "TagsList": ["flowers", "wedding"], "DateTimeOriginal": "2019:07:04 16:24:01", "CreateDate": "2019:07:04 16:24:01", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:07:04", "TimeCreated": "16:24:01-04:00", "ModifyDate": "2020:05:28 23:39:38"}] \ No newline at end of file +[{"ImageDescription": "Wedding tulips", "Description": "Wedding tulips", "Caption-Abstract": "Wedding tulips", "Title": "Tulips tied together at a flower shop", "ObjectName": "Tulips tied together at a flower shop", "Keywords": ["flowers", "wedding"], "Subject": ["flowers", "wedding"], "TagsList": ["flowers", "wedding"], "DateTimeOriginal": "2019:07:04 16:24:01", "CreateDate": "2019:07:04 16:24:01", "SubSecTimeOriginal": "", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:07:04", "TimeCreated": "16:24:01-04:00", "ModifyDate": "2020:05:28 22:39:38", "SubSecTime": "402", "OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_persons_as_keywords.json b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_persons_as_keywords.json index 92cf89fb4..172c68d70 100644 --- a/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_persons_as_keywords.json +++ b/tests/sidecars/6191423D-8DB8-4D4C-92BE-9BBBA308AAC4_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 23:39:38"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Wedding tulips", "XMP:Description": "Wedding tulips", "IPTC:Caption-Abstract": "Wedding tulips", "XMP:Title": "Tulips tied together at a flower shop", "IPTC:ObjectName": "Tulips tied together at a flower shop", "IPTC:Keywords": ["flowers", "wedding"], "XMP:Subject": ["flowers", "wedding"], "XMP:TagsList": ["flowers", "wedding"], "EXIF:DateTimeOriginal": "2019:07:04 16:24:01", "EXIF:CreateDate": "2019:07:04 16:24:01", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:07:04", "IPTC:TimeCreated": "16:24:01-04:00", "EXIF:ModifyDate": "2020:05:28 22:39:38", "EXIF:SubSecTime": "402", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ.json index 7b39d75d3..32ae91020 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:27 01:30:16"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:26 23:30:16", "EXIF:SubSecTime": "681", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_albums_as_keywords.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_albums_as_keywords.json index 7b39d75d3..32ae91020 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_albums_as_keywords.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:27 01:30:16"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:26 23:30:16", "EXIF:SubSecTime": "681", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_ignore_date_modified.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_ignore_date_modified.json index 3340a2fb7..5cf3c24da 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_ignore_date_modified.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:04:15 14:40:24"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:04:15 14:40:24", "EXIF:SubSectime": "086", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_keyword_template.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_keyword_template.json index 7b39d75d3..32ae91020 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_keyword_template.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:27 01:30:16"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["wedding"], "XMP:Subject": ["wedding"], "XMP:TagsList": ["wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:26 23:30:16", "EXIF:SubSecTime": "681", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_no_tag_groups.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_no_tag_groups.json index a2403a190..145be6e8c 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_no_tag_groups.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Bride Wedding day", "Description": "Bride Wedding day", "Caption-Abstract": "Bride Wedding day", "Keywords": ["wedding"], "Subject": ["wedding"], "TagsList": ["wedding"], "PersonInImage": ["Maria"], "RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "DateTimeOriginal": "2019:04:15 14:40:24", "CreateDate": "2019:04:15 14:40:24", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:04:15", "TimeCreated": "14:40:24-04:00", "ModifyDate": "2019:11:27 01:30:16"}] \ No newline at end of file +[{"ImageDescription": "Bride Wedding day", "Description": "Bride Wedding day", "Caption-Abstract": "Bride Wedding day", "Keywords": ["wedding"], "Subject": ["wedding"], "TagsList": ["wedding"], "PersonInImage": ["Maria"], "RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "DateTimeOriginal": "2019:04:15 14:40:24", "CreateDate": "2019:04:15 14:40:24", "SubSecTimeOriginal": "086", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:04:15", "TimeCreated": "14:40:24-04:00", "ModifyDate": "2019:11:26 23:30:16", "SubSecTime": "681", "OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_persons_as_keywords.json b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_persons_as_keywords.json index da40a5fcb..347f6ed11 100644 --- a/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_persons_as_keywords.json +++ b/tests/sidecars/6bxcNnzRQKGnK4uPrCJ9UQ_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:27 01:30:16"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.40229974687099457, "Y": 0.41379398107528687, "W": 0.3420099108278517, "H": 0.39389216899871826, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:11:26 23:30:16", "EXIF:SubSecTime": "681", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng.json index 8865a6b51..b51de14ea 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_albums_as_keywords.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_albums_as_keywords.json index 85a2e44f7..71f0a7d5b 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_albums_as_keywords.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_ignore_date_modified.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_ignore_date_modified.json index 8865a6b51..b51de14ea 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_ignore_date_modified.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_keyword_template.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_keyword_template.json index 85a2e44f7..71f0a7d5b 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_keyword_template.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_no_tag_groups.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_no_tag_groups.json index 9de395c26..20a1faaea 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_no_tag_groups.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Girls with pumpkins", "Description": "Girls with pumpkins", "Caption-Abstract": "Girls with pumpkins", "Title": "Can we carry this?", "ObjectName": "Can we carry this?", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie", "Suzy"], "RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 15:35:49", "CreateDate": "2018:09:28 15:35:49", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:35:49-04:00", "ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"ImageDescription": "Girls with pumpkins", "Description": "Girls with pumpkins", "Caption-Abstract": "Girls with pumpkins", "Title": "Can we carry this?", "ObjectName": "Can we carry this?", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie", "Suzy"], "RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 15:35:49", "CreateDate": "2018:09:28 15:35:49", "SubSecTimeOriginal": "063", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:35:49-04:00", "ModifyDate": "2018:09:28 15:35:49", "SubSectime": "063", "OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_persons_as_keywords.json b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_persons_as_keywords.json index 6c5b682e1..fbfc55f60 100644 --- a/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_persons_as_keywords.json +++ b/tests/sidecars/8SOE9s0XQVGsuq4ONohTng_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Katie", "Kids", "Suzy"], "XMP:Subject": ["Katie", "Kids", "Suzy"], "XMP:TagsList": ["Katie", "Kids", "Suzy"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Katie", "Kids", "Suzy"], "XMP:Subject": ["Katie", "Kids", "Suzy"], "XMP:TagsList": ["Katie", "Kids", "Suzy"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7126731872558595, "Y": 0.4239872685185184, "W": 0.05, "H": 0.07501831501831502, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3097837567329407, "Y": 0.33553561195731163, "W": 0.07461518356649322, "H": 0.1119501069188118, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C.json index da61639b8..b0eaea959 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C.json @@ -1 +1 @@ -[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:SubSecTimeOriginal": "008", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59", "EXIF:SubSectime": "008", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_albums_as_keywords.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_albums_as_keywords.json index da61639b8..b0eaea959 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_albums_as_keywords.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_albums_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:SubSecTimeOriginal": "008", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59", "EXIF:SubSectime": "008", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_ignore_date_modified.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_ignore_date_modified.json index da61639b8..b0eaea959 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_ignore_date_modified.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_ignore_date_modified.json @@ -1 +1 @@ -[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:SubSecTimeOriginal": "008", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59", "EXIF:SubSectime": "008", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_keyword_template.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_keyword_template.json index da61639b8..b0eaea959 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_keyword_template.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_keyword_template.json @@ -1 +1 @@ -[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:SubSecTimeOriginal": "008", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59", "EXIF:SubSectime": "008", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_no_tag_groups.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_no_tag_groups.json index 668fcaa7c..bb3d80a8a 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_no_tag_groups.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_no_tag_groups.json @@ -1 +1 @@ -[{"Title": "Pumpkin heads", "ObjectName": "Pumpkin heads", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "DateTimeOriginal": "2018:09:28 15:39:59", "CreateDate": "2018:09:28 15:39:59", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:39:59-04:00", "ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"Title": "Pumpkin heads", "ObjectName": "Pumpkin heads", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "DateTimeOriginal": "2018:09:28 15:39:59", "CreateDate": "2018:09:28 15:39:59", "SubSecTimeOriginal": "008", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:39:59-04:00", "ModifyDate": "2018:09:28 15:39:59", "SubSectime": "008", "OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_persons_as_keywords.json b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_persons_as_keywords.json index da61639b8..b0eaea959 100644 --- a/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_persons_as_keywords.json +++ b/tests/sidecars/A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C_persons_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59"}] \ No newline at end of file +[{"XMP:Title": "Pumpkin heads", "IPTC:ObjectName": "Pumpkin heads", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "EXIF:DateTimeOriginal": "2018:09:28 15:39:59", "EXIF:CreateDate": "2018:09:28 15:39:59", "EXIF:SubSecTimeOriginal": "008", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:39:59-04:00", "EXIF:ModifyDate": "2018:09:28 15:39:59", "EXIF:SubSectime": "008", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B.json index e55a70e9b..26e1e1f45 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_albums_as_keywords.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_albums_as_keywords.json index 3c90cd770..859d1e676 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_albums_as_keywords.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_ignore_date_modified.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_ignore_date_modified.json index e55a70e9b..26e1e1f45 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_ignore_date_modified.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_keyword_template.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_keyword_template.json index 3c90cd770..859d1e676 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_keyword_template.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:Subject": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:TagsList": ["Kids", "Multi Keyword", "Pumpkin Farm", "Test Album"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_no_tag_groups.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_no_tag_groups.json index 2bd950528..d3d08076a 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_no_tag_groups.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Girl holding pumpkin", "Description": "Girl holding pumpkin", "Caption-Abstract": "Girl holding pumpkin", "Title": "I found one!", "ObjectName": "I found one!", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie"], "RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "GPSLatitude": 41.256566, "GPSLongitude": -95.940257, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:09:28 16:07:07", "CreateDate": "2018:09:28 16:07:07", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "16:07:07-04:00", "ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"ImageDescription": "Girl holding pumpkin", "Description": "Girl holding pumpkin", "Caption-Abstract": "Girl holding pumpkin", "Title": "I found one!", "ObjectName": "I found one!", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie"], "RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "GPSLatitude": 41.256566, "GPSLongitude": -95.940257, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:09:28 16:07:07", "CreateDate": "2018:09:28 16:07:07", "SubSecTimeOriginal": "", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "16:07:07-04:00", "ModifyDate": "2018:09:28 16:07:07", "SubSectime": "", "OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_persons_as_keywords.json b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_persons_as_keywords.json index b29b4152b..4a1050bc2 100644 --- a/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_persons_as_keywords.json +++ b/tests/sidecars/D79B8D77-BFFC-460B-9312-034F2877D35B_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Katie", "Kids"], "XMP:Subject": ["Katie", "Kids"], "XMP:TagsList": ["Katie", "Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girl holding pumpkin", "XMP:Description": "Girl holding pumpkin", "IPTC:Caption-Abstract": "Girl holding pumpkin", "XMP:Title": "I found one!", "IPTC:ObjectName": "I found one!", "IPTC:Keywords": ["Katie", "Kids"], "XMP:Subject": ["Katie", "Kids"], "XMP:TagsList": ["Katie", "Kids"], "XMP:PersonInImage": ["Katie"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1365, "H": 2048, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.5898191407322884, "Y": 0.28164292871952057, "W": 0.22411711513996124, "H": 0.14937493269826518, "Unit": "normalized"}}]}, "EXIF:GPSLatitude": 41.256566, "EXIF:GPSLongitude": -95.940257, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:09:28 16:07:07", "EXIF:CreateDate": "2018:09:28 16:07:07", "EXIF:SubSecTimeOriginal": "", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", "EXIF:ModifyDate": "2018:09:28 16:07:07", "EXIF:SubSectime": "", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30.json index c0777c7d8..f29e3c1a5 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:27:48"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:27:48", "EXIF:SubSecTime": "198", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_albums_as_keywords.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_albums_as_keywords.json index c0777c7d8..f29e3c1a5 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_albums_as_keywords.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_albums_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:27:48"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:27:48", "EXIF:SubSecTime": "198", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_ignore_date_modified.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_ignore_date_modified.json index 2e6cbb015..bc1144a3c 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_ignore_date_modified.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_ignore_date_modified.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2018:10:13 09:18:12"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2018:10:13 09:18:12", "EXIF:SubSectime": "501", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_keyword_template.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_keyword_template.json index c0777c7d8..f29e3c1a5 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_keyword_template.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_keyword_template.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:27:48"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:27:48", "EXIF:SubSecTime": "198", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_no_tag_groups.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_no_tag_groups.json index 232edd0a9..887b0b0af 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_no_tag_groups.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_no_tag_groups.json @@ -1 +1 @@ -[{"Title": "St. James's Park", "ObjectName": "St. James's Park", "Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "GPSLatitude": 51.50357167, "GPSLongitude": -0.1318055, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:10:13 09:18:12", "CreateDate": "2018:10:13 09:18:12", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:10:13", "TimeCreated": "09:18:12-04:00", "ModifyDate": "2019:12:01 11:27:48"}] \ No newline at end of file +[{"Title": "St. James's Park", "ObjectName": "St. James's Park", "Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "GPSLatitude": 51.50357167, "GPSLongitude": -0.1318055, "GPSLatitudeRef": "N", "GPSLongitudeRef": "W", "DateTimeOriginal": "2018:10:13 09:18:12", "CreateDate": "2018:10:13 09:18:12", "SubSecTimeOriginal": "501", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:10:13", "TimeCreated": "09:18:12-04:00", "ModifyDate": "2019:12:01 09:27:48", "SubSecTime": "198", "OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_persons_as_keywords.json b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_persons_as_keywords.json index c0777c7d8..f29e3c1a5 100644 --- a/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_persons_as_keywords.json +++ b/tests/sidecars/DC99FBDD-7A52-4100-A5BB-344131646C30_persons_as_keywords.json @@ -1 +1 @@ -[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 11:27:48"}] \ No newline at end of file +[{"XMP:Title": "St. James's Park", "IPTC:ObjectName": "St. James's Park", "IPTC:Keywords": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:Subject": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "XMP:TagsList": ["England", "London", "London 2018", "St. James's Park", "UK", "United Kingdom"], "EXIF:GPSLatitude": 51.50357167, "EXIF:GPSLongitude": -0.1318055, "EXIF:GPSLatitudeRef": "N", "EXIF:GPSLongitudeRef": "W", "EXIF:DateTimeOriginal": "2018:10:13 09:18:12", "EXIF:CreateDate": "2018:10:13 09:18:12", "EXIF:SubSecTimeOriginal": "501", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:10:13", "IPTC:TimeCreated": "09:18:12-04:00", "EXIF:ModifyDate": "2019:12:01 09:27:48", "EXIF:SubSecTime": "198", "EXIF:OffsetTime": "-06:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.json index fd3ab0ae8..db267cbc0 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 17:33:28"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 16:33:28", "EXIF:SubSecTime": "398", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_albums_as_keywords.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_albums_as_keywords.json index 8bf3718c8..3384b8f4e 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_albums_as_keywords.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:Subject": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:TagsList": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 17:33:28"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:Subject": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:TagsList": ["AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 16:33:28", "EXIF:SubSecTime": "398", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_ignore_date_modified.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_ignore_date_modified.json index f76e37b6e..c097b7bf1 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_ignore_date_modified.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:04:15 14:40:24"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:04:15 14:40:24", "EXIF:SubSectime": "086", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_keyword_template.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_keyword_template.json index 06610e453..44acbc2e4 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_keyword_template.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:Subject": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:TagsList": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 17:33:28"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:Subject": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:TagsList": ["Folder1/SubFolder2/AlbumInFolder", "I have a deleted twin", "Maria", "Multi Keyword", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 16:33:28", "EXIF:SubSecTime": "398", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_no_tag_groups.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_no_tag_groups.json index e3fdc3408..e513b4ae5 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_no_tag_groups.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Bride Wedding day", "Description": "Bride Wedding day", "Caption-Abstract": "Bride Wedding day", "Keywords": ["Maria", "wedding"], "Subject": ["Maria", "wedding"], "TagsList": ["Maria", "wedding"], "PersonInImage": ["Maria"], "RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "DateTimeOriginal": "2019:04:15 14:40:24", "CreateDate": "2019:04:15 14:40:24", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:04:15", "TimeCreated": "14:40:24-04:00", "ModifyDate": "2019:07:27 17:33:28"}] \ No newline at end of file +[{"ImageDescription": "Bride Wedding day", "Description": "Bride Wedding day", "Caption-Abstract": "Bride Wedding day", "Keywords": ["Maria", "wedding"], "Subject": ["Maria", "wedding"], "TagsList": ["Maria", "wedding"], "PersonInImage": ["Maria"], "RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "DateTimeOriginal": "2019:04:15 14:40:24", "CreateDate": "2019:04:15 14:40:24", "SubSecTimeOriginal": "086", "OffsetTimeOriginal": "-04:00", "DateCreated": "2019:04:15", "TimeCreated": "14:40:24-04:00", "ModifyDate": "2019:07:27 16:33:28", "SubSecTime": "398", "OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_persons_as_keywords.json b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_persons_as_keywords.json index fd3ab0ae8..db267cbc0 100644 --- a/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_persons_as_keywords.json +++ b/tests/sidecars/E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 17:33:28"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Bride Wedding day", "XMP:Description": "Bride Wedding day", "IPTC:Caption-Abstract": "Bride Wedding day", "IPTC:Keywords": ["Maria", "wedding"], "XMP:Subject": ["Maria", "wedding"], "XMP:TagsList": ["Maria", "wedding"], "XMP:PersonInImage": ["Maria"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 1526, "H": 1325, "Unit": "pixel"}, "RegionList": [{"Name": "Maria", "Type": "Face", "Area": {"X": 0.41222959756851196, "Y": 0.4221687614917755, "W": 0.3333342373371124, "H": 0.3839004122086291, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", "EXIF:CreateDate": "2019:04:15 14:40:24", "EXIF:SubSecTimeOriginal": "086", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2019:04:15", "IPTC:TimeCreated": "14:40:24-04:00", "EXIF:ModifyDate": "2019:07:27 16:33:28", "EXIF:SubSecTime": "398", "EXIF:OffsetTime": "-05:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E.json index a174196aa..d2e691b8c 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_albums_as_keywords.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_albums_as_keywords.json index 75dc7494b..562f21c14 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_albums_as_keywords.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_albums_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_ignore_date_modified.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_ignore_date_modified.json index a174196aa..d2e691b8c 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_ignore_date_modified.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_ignore_date_modified.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids"], "XMP:Subject": ["Kids"], "XMP:TagsList": ["Kids"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_keyword_template.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_keyword_template.json index 75dc7494b..562f21c14 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_keyword_template.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_keyword_template.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:Subject": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:TagsList": ["Kids", "Pumpkin Farm", "Sorted Manual", "Sorted Newest First", "Sorted Oldest First", "Sorted Title", "Test Album"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_no_tag_groups.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_no_tag_groups.json index 16bff96c7..477d03cba 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_no_tag_groups.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_no_tag_groups.json @@ -1 +1 @@ -[{"ImageDescription": "Girls with pumpkins", "Description": "Girls with pumpkins", "Caption-Abstract": "Girls with pumpkins", "Title": "Can we carry this?", "ObjectName": "Can we carry this?", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie", "Suzy"], "RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 15:35:49", "CreateDate": "2018:09:28 15:35:49", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:35:49-04:00", "ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"ImageDescription": "Girls with pumpkins", "Description": "Girls with pumpkins", "Caption-Abstract": "Girls with pumpkins", "Title": "Can we carry this?", "ObjectName": "Can we carry this?", "Keywords": ["Kids"], "Subject": ["Kids"], "TagsList": ["Kids"], "PersonInImage": ["Katie", "Suzy"], "RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "DateTimeOriginal": "2018:09:28 15:35:49", "CreateDate": "2018:09:28 15:35:49", "SubSecTimeOriginal": "063", "OffsetTimeOriginal": "-04:00", "DateCreated": "2018:09:28", "TimeCreated": "15:35:49-04:00", "ModifyDate": "2018:09:28 15:35:49", "SubSectime": "063", "OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_persons_as_keywords.json b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_persons_as_keywords.json index c4a6b001e..ea6836a5e 100644 --- a/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_persons_as_keywords.json +++ b/tests/sidecars/F12384F6-CD17-4151-ACBA-AE0E3688539E_persons_as_keywords.json @@ -1 +1 @@ -[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Katie", "Kids", "Suzy"], "XMP:Subject": ["Katie", "Kids", "Suzy"], "XMP:TagsList": ["Katie", "Kids", "Suzy"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49"}] \ No newline at end of file +[{"EXIF:ImageDescription": "Girls with pumpkins", "XMP:Description": "Girls with pumpkins", "IPTC:Caption-Abstract": "Girls with pumpkins", "XMP:Title": "Can we carry this?", "IPTC:ObjectName": "Can we carry this?", "IPTC:Keywords": ["Katie", "Kids", "Suzy"], "XMP:Subject": ["Katie", "Kids", "Suzy"], "XMP:TagsList": ["Katie", "Kids", "Suzy"], "XMP:PersonInImage": ["Katie", "Suzy"], "XMP-mwg-rs:RegionInfo": {"AppliedToDimensions": {"W": 2048, "H": 1365, "Unit": "pixel"}, "RegionList": [{"Name": "Katie", "Type": "Face", "Area": {"X": 0.7158178221434355, "Y": 0.4209024980664253, "W": 0.06201007632625988, "H": 0.09303782880306244, "Unit": "normalized"}}, {"Name": "Suzy", "Type": "Face", "Area": {"X": 0.3205035626888275, "Y": 0.33566537871956825, "W": 0.07409769326841342, "H": 0.11117368191480637, "Unit": "normalized"}}]}, "EXIF:DateTimeOriginal": "2018:09:28 15:35:49", "EXIF:CreateDate": "2018:09:28 15:35:49", "EXIF:SubSecTimeOriginal": "063", "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "15:35:49-04:00", "EXIF:ModifyDate": "2018:09:28 15:35:49", "EXIF:SubSectime": "063", "EXIF:OffsetTime": "-04:00"}] \ No newline at end of file diff --git a/tests/test_cli.py b/tests/test_cli.py index 619dac023..f661c71fd 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -5320,7 +5320,10 @@ def test_export_sidecar_keyword_template(): "EXIF:OffsetTimeOriginal": "-04:00", "IPTC:DateCreated": "2018:09:28", "IPTC:TimeCreated": "16:07:07-04:00", - "EXIF:ModifyDate": "2018:09:28 16:07:07" + "EXIF:ModifyDate": "2018:09:28 16:07:07", + "EXIF:SubSecTimeOriginal": "", + "EXIF:SubSectime": "", + "EXIF:OffsetTime": "-04:00" } ] """ diff --git a/tests/test_cli_timewarp.py b/tests/test_cli_timewarp.py index cec3373da..b9df5ecfd 100644 --- a/tests/test_cli_timewarp.py +++ b/tests/test_cli_timewarp.py @@ -178,6 +178,7 @@ def test_time(photoslib, suspend_capture, input_value, expected): ["--inspect", "--plain", "--force"], terminal_width=TERMINAL_WIDTH, ) + assert result.exit_code == 0 output_values = parse_inspect_output(result.output) assert output_values[0].date_tz == expected diff --git a/tests/test_exifwriter.py b/tests/test_exifwriter.py index dcd1d508f..0cc66b16b 100644 --- a/tests/test_exifwriter.py +++ b/tests/test_exifwriter.py @@ -317,6 +317,11 @@ def test_exifwriter_datetime(photosdb: PhotosDB, tmp_path: pathlib.Path): assert "EXIF:CreateDate" in exif_data assert exif_data["EXIF:CreateDate"] == photo.date.strftime("%Y:%m:%d %H:%M:%S") + assert "EXIF:SubSecTimeOriginal" in exif_data + assert exif_data["EXIF:SubSecTimeOriginal"] == photo.date.strftime("%f")[ + :-3 + ].rstrip("0") + def test_exifwriter_merge_keywords_persons(photosdb: PhotosDB, tmp_path: pathlib.Path): """Test merge_merge_exif_keywords, merge_exif_persons""" diff --git a/tests/test_export_catalina_10_15_7.py b/tests/test_export_catalina_10_15_7.py index ff9ba1491..d96388a21 100644 --- a/tests/test_export_catalina_10_15_7.py +++ b/tests/test_export_catalina_10_15_7.py @@ -1,11 +1,13 @@ """ Test export for 10.15.7 """ +import datetime import json import os import os.path import pathlib import tempfile import time +import zoneinfo import pytest @@ -359,7 +361,8 @@ def test_exiftool_json_sidecar(photosdb): json_got = exiftool_json_sidecar(photo) json_got = json.loads(json_got)[0] - assert json_got == json_expected + for k, v in json_got.items(): + assert v == json_expected.get(k) def test_exiftool_json_sidecar_ignore_date_modified(photosdb): @@ -385,19 +388,14 @@ def test_exiftool_json_sidecar_keyword_template_long(caplog, photosdb): json_expected = json.loads( """ - [{"EXIF:ImageDescription": "Bride Wedding day", - "XMP:Description": "Bride Wedding day", - "IPTC:Caption-Abstract": "Bride Wedding day", - "XMP:TagsList": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], - "IPTC:Keywords": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], - "XMP:Subject": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], - "XMP:PersonInImage": ["Maria"], - "EXIF:DateTimeOriginal": "2019:04:15 14:40:24", - "EXIF:CreateDate": "2019:04:15 14:40:24", - "EXIF:OffsetTimeOriginal": "-04:00", - "IPTC:DateCreated": "2019:04:15", - "IPTC:TimeCreated": "14:40:24-04:00", - "EXIF:ModifyDate": "2019:07:27 17:33:28"}] + [{"EXIF:ImageDescription": "Bride Wedding day", + "XMP:Description": "Bride Wedding day", + "IPTC:Caption-Abstract": "Bride Wedding day", + "XMP:TagsList": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], + "IPTC:Keywords": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], + "XMP:Subject": ["Maria", "wedding", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], + "XMP:PersonInImage": ["Maria"] + }] """ )[0] @@ -429,9 +427,10 @@ def test_exiftool_json_sidecar_keyword_template(photosdb): json_got = exiftool_json_sidecar( photo, ExportOptions(keyword_template=["{folder_album}"]) ) - json_got = json.loads(json_got) + json_got = json.loads(json_got)[0] - assert json_got == json_expected + for k, v in json_got.items(): + assert v == json_expected[0].get(k) def test_exiftool_json_sidecar_use_persons_keyword(photosdb): @@ -472,8 +471,10 @@ def test_exiftool_sidecar(photosdb): json_expected = fp.read() json_got = exiftool_json_sidecar(photo, tag_groups=False) - - assert json_got == json_expected + json_got = json.loads(json_got)[0] + json_expected = json.loads(json_expected)[0] + for k, v in json_got.items(): + assert v == json_expected.get(k) @pytest.mark.skipif(exiftool is None, reason="exiftool not installed") diff --git a/tests/test_modified_date_mojave_10_14_6.py b/tests/test_modified_date_mojave_10_14_6.py index 6096efa8c..49ff35e58 100644 --- a/tests/test_modified_date_mojave_10_14_6.py +++ b/tests/test_modified_date_mojave_10_14_6.py @@ -1,7 +1,11 @@ +import datetime + import pytest import osxphotos +from .dt_utils import dt_to_local + PHOTOS_DB = "./tests/Test-10.14.6.photoslibrary/database/photos.db" PHOTOS_DB_PATH = "/Test-10.14.6.photoslibrary/database/photos.db" PHOTOS_LIBRARY_PATH = "/Test-Shared-10.14.6.photoslibrary" @@ -19,8 +23,9 @@ def photosdb(): def test_modified(photosdb): photos = photosdb.photos(uuid=[UUID_DICT["modified"]]) - assert photos[0].date_modified is not None - assert photos[0].date_modified.isoformat() == "2019-12-01T11:43:45.714123-04:00" + assert photos[0].date_modified == dt_to_local( + datetime.datetime.fromisoformat("2019-12-01T09:43:45.714123-04:00") + ) # no non-modified photos in the 10.14.6 database diff --git a/tests/test_mojave_10_14_6.py b/tests/test_mojave_10_14_6.py index 2c6c3d12b..46f18c26e 100644 --- a/tests/test_mojave_10_14_6.py +++ b/tests/test_mojave_10_14_6.py @@ -475,7 +475,9 @@ def test_photos_intrash_2(photosdb): photos = photosdb.photos(intrash=True) for p in photos: assert p.intrash - assert p.date_trashed.isoformat() == "2305-12-17T13:19:08.978144-07:00" + assert p.date_trashed == datetime.datetime.fromisoformat( + "2305-12-17T13:19:08.978144-07:00" + ) def test_photos_not_intrash(photosdb): diff --git a/tests/test_photodates.py b/tests/test_photodates.py new file mode 100644 index 000000000..ef2eee80d --- /dev/null +++ b/tests/test_photodates.py @@ -0,0 +1,358 @@ +"""Test photodates.py""" + +# Note: This must be tested with pytest --photodates as it requires a specific +# library be active in the Photos library (uses AppleScript) + + + + +import datetime +import zoneinfo + +import pytest + +from osxphotos.photodates import get_photo_date_added, get_photo_date_original +from osxphotos.platform import is_macos +from tests.conftest import get_os_version + +if not is_macos: + pytest.skip("Skipping macOS only tests", allow_module_level=True) + +from photoscript import Photo + +if int(get_os_version()[0]) < 13: + pytest.skip("Skipping; requires macOS >= 13.0 (Ventura)", allow_module_level=True) + +TEST_DATA = [ + ( + "6191423D-8DB8-4D4C-92BE-9BBBA308AAC4", + datetime.datetime( + 2019, + 7, + 4, + 16, + 24, + 1, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 827957, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "A92D9C26-3A50-4197-9388-CB5F7DB9FA91", + datetime.datetime( + 2020, + 4, + 15, + 10, + 25, + 51, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)), + ), + datetime.datetime( + 2020, + 4, + 19, + 10, + 27, + 55, + 301814, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "1EB2B765-0765-43BA-A90C-0D0580E6172C", + datetime.datetime( + 2018, + 9, + 28, + 16, + 9, + 33, + 22000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 757001, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "4D521201-92AC-43E5-8F7C-59BC41C37A96", + datetime.datetime( + 2020, + 4, + 16, + 10, + 42, + 58, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)), + ), + datetime.datetime( + 2020, + 4, + 19, + 10, + 29, + 17, + 264402, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "7783E8E6-9CAC-40F3-BE22-81FB7051C266", + datetime.datetime( + 2020, + 9, + 19, + 14, + 36, + 26, + 719000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)), + ), + datetime.datetime( + 2020, + 9, + 25, + 8, + 19, + 49, + 647434, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "D05A5FE3-15FB-49A1-A15D-AB3DA6F8B068", + datetime.datetime( + 2020, + 4, + 12, + 10, + 30, + 23, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)), + ), + datetime.datetime( + 2020, + 4, + 19, + 10, + 27, + 32, + 244626, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "8846E3E6-8AC8-4857-8448-E3D025784410", + # IMG_1693.tif which has a bad date manually edited in the database so + # photo.date is 1970-01-01 00:00:00 but date original is correctly set in extended attributes + datetime.datetime( + 2020, 5, 12, 18, 47, 13, tzinfo=zoneinfo.ZoneInfo(key="America/New_York") + ), + datetime.datetime( + 2020, + 6, + 6, + 9, + 15, + 24, + 725564, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "DC99FBDD-7A52-4100-A5BB-344131646C30", + datetime.datetime( + 2018, + 10, + 13, + 9, + 18, + 12, + 501000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 859624, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51", + datetime.datetime( + 2019, + 4, + 15, + 14, + 40, + 24, + 86000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 735651, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "3DD2C897-F19E-4CA6-8C22-B027D5A71907", + datetime.datetime( + 2017, + 6, + 20, + 17, + 18, + 56, + 518000, + tzinfo=datetime.timezone(datetime.timedelta(seconds=34200)), + ), + datetime.datetime( + 2020, + 4, + 6, + 0, + 52, + 24, + 442561, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "8E1D7BC9-9321-44F9-8CFB-4083F6B9232A", + datetime.datetime( + 2020, + 4, + 16, + 12, + 28, + 21, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)), + ), + datetime.datetime( + 2020, + 4, + 19, + 10, + 30, + 44, + 297306, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "A1DD1F98-2ECD-431F-9AC9-5AFEFE2D3A5C", + datetime.datetime( + 2018, + 9, + 28, + 15, + 39, + 59, + 8000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 9, + 8, + 28, + 312111, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "F12384F6-CD17-4151-ACBA-AE0E3688539E", + datetime.datetime( + 2018, + 9, + 28, + 15, + 35, + 49, + 63000, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 804603, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), + ( + "D79B8D77-BFFC-460B-9312-034F2877D35B", + datetime.datetime( + 2018, + 9, + 28, + 16, + 7, + 7, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)), + ), + datetime.datetime( + 2019, + 7, + 27, + 8, + 16, + 49, + 778432, + tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), "CDT"), + ), + ), +] + + +@pytest.mark.photodates +@pytest.mark.parametrize("uuid, _, date_added", TEST_DATA) +@pytest.mark.usefixtures("set_tz_central") +def test_get_photo_date_added(uuid, _, date_added): + photo = Photo(uuid) + assert get_photo_date_added(photo) == date_added + + +@pytest.mark.photodates +@pytest.mark.parametrize("uuid, date, _", TEST_DATA) +@pytest.mark.usefixtures("set_tz_central") +def test_get_photo_date_original(uuid, date, _): + photo = Photo(uuid) + # test that the date is within a second of the expected date + # there appears to be a bug in Photos in that the fractional seconds in the extended attributes + # is shifted from the date stored in ZASSET.ZDATECREATED + # e.g. 0.630000 in the extended attributes is 0.063000 in ZASSET.ZDATECREATED + assert get_photo_date_original(photo) - date < datetime.timedelta(seconds=1) diff --git a/tests/test_template.py b/tests/test_template.py index 74be1959a..7451a44d7 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -308,7 +308,7 @@ "{modified.dd}": "31", "{modified.doy}": "305", "{modified.dow}": "Saturday", - "{modified.strftime,%Y-%m-%d-%H%M%S}": "2020-10-31-080321", + "{modified.strftime,%Y-%m-%d}": "2020-10-31", "{modified.strftime}": "_", }