Skip to content

test(starry): add Python web framework carpet (python-net)#1441

Merged
ZR233 merged 1 commit into
rcore-os:devfrom
Lfan-ke:test-python-net-app
Jun 30, 2026
Merged

test(starry): add Python web framework carpet (python-net)#1441
ZR233 merged 1 commit into
rcore-os:devfrom
Lfan-ke:test-python-net-app

Conversation

@Lfan-ke

@Lfan-ke Lfan-ke commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

概述

新增 apps/starry/python-net —— 在 StarryOS 上用 musl-native CPython 3.14 对一组 Python Web / ASGI / GraphQL 框架做 on-target 地毯级测试,四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 qemu-10 运行。

每个模块是依框架公开 API 逐项铺满的工业级 carpet(精确值断言):Django 经 django.test.Client 驱动内存 sqlite;FastAPI 既经 in-process 原生 ASGI、又经真实 uvicorn ASGI 服务器 over IPv4 回环驱动;Strawberry 执行真实 GraphQL 操作。每个模块仅当其内部 fail 计数为 0 时才打印锚定的 *_DONE marker。run_all.py 运行全部 3 个模块,全部通过(PASS == TOTAL,无 skip)才输出 TEST PASSED。合计 3 模块 / 395 条断言

覆盖

模块 框架 维度 断言
django Django 4.2.30 URL 路由 / 转换器(int·str·slug·uuid·path)/ 视图(FBV·CBV)/ 响应(HttpResponse·JsonResponse·redirect·Http404·状态码·cookie)/ 模板(render·filters)/ ORM(sqlite:CRUD·filter·aggregate·F·Q·FK)/ 表单校验 / 中间件 / signing / cache 157
fastapi FastAPI 0.121.2 + uvicorn 0.38.0 + Pydantic 2.12.3 路由 verb / 路径-query-body 参数类型转换 / 422 校验(精确 error 结构)/ Depends 依赖注入 / 中间件 / OpenAPI / Pydantic 2 model_validate-dump-json·field_validator·computed_field·ValidationError + 真实 uvicorn ASGI server over 回环 HTTP 132
strawberry strawberry-graphql 0.316.0(graphql-core 3.2.6) schema / 类型 / 查询 / mutation / enum / interface / union / 自定义 scalar / 异步 resolver / 变量 / 内省 / 错误路径 / 泛型 / SDL 106

验证

四架构单核 qemu-10 StarryOS 实测,AGGREGATE PASS=3/3 + PYTHON_NET_OK=3/3 + TEST PASSED

架构 结果
x86_64 3/3
aarch64 3/3
riscv64 3/3
loongarch64 3/3

运行:cargo xtask starry app qemu -t python-net --arch <arch>prebuild.sh 把 CPython 3.14 与各框架(Django / FastAPI / uvicorn / Pydantic + 原生 pydantic-core / GraphQL-core)经 qemu-user-static apk add 进 base-rootfs staging(每包含原生 pydantic-core 按 target 架构解析),把架构无关的 strawberry-graphql wheel 解压进 site-packages,再把解释器、其共享库闭包、stdlib + site-packages 与 carpet 模块注入 per-app overlay。

apps/starry/python-net 在 StarryOS 上用 musl-native CPython 3.14 对一组 Python Web / ASGI /
GraphQL 框架做 on-target 地毯级测试:Django(经 test.Client 驱动内存 sqlite,路由/视图/ORM/
模板/表单/中间件)、FastAPI + uvicorn(路由/Pydantic 类型转换/依赖注入/OpenAPI,并经真实 uvicorn
ASGI 服务器 over IPv4 回环)、Strawberry GraphQL(schema/查询/mutation/scalar/异步 resolver),
合计 3 模块、395 条精确值断言。四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 qemu-10
StarryOS 实测各 PYTHON_NET_OK=3/3 通过。prebuild.sh 经 qemu-user-static 把 CPython 3.14 与各
框架 apk 装进 base-rootfs staging(原生 pydantic-core 按 target 架构解析),解压 strawberry +
其依赖的 cross-web wheel 进 site-packages,再注入 per-app overlay。

Signed-off-by: 林晨 (Leo Cheng) <chengkelfan@qq.com>

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: PR #1441 — test(starry): add Python web framework carpet (python-net)

变更概述

新增 apps/starry/python-net/,在 StarryOS 上用 musl-native CPython 3.14 对 Django 4.2.30、FastAPI 0.121.2 + uvicorn 0.38.0、Strawberry GraphQL 0.316.0 三个 Python Web 框架做 on-target 地毯级测试,覆盖四架构(x86_64 / aarch64 / riscv64 / loongarch64)。16 个新文件,+3072 行,纯增量,零删减。

结构与模式一致性

  • 文件布局完全对齐 apps/starry/python-lang/:README.md、build-.toml、qemu-.toml、prebuild.sh、python/ 测试模块。
  • 四个 build-*.toml 与 python-lang 完全一致(diff 为空)。
  • qemu-*.toml 使用合理的 2048M 内存(Web 框架比纯 Python 语言测试重),loongarch64 超时 18000s,其余 6000s——合理。
  • success_regex / fail_regex 配置正确,能可靠捕获 TEST PASSED / TEST FAILED / panic。

