certflow.actions.registry module

统一 action 注册表(Phase 3,蓝图 §1.6)。

将分散在 query_view / correction_queue_view / main_window 的 action 派发收敛为单一信源:

  • action 视图方法名``(``ActionSpec.method);

  • 派发统一走 dispatch(view, action_name, item=None),经 getattr(view, method) 解析并调用,替换 query_view 的三套内联字典、correction_queue 的 getattr 反射、 main_window 的硬编码导航 lambda。

设计要点: - 注册表为**纯 Python、无 Qt 依赖**,便于单元测试; - query_view 的 lambda action(select_all / hide_selected / mark_inspected 等)

已提升为 _action_* 命名方法并注册(任务 1.2);工具栏与右键菜单现已 100% 经 dispatch 派发,无内联 if/分支回退;set_status_* / set_supply_type_* 等配置驱动 动态 action 经前缀通用 action(set_status / set_supply_type)承接。

  • main_window 导航按钮(视图切换)已在 Phase 2.1 接入(nav.* action → _nav_* 方法)。

class certflow.actions.registry.ActionSpec(name, method, label='', icon='', tooltip='', danger=False, category='general')[源代码]

基类:object

单个 UI action 的规范描述。

参数:
name

action 唯一名(与 ui.yaml / config.yamlaction 字段一致)。

Type:

str

method

承载该 action 的视图方法名(经 getattr(view, method) 解析)。

Type:

str

label

显示文本(工具栏/菜单用),可空(运行时取 yaml)。

Type:

str

icon

图标资源标识,可空。

Type:

str

tooltip

悬停提示,可空。

Type:

str

danger

是否为危险操作(红色按钮),默认 False。

Type:

bool

category

分类(general / query / correction / nav),用于分组。

Type:

str

name: str
method: str
label: str = ''
icon: str = ''
tooltip: str = ''
danger: bool = False
category: str = 'general'
certflow.actions.registry.register(spec)[源代码]

注册单个 action。重复注册后者覆盖前者。

参数:

spec (ActionSpec)

返回类型:

None

certflow.actions.registry.register_many(specs)[源代码]

批量注册。

参数:

specs (list[ActionSpec])

返回类型:

None

certflow.actions.registry.get_spec(action_name)[源代码]

按名取 action 规范;不存在返回 None。

参数:

action_name (str)

返回类型:

ActionSpec | None

certflow.actions.registry.dispatch(view, action_name, item=None)[源代码]

view 上派发 action_name

解析流程:REGISTRY[action_name].methodgetattr(view, method) → 调用。 命中且方法存在返回 True;action 未注册或视图无该方法返回 False(调用方据此告警)。

前缀通用处理:set_status_待生产 等动态 action 名未精确注册时,回落到通用 set_status / set_supply_type action(仍走注册表,无视图内联分支)。 方法签名适配:声明 item 形参的方法在 item 非空时接收上下文项;声明 action_name 形参的方法始终接收 action 名(供 set_status 等从名解析取值)。

参数:
  • view (Any) -- 承载 action 方法的视图实例。

  • action_name (str) -- action 名。

  • item (dict | None) -- 可选上下文项(右键菜单项 dict),非空时传给方法。

返回:

是否成功派发。

返回类型:

bool