kwargs: {} gets added to plan **kwargs
维护者通常 1 天内回复
评估
调研方向
先从 prepare_params 和 _inner_prepare_params 引用的参数准备逻辑入手,然后检查 src/blueapi/worker/task.py 和 src/blueapi/worker/task_worker.py 中的执行路径。使用 Bluesky 的 abs_set 计划桩复现问题,并确认生成的调用不再包含 kwargs 项。当使用 *args 和 **kwargs 的计划执行时不再传入额外的 kwargs: {} 参数,即完成此 Issue。
由索引模型根据 Issue 内容生成。
描述
When attempting to use a plan with *args and **kwargs, the current logic for prepare_params has a bug where it will provide additional kwargs like below:
2026-10-23 17:22:42,335 INFO blueapi.worker.task_worker Submitting: task_id='1ca72adb-8af4-42d5-8253-9ad6ba446699' task=Task(name='abs_set', args=['stage.x', 1.0], params={}, metadata={'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'}) request_id=None is_complete=False is_pending=True errors=[] outcome=None
2026-10-23 17:22:42,335 INFO blueapi.worker.task_worker Got new task: task_id='1ca72adb-8af4-42d5-8253-9ad6ba446699' task=Task(name='abs_set', args=['stage.x', 1.0], params={}, metadata={'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'}) request_id=None is_complete=False is_pending=True errors=[] outcome=None
2026-10-23 17:22:42,335 INFO blueapi.worker.task Asked to run plan abs_set with {} and metadata {'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'} for all runs
2026-10-23 17:22:42,336 INFO bluesky Executing plan <bluesky.utils.Plan object at 0x7f743a7a7880>
2026-10-23 17:22:42,336 INFO bluesky.RE.state Change state on <bluesky.run_engine.RunEngine object at 0x7f746c2ed940> from 'idle' -> 'running'
2026-10-23 17:22:42,337 INFO blueapi.service.main 127.0.0.1:46838 PUT /worker/task 200
2026-10-23 17:22:42,337 ERROR bluesky Run aborted
Traceback (most recent call last):
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1596, in _run
msg = self._plan_stack[-1].throw(stashed_exception or resp)
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/utils/__init__.py", line 2092, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/plan_stubs.py", line 316, in abs_set
ret = yield Msg("set", obj, *args, group=group, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1688, in _run
new_response = await coro(msg)
^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/opentelemetry/util/_decorator.py", line 61, in async_wrapper
return await func(*args, **kwargs) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 2278, in _set
ret = obj.set(*msg.args, **kwargs)
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/ophyd_async/core/_status.py", line 289, in wrap_f
return cls(f(*args, **kwargs), name=name)
~^^^^^^^^^^^^^^^^^
TypeError: StandardMovable.set() got an unexpected keyword argument 'kwargs'
2026-10-23 17:22:42,338 INFO bluesky.RE.state Change state on <bluesky.run_engine.RunEngine object at 0x7f746c2ed940> from 'running' -> 'idle'
2026-10-23 17:22:42,339 ERROR blueapi.worker.task_worker Task failed
2026-10-23 17:22:42,339 ERROR blueapi.worker.task_worker StandardMovable.set() got an unexpected keyword argument 'kwargs'
Traceback (most recent call last):
File "/scratch/bluesky_development/blueapi/src/blueapi/worker/task_worker.py", line 436, in process_task
result = self._current.task.do_task(self._ctx)
File "/scratch/bluesky_development/blueapi/src/blueapi/worker/task.py", line 112, in do_task
result = ctx.run_engine(plan(*prepared_args, **prepared_kwargs))
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 979, in __call__
plan_return = self._resume_task(init_func=_build_task)
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1127, in _resume_task
raise exc
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1767, in _run
raise err
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1596, in _run
msg = self._plan_stack[-1].throw(stashed_exception or resp)
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/utils/__init__.py", line 2092, in __iter__
return (yield from self._iter)
^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/plan_stubs.py", line 316, in abs_set
ret = yield Msg("set", obj, *args, group=group, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1688, in _run
new_response = await coro(msg)
^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/opentelemetry/util/_decorator.py", line 61, in async_wrapper
return await func(*args, **kwargs) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 2278, in _set
ret = obj.set(*msg.args, **kwargs)
File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/ophyd_async/core/_status.py", line 289, in wrap_f
return cls(f(*args, **kwargs), name=name)
~^^^^^^^^^^^^^^^^^
TypeError: StandardMovable.set() got an unexpected keyword argument 'kwargs'
[Motor(name="stage-x"), 1.0] {'group': None, 'wait': False, 'kwargs': {}}
The dict is the kwargs, but _inner_prepare_params adds an additional kwargs: {} inside which causes a plan to fail
Steps to reproduce. Configure system tests to use bluesky plan stub abs_set. I originally discovered this when looking at https://github.com/DiamondLightSource/blueapi/pull/1694/
Acceptance Criteria
- second kwargs: () is not passed to the plan
- 主要语言
- Python
- 星标
- 13
- 派生
- 14
- 平均合并
- 3 天 10 小时
- 30 天内合并 PR
- 13
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
DiamondLightSource/blueapi 的其他 Issue
-
deployment
难度 2/5 1-3 小时 新手友好度 72/100
DiamondLightSource/blueapi#1626 ·
维护者通常 1 天内回复
-
deployment dev-environment
难度 2/5 1-3 小时 新手友好度 75/100
DiamondLightSource/blueapi#1623 · 2 条评论 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
DiamondLightSource/blueapi#1605 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 64/100
DiamondLightSource/blueapi#1494 ·
维护者通常 1 天内回复
-
难度 4/5 1-2 天 新手友好度 52/100
DiamondLightSource/blueapi#1718 ·
维护者通常 1 天内回复
查看 DiamondLightSource/blueapi 的全部 Issue
相似的 Issue
-
link-rot
难度 1/5 1 小时以内 新手友好度 67/100
-
难度 2/5 1-3 小时 新手友好度 82/100
developmentseed/titiler-cmr#265 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
Insecure Brotli version <1.2.1可能已有人在做 @jamescw19 今天认领。 未关闭
难度 1/5 1 小时以内 新手友好度 85/100
stac-utils/stac-fastapi-pgstac#438 · 1 个 reaction ·
-
bug triage
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 1 天内回复