Skip to main content

Dynamic XMP embed/read/remove orchestration for Swarmauri handlers.

Project description

Swarmauri logotype

EmbedXMP

PyPI - Downloads Repository views Supported Python versions License Latest release


EmbedXMP collects every installed EmbedXmpBase implementation, discovers them via Swarmauri's dynamic registry, and exposes a unified manager that can embed, read, or remove XMP packets without worrying about container formats.

Features

  • Dynamic discovery – lazily imports modules named swarmauri_xmp_* and collects subclasses registered under EmbedXmpBase.
  • Unified interface – delegates to the first handler whose supports method confirms compatibility with the payload.
  • Convenience wrappers – module-level helpers (embed, read, remove) keep high-level workflows succinct.
  • Async-friendly APIs – integrate inside event loops without blocking when calling out to plugin hooks.
  • Media-format coverage – load handlers for PNG, GIF, JPEG, SVG, WEBP, TIFF, PDF, and MP4 assets through extras.

Installation

Using uv

uv add EmbedXMP

Using pip

pip install EmbedXMP

Usage

from pathlib import Path

from EmbedXMP import EmbedXMP, embed, embed_file, read, read_file_xmp

manager = EmbedXMP()
image = Path("example.png")
packet = """<x:xmpmeta xmlns:x='adobe:ns:meta/'><rdf:RDF>...</rdf:RDF></x:xmpmeta>"""

# Embed into the file in place.
embed_file(image, packet)

# Inspect metadata via the manager API.
xmp_text = manager.read(image.read_bytes(), str(image))
print(xmp_text)

# Remove metadata from the file when it is no longer required.
manager.remove(image.read_bytes(), str(image))

Note You can provide either a path or a hint keyword argument when calling embed, read, or remove to help the manager pick the correct handler. The values are interchangeable as long as they match when both are supplied.

Async orchestration

EmbedXMP's manager can be shared inside asynchronous workflows by deferring media-aware work to plugin hooks:

import asyncio
from pathlib import Path

from EmbedXMP import EmbedXMP, embed


async def embed_all(paths: list[str], packet: str) -> None:
    manager = EmbedXMP()
    for path in paths:
        data = Path(path).read_bytes()
        await asyncio.to_thread(embed, data, packet, hint=path)


asyncio.run(embed_all(["one.png", "two.svg"], "<x:xmpmeta>...</x:xmpmeta>"))

Project Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

embedxmp-0.1.3.dev8.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

embedxmp-0.1.3.dev8-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file embedxmp-0.1.3.dev8.tar.gz.

File metadata

  • Download URL: embedxmp-0.1.3.dev8.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for embedxmp-0.1.3.dev8.tar.gz
Algorithm Hash digest
SHA256 ed9516a5b432bbdd6eb2b152275717df2654996194fa465e67ceefe85cd717a6
MD5 ec0441d070fe5e7d24f245a074aeb2d9
BLAKE2b-256 e1bddcf637d27e22524972cb7c24fa60472de7ee6fda7585344aacbc2c77c96a

See more details on using hashes here.

File details

Details for the file embedxmp-0.1.3.dev8-py3-none-any.whl.

File metadata

  • Download URL: embedxmp-0.1.3.dev8-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for embedxmp-0.1.3.dev8-py3-none-any.whl
Algorithm Hash digest
SHA256 1095ca9321752b4d47c127156be62674c9444bff6df3588fe4ef1b744eb675b1
MD5 cc6d438d577b3e7dd7f4c8bd2e61d5bb
BLAKE2b-256 92b06e76923dc69889ed8c4363c6108e5e3cddbf07da4a0af54a4d014f9bb34f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page