prebuild.sh

  • 与 python-lang 结构一致:extract base rootfs → normalize symlinks → apk add python3 + 框架包 → copy to overlay。
  • 安装包列表完整:python3 py3-django py3-fastapi uvicorn py3-pydantic py3-graphql-core py3-asgiref py3-dateutil py3-packaging
  • 通过 qemu-user-static 运行 apk add,自动解析目标架构的 native 包(含 pydantic-core)。
  • strawberry-graphql 和 cross-web 以 .whl 资产形式内嵌,解压进 site-packages——合理(无 apk 包)。
  • 版本门控 >= 3.14 确保不在低版本解释器上跳过检查。

测试模块

  • DjangoCarpet.py(765 行 / 157 断言):路由/转换器/FBV/CBV/响应/ORM/sqlite/模板/表单/中间件/signing/cache,通过 django.test.Client + 内存 sqlite。
  • FastapiCarpet.py(1065 行 / 132 断言):in-process ASGI + 真实 uvicorn over IPv4 回环,路由/参数/422 校验/Depends/中间件/OpenAPI/Pydantic 2。
  • StrawberryCarpet.py(860 行 / 106 断言):schema/查询/mutation/enum/interface/union/自定义 scalar/async resolver/内省/错误路径/泛型/SDL。
  • 每个模块:chk() 计数器 + XXX_RESULT ok=N fail=M + 仅 fail=0 时打印 XXX_DONE + 非零退出。
  • run_all.py:子进程运行全部模块,仅 3/3 通过时输出 TEST PASSED + exit 0,否则 TEST FAILED + exit 1——失败传播正确。

重复 / 重叠分析

  • base 分支无 python-net 相关代码。
  • PR #1440(node-lib)由同一作者提交,但覆盖完全不同的测试面(Node.js 库 vs Python Web 框架),无重叠。

CI 状态

  • Detect changed paths — success
  • Cancel stale CI runs — success
  • matrix.name × 2 — skipped(PR 不含 Rust/Cargo 变更,符合路径过滤预期)
  • Publish axvisor-lvz / base container image — skipped(同上)
  • 无失败,无 PR 引起的 CI 问题。

阻塞项检查

  • ✅ 无 Rust 代码变更(不需要 cargo fmt / clippy / test)
  • ✅ 无 Cargo.toml / Cargo.lock 变更(不涉及 crates.io patch 问题)
  • ✅ 无公共 API 或架构变更
  • ✅ 无安全/数据丢失/资源泄漏风险
  • ✅ 测试失败传播链完整
  • ✅ 无重复 PR

结论

PR 结构规范、对齐已有模式、测试覆盖充分、失败传播正确、CI 无异常、无阻塞项。APPROVE

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审当前 head f534842cf1132e5a1b85c71e65752edd9b3c746a,本轮同意合入。

这个 PR 新增 apps/starry/python-net,属于 operator-facing Starry app workflow,放在 apps/starry 层级是合适的,没有把 app 场景塞进 test-suit/starryos。目录结构包含四架构 build/qemu 配置、prebuild.sh、两个 wheel 资产和 python/ 下的 Django/FastAPI/Strawberry carpet 模块;qemu-*.toml 使用 python3 /usr/bin/run_all.py 作为 guest entry,success_regex 只匹配单独一行 TEST PASSEDfail_regex 覆盖 panic 与 TEST FAILED,失败传播链清晰。

实现/准备逻辑方面,prebuild.sh 会从 managed Alpine rootfs 抽取 staging root,经 qemu-user-static 在目标架构 rootfs 里安装 CPython 3.14 与 Django/FastAPI/uvicorn/Pydantic/graphql-core 等包,再把解释器、stdlib/site-packages、native .so 依赖闭包和 carpet 模块注入 overlay;脚本还对 Python 版本做了 >=3.14 门控,不会在旧解释器上静默降级。run_all.py 逐个运行三个模块,只在全部模块通过时输出 TEST PASSED

验证结果:

  • 语法/静态检查:bash -n apps/starry/python-net/prebuild.sh 通过;python3 -m py_compile 覆盖 DjangoCarpet.pyFastapiCarpet.pyStrawberryCarpet.pyrun_all.py 均通过。
  • 手动 runtime:在当前 head 本地运行 cargo xtask starry app qemu -t python-net --arch x86_64 通过。guest 输出 DJANGO_RESULT ok=157 fail=0FASTAPI_RESULT ok=132 fail=0STRAWBERRY_RESULT ok=106 fail=0PYTHON_NET_OK=3/3,最终打印 TEST PASSED 并命中 success regex。
  • CI:current-head GitHub checks 只有路径过滤/取消陈旧 run 等通用检查成功,app QEMU 没有被 CI 自动覆盖;本次手动 x86_64 runtime 覆盖了 CI-missing app workflow。多架构声明中 aarch64/riscv64/loongarch64 未在本轮本地重复跑,后续若要把该 app 纳入必跑矩阵,需要单独接入 CI 或提供可追溯的多架构日志。

重复/重叠检查:base 分支没有 apps/starry/python-net;open PR 中没有另一个同类 Python Web framework carpet。#1437-#1440 是同作者的 Java/Node 其他 app 场景,测试面不同,属于并列 app 覆盖而非重复。未发现阻塞问题。

@ZR233
ZR233 merged commit 0a0e39b into rcore-os:dev Jun 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants