potiuk opened a new issue, #69616: URL: https://github.com/apache/airflow/issues/69616
Dependabot PR #68816 grouped three dependency bumps that each collide with an **intentional** version cap in our `pyproject.toml` files. That PR was closed because none can be merged as a blind cap bump. This issue tracks the deliberate work needed to actually move each one — they are independent and should be done in separate PRs. ### 1. `aiosqlite` — capped `<0.22.0` (`airflow-core/pyproject.toml`) - **Why capped:** aiosqlite 0.22.x leaves a helper thread hanging under SQLAlchemy 2 (see the comment at the pin + [aiosqlite#369](https://github.com/omnilib/aiosqlite/issues/369)). Our own test-session issue is fixed in 0.22.1, but the SQLAlchemy-side fix is only in `sqlalchemy` main, not yet released. - **To unblock:** wait for the SQLAlchemy release carrying the fix (tracked at [sqlalchemy#13039](https://github.com/sqlalchemy/sqlalchemy/issues/13039)), likely bump the `sqlalchemy` floor to that version, then relax the aiosqlite cap to allow `0.22.1+`. ### 2. `fastapi` — capped `<0.137.0` (`airflow-core/pyproject.toml`) - **Why capped:** FastAPI 0.137 switched to lazy router inclusion, which triggers cadwyn `RouterGenerationError` and fails api-server / dag-processor startup. The cap was added deliberately in #68578 (which closed #68562). - **To unblock:** confirm whether cadwyn now supports FastAPI 0.137+. Our lock is already on cadwyn 7.0.0, so it may already work — if so this is a matter of testing api-server / dag-processor startup under fastapi 0.137–0.139 and relaxing the cap. If cadwyn still fails, an upstream cadwyn fix is required first. ### 3. `datamodel-code-generator` — pinned `==0.33.0` (`task-sdk` + `airflow-ctl` `codegen` groups) - **Why not bumped to 0.67.0:** regenerating with 0.67.0 drops the `= None` default from nullable-optional fields, turning ~200 fields across the Task SDK Execution API client (`task-sdk/src/airflow/sdk/api/datamodels/_generated.py`) and the airflow-ctl API client (`airflow-ctl/src/airflowctl/api/datamodels/generated.py`) from *optional* into *required* — a breaking Pydantic v2 model-contract change. It also shifts e.g. `dict[str, JsonValue]` → `dict[str, JsonValue | None]`. The config already sets `use-default=true`; 0.67.0 reinterprets that. - **To unblock:** investigate whether a generator flag restores the previous `= None` behaviour for nullable fields, or step the pin up incrementally to the last version that preserves defaults. Only bump when the regenerated `_generated.py` / `generated.py` diff is semantically equivalent. Closes the loop on #68816. --- Drafted-by: Claude Code (Opus 4.8); reviewed by @potiuk before posting -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
