Skip to content

Commit 871ce82

Browse files
committed
fix(webhook): patch Protocol gap, add Pg discoverability, fix vacuous test
- WebhookDeliverySupervisor Protocol was missing breaker_key and notification_type kwargs that exist on InMemoryWebhookDeliverySupervisor; typed call-sites against the Protocol were broken - Re-export PgWebhookDeliverySupervisor from adcp.webhooks so it is discoverable without knowing the internal module path - test_log_insert_failure_does_not_crash_worker was passing vacuously because fetchone on the log cursor was set to raise but _log_attempt_via_conn never calls fetchone; fix by raising directly from conn.execute side-effect - Remove dead _send inner function from test_warning_emitted_only_once https://claude.ai/code/session_01DoCRKpgu6jrVNARmazguok
1 parent bf55037 commit 871ce82

3 files changed

Lines changed: 8 additions & 12 deletions

File tree

src/adcp/webhook_supervisor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ async def send_mcp(
214214
result: Any = None,
215215
token: str | None = None,
216216
sequence_key: str | None = None,
217+
breaker_key: str | None = None,
218+
notification_type: str | None = None,
217219
) -> WebhookDeliveryResult | None: ...
218220

219221

src/adcp/webhooks.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,9 @@ def _validate_header_value(name: str, value: Any) -> None:
11571157
WebhookDeliveryResult,
11581158
WebhookSender,
11591159
)
1160+
from adcp.webhook_supervisor_pg import ( # noqa: E402
1161+
PgWebhookDeliverySupervisor,
1162+
)
11601163

11611164
__all__ = [
11621165
# Sender — payload builders
@@ -1193,4 +1196,6 @@ def _validate_header_value(name: str, value: Any) -> None:
11931196
# Dedup / idempotency backends (re-exported so one import root suffices)
11941197
"MemoryBackend",
11951198
"WebhookDedupStore",
1199+
# Pg-backed supervisor (requires adcp[pg] extra)
1200+
"PgWebhookDeliverySupervisor",
11961201
]

tests/test_webhook_supervisor_pg.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,6 @@ async def test_warning_emitted_before_worker_starts(self, caplog: Any) -> None:
279279
async def test_warning_emitted_only_once(self, caplog: Any) -> None:
280280
import logging
281281

282-
async def _send(pool: Any) -> None:
283-
conn_c = _make_conn(None)
284-
conn_e = _make_conn((1,))
285-
_pool = _make_pool(conn_c, conn_e)
286-
sup = _make_supervisor(_pool, _make_sender())
287-
with caplog.at_level(logging.WARNING, logger="adcp.webhook_supervisor_pg"):
288-
await sup.send_mcp(url="u", task_id="t", status="s")
289-
await sup.send_mcp(url="u", task_id="t", status="s")
290-
291282
# Two calls on same supervisor → one warning
292283
conn_c1 = _make_conn(None)
293284
conn_e1 = _make_conn((1,))
@@ -608,11 +599,9 @@ async def test_log_insert_failure_does_not_crash_worker(self) -> None:
608599
poll_cur = _cursor(_queue_row())
609600
delete_cur = _cursor(None)
610601
circuit_cur = _cursor(("closed", 0))
611-
log_error_cur = AsyncMock()
612-
log_error_cur.fetchone = AsyncMock(side_effect=RuntimeError("DB gone"))
613602

614603
conn.execute = AsyncMock(
615-
side_effect=[poll_cur, delete_cur, circuit_cur, log_error_cur]
604+
side_effect=[poll_cur, delete_cur, circuit_cur, RuntimeError("DB gone")]
616605
)
617606
ctx = AsyncMock()
618607
ctx.__aenter__ = AsyncMock(return_value=conn)

0 commit comments

Comments
 (0)