SuperAPI AI 工具集

upgrade-fab-provider

部署与运维

查看项目

更新于 10-15 19:58

技能介绍

用途:在 Apache Airflow 的 FAB provider(providers/fab/)中升级被锁定的 Flask-AppBuilder(FAB)依赖。由于 Airflow 内联(vendored)并继承了 FAB 安全管理器的大部分代码,版本升级不是简单改一行锁定,必须与内联代码对齐,且由 pytest 对齐测试强制校验,而非 prek 钩子。真实升级的规范参考为 PR #66841("Bump flask-appbuilder to 5.2.1 and mirror new auth event hooks"),提交 c72b6613fd,可用 git show c72b6613fd 查看差异。

主要能力与涉及文件:必改 providers/fab/pyproject.toml 中的 flask-appbuilder==X.Y.Z 锁定、tests/unit/fab/auth_manager/security_manager/test_fab_alignment.py 中的 EXPECTED_FAB_VERSION、docs/index.rst 依赖表行,以及重新生成的 uv.lock。README.rst 为自动生成,不要手改,需用 sync-provider-readme prek 钩子再生成。视情况修改 override.py(移植上游变更)、www/** 与 www-hash.txt、migrations/versions/**。禁止添加 newsfragment 或手改 docs/changelog.rst。

关键用法:先确定目标版本(缺省取 PyPI 最新)并判定 patch/minor/major;三处源码锁定同步修改;uv --project providers/fab sync 安装并用 uv run --project providers/fab python -c "import importlib.metadata as m; print(m.version('flask-appbuilder'))" 确认;用仓库固定的 uv 重新生成锁:AIRFLOW_UV_VERSION=$(grep -oE 'AIRFLOW_UV_VERSION=[0-9.]+' Dockerfile.ci | head -1 | cut -d= -f2) 与 uvx --from uv==$AIRFLOW_UV_VERSION uv lock;运行对齐测试 uv run --project providers/fab pytest providers/fab/tests/unit/fab/auth_manager/security_manager/test_fab_alignment.py -xvs,沙箱下可加 AIRFLOW_HOME="$TMPDIR/fab_home" 与 -p no:rerunfailures。四个测试分别校验版本一致、无未审计 FAB 方法、无过期排除项、共享方法签名兼容,需逐一修复。资源变更时运行 prek run compile-fab-assets --all-files 重新生成 www-hash.txt;有迁移时运行 prek run update-migration-references-fab check-revision-heads-map-fab --all-files;最后运行 prek run --from-ref main --stage pre-commit 与 provider 单元测试。

限制与注意:对齐测试基于 AST 只验证结构,不保证行为一致,仍需人工比对 override.py 与上游 security/sqla/manager.py 及 BaseSecurityManager 并移植行为修复;EXPECTED_FAB_VERSION 是第二处锁定,漏改会导致测试失败;务必用固定 uv 生成锁,否则产生大量 marker 漂移;不要改动 docs/upgrading.rst;提交信息用祈使句、不加 Conventional-Commits 前缀,并在 providers/fab/CONTRIBUTING.rst 的历史列表中前置本次 PR。其余如具体版本号、实际改动量等以资料为准,暂未提供更多细节。