PgQueueListener: - Dedicated asyncpg connection outside the SQLAlchemy pool (LISTEN needs a persistent connection; pooled connections check in/out). - Exposes wait_for_work(timeout) — resolves on NOTIFY or timeout, whichever fires first. The worker treats both wakes identically. - asyncpg_dsn_from_sqlalchemy_url strips the +asyncpg driver segment and percent-decodes the password so the same URL in IX_POSTGRES_URL works for both SQLAlchemy and raw asyncpg. app.py lifespan now also spawns the listener alongside the worker; both are gated on spawn_worker=True so REST-only tests stay fast. 2 new integration tests: NOTIFY path (wake within 2 s despite 60 s poll) + missed-NOTIFY path (fallback poll recovers within 5 s). 33 integration tests total, 209 unit. Forgejo Actions trigger is flaky; local verification is the gate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| fixtures | ||
| integration | ||
| unit | ||
| __init__.py | ||
| conftest.py | ||