From 72e116a7b854f667ec9fb389927797c48462625d Mon Sep 17 00:00:00 2001 From: Mathias Date: Thu, 8 Oct 2026 12:02:50 +0200 Subject: [PATCH] metadata writer: some progress --- src/photools3/metadata_writer.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/photools3/metadata_writer.py b/src/photools3/metadata_writer.py index c3a49ae..b5b103e 100644 --- a/src/photools3/metadata_writer.py +++ b/src/photools3/metadata_writer.py @@ -70,32 +70,39 @@ class MetadataWriter: def sidecar_path(self) -> Path: return Path() - @property - def metadata(self) -> XmpMetadata: + def get_metadata(self, *args, **kwargs) -> Any: try: with exiftool.ExifToolHelper() as exif: metadata = exif.get_metadata([str(self.path)])[0] except Exception as exc: # noqa: BLE001 log.error(f"Could not read metadata from {self.path}: {exc}") assert metadata - return metadata + return metadata.get(*args, **kwargs) - def set_metadata(self): + def set_metadata(self, metadata_tags: dict[str, Any]) -> bool: if self.sidecar_path.exists(): params = ["-overwrite_original"] else: params = ["-o", "%f.xmp"] - # TODO + try: + with exiftool.ExifToolHelper() as exif: + exif.set_tags( + [str(self.sidecar_path)], tags=metadata_tags, params=params + ) + except Exception as exc: # noqa + log.error(f"Could not write metadata to file {self.sidecar_path}: {exc}") + return False + return True def write_caption(self, caption: Caption): - existing = self.metadata.get(XMP_KEYS_CAPTION[0], "") + existing = self.get_metadata(XMP_KEYS_CAPTION[0], "") is_existing_prefixed = _is_prefixed(existing) if existing and is_existing_prefixed: return elif existing and not is_existing_prefixed: caption = f"{existing}. {_prefixed(caption)}" metadata_tags = {key: caption for key in XMP_KEYS_CAPTION} - # TODO + self.set_metadata(metadata_tags) def write_keywords(self, keywords: Keywords): ...