api.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # -*- coding: utf-8 -*-
  2. r"""观澜 · 前端 —— **对外公开面**(P5 起:实现已在本模块目录内)。
  3. 用户令 2026-09-22:按模块重构源代码目录,**每模块只许经 `api.py` 被别的模块调用**。
  4. 本模块负责(P5 完成):
  5. * `assets/` —— 工作台单页的前端资源件(app.js / app.css / charts.js / favicon.svg);
  6. * `pages/` —— 页面装配(`shell.html` 外壳、`build.py` 出页、`snapshot.py` 单文件烘焙、`classic.py` 经典页模板);
  7. * `design.py` / `lang.py` / `terms.py` —— 设计系统 CSS 单一来源、双语文案语言包、显示层术语映射;
  8. * `builders/` —— 门户与静态页装配器(CLI 入口仍在 `scripts/`,为兼容壳)。
  9. 旧路径(`src/windscada/ui/*`、`src/windscada/{design,lang,terms}.py`、`scripts/{portal_build,guanlan_portal_*}.py`)
  10. 一律留兼容壳,行为与迁移前逐字节一致。公开名 → 本模块内的实现模块(PEP 562 惰性转发,import 本文件不连带重依赖)。
  11. """
  12. from __future__ import annotations
  13. import importlib
  14. _TARGETS: dict[str, str] = {
  15. # ★P13(2026-10-01):ui_build 已随门户/旧页退役删除
  16. 'ui_snapshot': 'app_frontEnd.app_frontEnd_guanlan.pages.snapshot',
  17. # ★P13(2026-10-01):classic_pages 已随门户/旧页退役删除
  18. # ★P13(2026-10-01):`design`/`terms` 已按令删除(旧页设计系统与显示层术语映射随旧页退役;现行前端在 web/ 下)
  19. # ★P13:lang 已随旧页退役删除(现行语言包在 web/src/i18n/)
  20. # ★P13(2026-10-01):portal_build 已随门户/旧页退役删除
  21. # ★P13(2026-10-01):portal_anchor_fix 已随门户/旧页退役删除
  22. # ★P13(2026-10-01):portal_claims 已随门户/旧页退役删除
  23. # 英文投影层仍在既有路径(数据层投影,归口待裁;P5 未迁)
  24. 'ui_en': 'src.windscada.ui_en',
  25. 'i18n_en': 'src.windscada.i18n_en',
  26. 'cms_ui': 'src.windcms.ui',
  27. }
  28. __all__ = list(_TARGETS)
  29. def __getattr__(name: str):
  30. target = _TARGETS.get(name)
  31. if target is None:
  32. raise AttributeError(
  33. f'{__name__} 未公开 {name!r};公开面见 __all__ —— 模块间调用只许走 api.py'
  34. )
  35. mod = importlib.import_module(target)
  36. globals()[name] = mod
  37. return mod