api/*.py
APIRouter()
@router.<method>("...")
# 之前 router = APIRouter() @router.post("/api/v1/auth/login") # 之后 router = APIRouter(prefix="/api/v1/auth", tags=["auth"]) @router.post("/login")
@router\.(get|post|put|patch|delete)\s*\(\s*["']([^"']+)
api/internal.py
/v1
/internal
api/schedules/
Task: bfnqyaftrqrl5agb3qegzauy
MODEL-DEVELOP-PLATFORM-52
tao.chen commented:
阶段2 完成。
改动
api/auth.py
/api/v1/auth
api/jupyter.py
/api/v1/auth/jupyter
/jupyter
api/admin.py
/api/v1/admin
api/platform.py
/api/v1/platform
api/resources.py
/api/v1/data-resources
api/scripts.py
/api/v1
api/schedules/schedules.py
api/schedules/runs.py
/schedules/{id}/run
api/storage.py
注意
storage.py
auth.py
jupyter.py
验证
uv run python -m compileall backend/src backend/tests
uv run --package backend pytest backend/tests -q
grep '"/api/v1/' backend/src/backend/api/
遗留
No dependencies set.
The note is not visible to the blocked user.
范围(L1 风险)
api/*.py的APIRouter()改为带 prefix@router.<method>("...")去掉前缀路径示例
验证
@router\.(get|post|put|patch|delete)\s*\(\s*["']([^"']+)确认无遗漏注意
api/internal.py用 prefix/v1(main.py 会再外加/internal)api/schedules/子包内的两个 router 各自带 prefix,main.py 一次性 includeTask: bfnqyaftrqrl5agb3qegzauy
MODEL-DEVELOP-PLATFORM-52
tao.chen commented:
改动
api/auth.py— prefix/api/v1/auth,3 个路由清理api/jupyter.py— prefix/api/v1/auth,1 个路由清理(/api/v1/auth/jupyter→/jupyter)api/admin.py— prefix/api/v1/admin(已存在)api/platform.py— prefix/api/v1/platform(已存在)api/resources.py— prefix/api/v1/data-resources(已存在)api/scripts.py— prefix/api/v1,19 个路由清理(含 3 个 multi-line)api/schedules/schedules.py— prefix/api/v1,13 个路由清理(含 3 个 multi-line)api/schedules/runs.py— prefix/api/v1,6 个路由清理(含 1 个 POST/schedules/{id}/run)api/storage.py(原 storage_api.py)— prefix/v1(main.py 加/internal),4 个路由清理注意
storage.py文件名保留auth.py和jupyter.py共享 prefix/api/v1/auth(不同 tags),main.py 分两次 add验证
uv run python -m compileall backend/src backend/tests零错误uv run --package backend pytest backend/tests -q114 passedgrep '"/api/v1/' backend/src/backend/api/命中仅剩 5 处 APIRouter prefix 行遗留