104 lines
4.3 KiB
Python
104 lines
4.3 KiB
Python
from dataclasses import dataclass
|
|
|
|
from cli.tui.actions.builders import TuiActionSpecFactory
|
|
from cli.tui.actions.factories.cache import CacheActionTemplateFactory
|
|
from cli.tui.actions.factories.gen import GenActionTemplateFactory
|
|
from cli.tui.actions.factories.jobs import JobActionTemplateFactory
|
|
from cli.tui.actions.factories.static import StaticActionTemplateFactory
|
|
from cli.tui.actions.registry import TuiActionRegistry, TuiActionSlotResolver
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class TuiActionRegistryBuilder:
|
|
"""
|
|
TUI 动作注册表构建器。
|
|
|
|
该对象负责装配各领域动作模板工厂,最终输出浏览页和详情页共用的
|
|
动作注册表,避免模板常量继续散落在模块底部。
|
|
|
|
:param jobs: 任务页动作模板工厂
|
|
:param cache: 缓存页动作模板工厂
|
|
:param gen: 代码生成页动作模板工厂
|
|
:param static: 静态页面动作模板工厂
|
|
:param spec_factory: 动作规格构建器
|
|
"""
|
|
|
|
jobs: JobActionTemplateFactory
|
|
cache: CacheActionTemplateFactory
|
|
gen: GenActionTemplateFactory
|
|
static: StaticActionTemplateFactory
|
|
spec_factory: TuiActionSpecFactory
|
|
|
|
def build(self) -> TuiActionRegistry:
|
|
"""
|
|
构建 TUI 动作注册表。
|
|
|
|
:return: 动作注册表
|
|
"""
|
|
return TuiActionRegistry(
|
|
browser_resolvers={
|
|
'jobs': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'primary': self.jobs.create_run_once_template(),
|
|
'secondary': self.jobs.create_toggle_template(),
|
|
'global': self.jobs.create_sync_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'configs': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'global': self.static.create_config_sync_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'cache': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'global': self.cache.create_clear_wizard_template(),
|
|
'utility': self.cache.create_warmup_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'gen': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'primary': self.gen.create_export_wizard_template(),
|
|
'secondary': self.gen.create_import_wizard_template(),
|
|
'global': self.gen.create_export_dry_run_template(),
|
|
'utility': self.gen.create_sync_db_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
},
|
|
detail_resolvers={
|
|
'app': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'primary': self.static.create_app_run_template(),
|
|
'global': self.static.create_app_run_wizard_template(),
|
|
'utility': self.static.create_completion_install_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'database': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'global': self.static.create_db_upgrade_wizard_template(),
|
|
'utility': self.static.create_db_init_dry_run_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'ops': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'primary': self.static.create_ops_ping_db_template(),
|
|
'secondary': self.static.create_ops_ping_redis_template(),
|
|
'global': self.static.create_prod_check_wizard_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
'crypto': TuiActionSlotResolver(
|
|
slot_templates={
|
|
'primary': self.static.create_crypto_keygen_template(),
|
|
'global': self.static.create_crypto_rotate_dry_run_template(),
|
|
},
|
|
spec_factory=self.spec_factory,
|
|
),
|
|
},
|
|
)
|