Skip to content

Latest commit

 

History

History
110 lines (67 loc) · 4.9 KB

File metadata and controls

110 lines (67 loc) · 4.9 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


[0.3.2] - 2026-06-15

Changed

  • Updated dev tooling: mypy 2.x, ruff 0.15.x, Poetry 2.4.1, and pre-commit hooks

[0.3.1] - 2026-06-12

Fixed

  • postmark.sync: Gunicorn and Odoo devs, rejoice! ...the module-level event loop thread is now fork-safe. Previously, importing postmark.sync before a process fork caused child processes to inherit a stale event loop with no running thread, causing all sync API calls to hang indefinitely. The loop and thread are now created lazily on first use and recreated automatically when a PID change is detected. (Good eye, @yibudak.)

[0.3.0] - 2026-06-08

Added

  • SyncServerClient and SyncAccountClient — synchronous wrappers around the async clients, backed by a single daemon thread with a persistent asyncio event loop. Enables SDK use in scripts, Flask apps, and Jupyter notebooks without async/await. HTTP connection pooling is retained across calls for performance.
  • Examples reorganized into examples/async/ and examples/sync/ directories with parallel coverage, plus two new sync-only examples (send_sync_simple.py, send_sync_batch.py).
  • 31 new tests for sync client behavior (tests/test_sync_client.py).

[0.2.5] - 2026-06-04

Changed

  • Upgraded httpx dependency to 0.28.1.
  • CI: expanded test matrix to include Python 3.13 and 3.14.
  • CI: updated GitHub Actions to actions/checkout@v6, actions/setup-python@v6, actions/cache@v5, and Poetry 2.3.4.

[0.2.4] - 2026-04-15

Fixed

  • README: logo image now uses an absolute raw GitHub URL so it renders correctly on the PyPI project page.

[0.2.3] - 2026-04-14

Fixed

  • __version__ resolves from the postmark-python distribution metadata so X-Postmark-Client-Version matches after pip install postmark-python (falls back to 0.0.0 when not installed as a package).

Changed

  • poetry.lock is tracked in version control again (removed from .gitignore) for reproducible installs and CI cache keys.
  • README: removed the misleading note about a future PyPI distribution under the name postmark.

[0.2.2] - 2026-04-14

Fixed

  • Timeout error message now uses the client’s configured timeout with clearer numeric formatting (:g), for both ServerClient and AccountClient.
  • Postmark API ErrorCode values from JSON are coerced to int when sent as numeric strings; invalid values and booleans map to None so exception mapping stays reliable.
  • README quick start no longer imports python-dotenv (a dev-only dependency); optional .env loading is described in a comment instead.

[0.2.1] - 2026-04-14

Changed

  • PyPI distribution renamed from postmark to postmark-python to avoid clashing with the unrelated postmark package on PyPI. The import name remains postmark.
  • Trove classifier updated from Alpha to Beta (Development Status :: 4 - Beta).

Added

  • Project URLs for PyPI metadata: repository, homepage (official libraries), documentation (wiki), and Issues link.

[0.2.0] - 2026-03-06

Added

  • Client identification on every request: User-Agent as Python/{major}.{minor}.{micro}, X-Postmark-Client as postmark-python, X-Postmark-Client-Version as the installed SDK version, and a fresh X-Postmark-Correlation-Id (UUID) per HTTP request.
  • X-Request-Id from Postmark responses is now stored as request_id on all PostmarkAPIException subclasses and included in the exception __str__ output when present — enabling direct support escalations.
  • request_id included in structured log records for both successful requests and API errors.
  • Structured extra={} fields on all log calls (method, endpoint, status_code, duration_ms, error_code, postmark_message, request_id) for compatibility with Datadog, Splunk, and other log aggregators.
  • duration_ms timing on every request log record (success, error, and timeout).

Changed

  • Upgraded pytest-asyncio to ^1.0.0 and set asyncio_mode = "auto" to eliminate deprecation warnings on Python 3.12+.

[0.1.0] - 2026-03-05

Added

  • Initial release of the SDK.
  • ServerClient and AccountClient with authentication, configurable retries, timeout, and optional base_url override for local mock servers.
  • Managers for outbound/inbound messages, bounces, templates, streams, suppressions, webhooks, stats, domains, sender signatures, and data removals.
  • Async pagination via paginate() utility; stream() methods on OutboundManager and BounceManager.
  • Typed request/response models backed by Pydantic v2.
  • Pytest test suite.