Skip to content

SMOODEV-2026: Python observability transport via smooai-fetch (⚠ bumps Python floor to 3.12)#64

Merged
brentrager merged 2 commits into
mainfrom
SMOODEV-2026-python-fetch
Jun 21, 2026
Merged

SMOODEV-2026: Python observability transport via smooai-fetch (⚠ bumps Python floor to 3.12)#64
brentrager merged 2 commits into
mainfrom
SMOODEV-2026-python-fetch

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

Webhook transport now goes through smooai-fetch (retries/timeouts/circuit-breaking); injectable fetch_fn test seam; async-in-sync bridge for the sync worker thread. OTLP deferred (exporter coupled to requests.Session + protobuf; would mean reimplementing the protobuf POST — same rationale Rust used before #2029's clean HttpClient trait; no double-retry). ruff+pytest(66) green.

⚠️ COMPAT TRADEOFF: smooai-fetch requires Python >=3.12, so this bumps the SDK's requires-python 3.10 → 3.12 (drops 3.10/3.11). Flagging for a decision — accept the floor bump, or keep httpx for the Python transport as a documented exception. Held for review.

🤖 Generated with Claude Code

@changeset-bot

changeset-bot Bot commented Jun 21, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: c35bef5

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

brentrager and others added 2 commits June 21, 2026 15:17
…OTLP where feasible)

The batched webhook event delivery now goes through smooai-fetch
(retries/timeouts/circuit-breaking) instead of raw httpx. smooai-fetch is
async-only, so the transport's daemon worker thread owns a private asyncio loop
and drives fetch() via run_until_complete; the host loop is never touched. The
fetch call is injectable (fetch_fn) because smooai-fetch constructs its own
httpx.AsyncClient with no client-injection seam — tests substitute an async stub.

smooai-fetch requires Python >=3.12, so the SDK floor bumps from >=3.10 to
>=3.12 (ruff target-version py312, uv.lock drops cp310/cp311 wheels).

OTLP exporter (secondary) deferred: opentelemetry-exporter-otlp-proto-http is
coupled to a sync requests.Session and owns protobuf serialization + its own
retry loop. Backing it with async smooai-fetch would mean reimplementing that
encoding/retry surface — the same reason the Rust SDK kept reqwest for OTLP
(#61, Code-Conventions #29). Deferred cleanly rather than hacked; no
double-retry layer introduced. The OAuth token provider keeps httpx for the same
reason (it backs the OTLP path).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…312 floor)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@brentrager brentrager force-pushed the SMOODEV-2026-python-fetch branch from 6844710 to c35bef5 Compare June 21, 2026 19:18
@brentrager brentrager merged commit 158a805 into main Jun 21, 2026
6 checks passed
@brentrager brentrager deleted the SMOODEV-2026-python-fetch branch June 21, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant