Releases: ActiveCampaign/postmark-python
Releases · ActiveCampaign/postmark-python
Release list
v0.3.6
What's Changed
Added
- Security hardening for the repository and release pipeline:
- Dependabot (
.github/dependabot.yml): weekly automated PRs for Python dependency and GitHub Actions updates; minor and patch updates grouped to reduce noise. - CodeQL (
.github/workflows/codeql.yml): SAST scanning on every push, PR, and weekly schedule; results surface in the GitHub Security tab. - Dependency vulnerability scanning (
.github/workflows/security.yml):pip-auditchecks all locked dependencies against OSV/PyPI advisory databases on push, PR, and weekly. - Publish gate (
publish.yml):pip-auditnow runs before every PyPI release; a known-vulnerable dependency blocks the publish job. - Secret detection (
.pre-commit-config.yaml):detect-secretspre-commit hook blocks commits containing hard-coded credentials. SECURITY.md: published security policy with private vulnerability reporting instructions and scope definition.
- Dependabot (
- Updated
idna(transitive dependency viahttpx) from 3.11 to 3.18 to address PYSEC-2026-215, a DoS vulnerability inidna.encode()for arbitrarily large inputs.
v0.3.5
Changed
- Modernized type hints to Python 3.10+ syntax throughout:
Optional[X]toX | None,Union[X, Y]toX | Y,List[X]tolist[X],Dict[K, V]todict[K, V].AsyncGenerator,Callable, andAwaitablemoved fromtypingtocollections.abc. No functional changes. - Added
target-version = "py310"and theUPruleset to ruff config, enforcing the modernized syntax going forward.
v0.3.4
v0.3.3
v0.3.2
What's Changed
- chore: update dev tooling and sync pre-commit with dependencies by @purificant in #9
Full Changelog: v0.3.1...v0.3.2
v0.3.1
v0.3.0
What's New
Synchronous Client (new in v0.3.0)
SyncServerClient and SyncAccountClient are now available via postmark.sync. Use them in scripts, Flask apps, and Jupyter notebooks — no async/await required. A single background thread with a persistent event loop handles all calls; HTTP connection pooling is retained for performance.
import postmark
with postmark.sync.ServerClient(token) as client:
response = client.outbound.send({...})Other Changes
- Examples reorganized into examples/async/ and examples/sync/ with parallel coverage
- New examples: send_sync_simple.py, send_sync_batch.py
- 31 new tests for sync client behavior (tests/test_sync_client.py)
Full Changelog: v0.2.5...v0.3.0
v0.2.5
What's Changed
- update test workflow for modern python and github actions by @purificant in #3
- chore: upgrade httpx to 0.28.1 by @mulka in #5
New Contributors
- @purificant made their first contribution in #3
- @mulka made their first contribution in #5
Thank you both!
Full Changelog: v0.2.4...v0.2.5
v0.2.4
This is a patch release with one fix for the PyPI project page.
Fixed
The Postmark Python SDK logo was broken on the PyPI project page due to a relative image path in the README. It now uses an absolute URL and renders correctly.
Full changelog: 0.2.3 → 0.2.4
v0.2.0
[0.2.0] - 2026-03-06
Added
User-Agentheader sent on every request in the formatPostmark.PY - {version} (Python/{major}.{minor}.{micro}).X-Request-Idfrom Postmark responses is now stored asrequest_idon allPostmarkAPIExceptionsubclasses and included in the exception__str__output when present — enabling direct support escalations.request_idincluded 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_mstiming on every request log record (success, error, and timeout).
Changed
- Upgraded
pytest-asyncioto^1.0.0and setasyncio_mode = "auto"to eliminate deprecation warnings on Python 3.12+.