aps-agent/scripts/seed_web_demo.py

51 lines
2.2 KiB
Python
Raw Normal View History

# ============================================================
# Web 端演示数据手动播种脚本
# 用法(仓库根目录):
# python scripts/seed_web_demo.py # 为 platform 租户播种到 server/data
# python scripts/seed_web_demo.py --tenant <JMS租户uuid> --user-id 1001
# python scripts/seed_web_demo.py --data-dir <aps-data-dir> --force
# 线上容器内补播:kubectl exec 进容器后执行同一命令(数据落 /app/server/data)
# ============================================================
from __future__ import annotations
import argparse
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def main() -> None:
parser = argparse.ArgumentParser(description="为 Web 端播种 APS 演示项目")
parser.add_argument("--tenant", default="platform", help="租户 uuid(JMS 租户填其 uuid;默认 platform)")
parser.add_argument("--user-id", type=int, default=1001, help="演示项目属主用户 ID")
parser.add_argument("--username", default="demo-admin", help="演示项目属主用户名")
parser.add_argument("--data-dir", default=None, help="数据目录(默认 APS_DATA_DIR 或 server/data)")
parser.add_argument("--force", action="store_true", help="忽略 marker/已有项目,强制再播一套")
args = parser.parse_args()
os.environ.setdefault("APS_MODE", "web")
os.environ["APS_WEB_DEMO_SEED"] = "1"
if args.data_dir:
os.environ["APS_DATA_DIR"] = os.path.abspath(args.data_dir)
from server.auth.context import IdentityContext
from server.state.web_demo import marker_path, seed_demo_workspace
identity = IdentityContext(
user_id=args.user_id,
username=args.username,
fullname="演示管理员",
tenant_uuid=args.tenant,
roles=("planner",),
)
seeded = seed_demo_workspace(identity, force=args.force)
if seeded:
print(f"OK 已为租户 {args.tenant} 播种演示项目 -> {os.environ.get('APS_DATA_DIR') or 'server/data'}")
else:
print(f"SKIP 租户 {args.tenant} 已有项目或已播种(marker: {marker_path(args.tenant)}),--force 可强制重播")
if __name__ == "__main__":
main()