hotspot/scripts/load_path.py
yumoqing 7bb9bfc97e fix: Sage-compliant DSPY — no imports, env delegation, init.py, scripts/load_path.py
- Add hotspot/init.py: load_hotspot() registers run_fetch/run_analysis/get_stats on ServerEnv
- Rewrite .dspy files: only import json, use get_sor_context + env.*() delegation
- Update db.py/engine.py/analysis.py: accept optional sor parameter for DSPY context
- Add scripts/load_path.py: per-module RBAC permission registration
- Follows sage-dspy-development + rbac-permission-initialization-pattern skills
2026-08-01 16:49:49 +08:00

71 lines
1.8 KiB
Python

"""
热点雷达模块 — 独立权限注册脚本
在 Sage 环境中执行: python scripts/load_path.py
"""
import os, sys, subprocess
# 查找 Sage 根目录 (从当前模块位置推断)
def find_sage_root():
for candidate in [
os.path.expanduser('~/repos/sage'),
os.path.expanduser('~/sage'),
os.path.expanduser('~/py/sage'),
]:
if os.path.isdir(os.path.join(candidate, 'py3', 'bin')):
return candidate
# Fallback: 通过导入路径查找
try:
import load_path as _ # Sage 自己的 load_path.py
sage_root = os.path.dirname(os.path.abspath(_.__file__))
return sage_root
except ImportError:
pass
print('ERROR: Sage root not found. Set SAGE_ROOT env var.')
sys.exit(1)
SAGE_ROOT = os.environ.get('SAGE_ROOT', find_sage_root())
PY = os.path.join(SAGE_ROOT, 'py3', 'bin', 'python')
SET_ROLE_PERM = os.path.join(SAGE_ROOT, 'set_role_perm.py')
MOD = 'hotspot'
PATHS_LOGINED = [
f'/{MOD}',
f'/{MOD}/index.ui',
f'/{MOD}/stats.dspy',
f'/{MOD}/fetch_now.dspy',
f'/{MOD}/analyze.dspy',
# 6 张表的 CRUD
f'/{MOD}_source',
f'/{MOD}_source/%',
f'/{MOD}_schedule',
f'/{MOD}_schedule/%',
f'/{MOD}_fetch_log',
f'/{MOD}_fetch_log/%',
f'/{MOD}_item',
f'/{MOD}_item/%',
f'/{MOD}_analysis',
f'/{MOD}_analysis/%',
f'/{MOD}_alert',
f'/{MOD}_alert/%',
]
def set_perm(role, path):
env = os.environ.copy()
env['SAGE_RBAC_DB'] = 'sage'
subprocess.run(
[PY, SET_ROLE_PERM, role, path],
cwd=SAGE_ROOT, capture_output=True, env=env
)
def main():
total = 0
for p in PATHS_LOGINED:
set_perm('logined', p)
total += 1
print(f'Registered {total} hotspot paths')
print('Note: restart Sage for permissions to take effect')
if __name__ == '__main__':
main()