api.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. r"""观澜 · 质量门与审计 + 打包安装 —— **对外公开面**(P7 起:实现已在本模块目录内)。
  3. 用户令 2026-09-22:按模块重构源代码目录,**每模块只许经 `api.py` 被别的模块调用**。
  4. 本模块负责(P7 完成):
  5. * `audits/` —— 审计器:配置统一、页面归口、产物反向呼应、链路缺口、可移植性、日志、安全扫描、
  6. 中文表达、模块边界、页面指纹、产物清点与补缺、依赖台账;
  7. * `docs/` —— 三件交付文档的构建与插图、版本记录;
  8. * `pack/` —— 打包器与开箱验证入口、卸载器。
  9. **根引导脚本(install.ps1 / install.sh / uninstall.* / check.bat / pack.bat|sh / start|stop.bat)原地不动**:
  10. 它们是"解压即用"的引导层(README 与"入口引用闭合"门钉着它们),其 Python 实现已迁入本模块,
  11. `scripts/<件>.py` 留 CLI 壳 ⇒ 引导脚本与既有命令行一字不改。公开名 → 本模块内的实现模块(PEP 562 惰性转发)。
  12. """
  13. from __future__ import annotations
  14. import importlib
  15. _TARGETS: dict[str, str] = {
  16. 'audit_chinese_terms': 'app_qualityGate.app_qualityGate_guanlan.audits.audit_chinese_terms',
  17. 'chain_gap_check': 'app_qualityGate.app_qualityGate_guanlan.audits.chain_gap_check',
  18. 'check_portability': 'app_qualityGate.app_qualityGate_guanlan.audits.check_portability',
  19. 'check_transferable': 'app_qualityGate.app_qualityGate_guanlan.audits.check_transferable',
  20. 'config_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.config_audit',
  21. 'detail_deps': 'app_qualityGate.app_qualityGate_guanlan.audits.detail_deps',
  22. 'guanlan_baseline_manifest': 'app_qualityGate.app_qualityGate_guanlan.audits.guanlan_baseline_manifest',
  23. 'inventory_products': 'app_qualityGate.app_qualityGate_guanlan.audits.inventory_products',
  24. 'log_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.log_audit',
  25. 'module_boundary_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.module_boundary_audit',
  26. 'page_fingerprint': 'app_qualityGate.app_qualityGate_guanlan.audits.page_fingerprint',
  27. 'pages_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.pages_audit',
  28. 'pages_sweep': 'app_qualityGate.app_qualityGate_guanlan.audits.pages_sweep',
  29. 'products_restore_missing': 'app_qualityGate.app_qualityGate_guanlan.audits.products_restore_missing',
  30. 'products_reverse_audit': 'app_qualityGate.app_qualityGate_guanlan.audits.products_reverse_audit',
  31. 'products_state': 'app_qualityGate.app_qualityGate_guanlan.audits.products_state',
  32. 'security_scan': 'app_qualityGate.app_qualityGate_guanlan.audits.security_scan',
  33. 'delivery_docs_build': 'app_qualityGate.app_qualityGate_guanlan.docs.delivery_docs_build',
  34. 'delivery_docs_figures': 'app_qualityGate.app_qualityGate_guanlan.docs.delivery_docs_figures',
  35. 'version_log': 'app_qualityGate.app_qualityGate_guanlan.docs.version_log',
  36. 'pack_dist': 'app_qualityGate.app_qualityGate_guanlan.pack.pack_dist',
  37. 'pack_verify_entry': 'app_qualityGate.app_qualityGate_guanlan.pack.pack_verify_entry',
  38. 'guanlan_uninstall': 'app_qualityGate.app_qualityGate_guanlan.pack.guanlan_uninstall',
  39. }
  40. __all__ = list(_TARGETS)
  41. def __getattr__(name: str):
  42. target = _TARGETS.get(name)
  43. if target is None:
  44. raise AttributeError(
  45. f'{__name__} 未公开 {name!r};公开面见 __all__ —— 模块间调用只许走 api.py'
  46. )
  47. mod = importlib.import_module(target)
  48. globals()[name] = mod
  49. return mod