Tags: BabelQueue/babelqueue-python
Tags
feat(gdpr): runtime field encryption for x-gdpr-sensitive — Python co… …re (ADR-0030) The SDK-enforcement half of GDPR governance (mirrors the Go reference). New babelqueue.gdpr module: a caller-bound Cipher Protocol (encrypt/decrypt onto KMS/Vault) + protect/unprotect helpers that encrypt/decrypt exactly the schema's x-gdpr-sensitive leaves in place (nested + array + root), byte-for-byte round-trip, wrong key -> DecryptError. schema.sensitive_paths() parses x-gdpr-sensitive (validation-neutral). data stays pure JSON (ciphertext string) so the envelope is frozen (GR-1, schema_version 1, trace_id preserved). Python stdlib has no AES-GCM -> the core ships no concrete cipher and pulls no crypto dep (GR-7); the AES-256-GCM reference is the optional babelqueue[gdpr] extra. Opt-in; schema validation on cleartext. v1.13.0.
feat(outbox): transactional outbox helper — Python core (ADR-0029) Ports the producer-side transactional outbox as babelqueue.outbox: Outbox.write encodes the frozen envelope and persists it via a caller-bound OutboxStore inside the caller's own DB transaction (no dual-write), and OutboxRelay.flush/drain forwards stored rows verbatim through the transport — mark_published only after publish returns, a raising publish -> mark_failed + linear backoff (row stays pending), one poison row never blocks the batch. At-least-once handoff; consumers dedupe on meta.id (the Idempotent mirror). Frozen bytes ride verbatim (GR-1/4/5); OutboxStore is a Protocol so the core stays stdlib-only (GR-7). v1.12.0.
feat(otel): W3C traceparent transport-header propagation — Python SDK… … (ADR-0028) Mirrors the Go reference: a dependency-free header seam (publish_with_headers + headers_from_context surfacing a delivered message's headers) and W3C traceparent inject/extract in otel.py (consumer span becomes a child of the producer's remote parent; no header falls back to the v0.1 trace_id behaviour). Per-transport carriers: Redis __bq_frame (bare-value back-compat), AMQP header table, SQS MessageAttributes, in-memory reference. Envelope frozen (GR-1), otel stays the [otel] extra (GR-7), trace_id preserved (GR-4). Also bump to 1.11.0 and reconcile the drifted __version__ (was 1.6.0) to the package version.
feat(replay): Replay-Bypass guard — skip external side-effects on a d… …eliberate replay (ADR-0027) (#4) * feat(replay): Replay-Bypass guard — skip external side-effects on a deliberate replay (ADR-0027) Parity with the Go reference: ReceivedMessage headers + HeaderPublisher, Redrive Bypass option stamping bq-replay-bypass, and is_replay / bypass_external_effects helpers. 160 tests pass. * chore(release): v1.10.0 ---------
PreviousNext