Commit ac36cad6 by DigHuang Committed by GitHub

fix: switch user_main invocation to use keyword arguments for better default…

fix: switch user_main invocation to use keyword arguments for better default parameter handling (#6756)

* fix: switch user_main invocation to use keyword arguments for better default parameter handling

* fix: test

---------

Co-authored-by: archer <545436317@qq.com>
parent c9915a6b
...@@ -27,8 +27,19 @@ jobs: ...@@ -27,8 +27,19 @@ jobs:
node-version: '20' node-version: '20'
cache: 'pnpm' cache: 'pnpm'
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install Dependencies - name: Install Dependencies
run: pnpm install run: pnpm install
- name: Install Python Dependencies
run: pip install -r projects/code-sandbox/requirements.txt
- name: Run Unit Tests - name: Run Unit Tests
run: pnpm --filter=code-sandbox test run: pnpm --filter=code-sandbox test
...@@ -613,15 +613,12 @@ def main_loop(): ...@@ -613,15 +613,12 @@ def main_loop():
else: else:
result = user_main(variables) result = user_main(variables)
else: else:
call_args = [] # 用 kwargs 调用:缺席参数走函数默认值,不影响后面的参数
for p in params: for p in params:
if p in variables: if p not in variables and sig.parameters[p].default is _inspect_mod.Parameter.empty:
call_args.append(variables[p])
elif sig.parameters[p].default is not _inspect_mod.Parameter.empty:
break
else:
raise TypeError(f"Missing required argument: '{p}'") raise TypeError(f"Missing required argument: '{p}'")
result = user_main(*call_args) call_kwargs = {p: variables[p] for p in params if p in variables}
result = user_main(**call_kwargs)
signal.alarm(0) signal.alarm(0)
write_line({ write_line({
......
...@@ -99,6 +99,16 @@ def main(name, age): ...@@ -99,6 +99,16 @@ def main(name, age):
expect(result.data?.codeReturn.msg).toBe('Hello, World!'); expect(result.data?.codeReturn.msg).toBe('Hello, World!');
}); });
it('main 前置命名参数缺失但有默认值,后置参数仍按 kwargs 注入', async () => {
const result = await pool.execute({
code: `def main(a=None, b=None):
return {"a": a if a else "无", "b": b if b else "无"}`,
variables: { b: 'd2' }
});
expect(result.success).toBe(true);
expect(result.data?.codeReturn).toEqual({ a: '无', b: 'd2' });
});
// ===== 返回值类型兼容 ===== // ===== 返回值类型兼容 =====
it('返回列表(旧版常见)', async () => { it('返回列表(旧版常见)', async () => {
......
...@@ -25,8 +25,8 @@ beforeAll(async () => { ...@@ -25,8 +25,8 @@ beforeAll(async () => {
}); });
afterAll(async () => { afterAll(async () => {
await jsPool.shutdown(); await jsPool?.shutdown();
await pyPool.shutdown(); await pyPool?.shutdown();
}); });
describe('模块拦截', () => { describe('模块拦截', () => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment