# ============================================================ # Web 端演示数据手动播种脚本 # 用法(仓库根目录): # python scripts/seed_web_demo.py # 为 platform 租户播种到 server/data # python scripts/seed_web_demo.py --tenant --user-id 1001 # python scripts/seed_web_demo.py --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()