# dwf-cli **Repository Path**: tsinghua-nercbds/dwf-cli ## Basic Information - **Project Name**: dwf-cli - **Description**: DWF(Digital Workflow)平台命令行工具,通过 REST API 与 DWF 后端交互,为 AI 智能体和开发人员提供数据模型查询、数据操作、认证管理等功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-05-11 - **Last Updated**: 2026-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DWF-CLI DWF(Digital Workflow)平台命令行工具,通过 REST API 与 DWF 后端交互,为 AI 智能体和开发人员提供数据模型查询、数据操作、认证管理等功能。 ## 功能 - **用户认证** — 登录/登出/状态查询(AES 加密密码传输) - **数据模型查询** — 查询实体类、关联类、外部实体类及其属性 - **数据操作** — 数据的增删改查(CRUD) - **配置管理** — 服务器地址、AES 密钥等配置项管理 ## 快速开始 ### 环境要求 - Python 3.14+ - [uv](https://docs.astral.sh/uv/) 包管理器 ### 安装 ```bash git clone https://gitee.com/tsinghua-nercbds/dwfcli.git cd dwfcli uv sync ``` ### 配置与登录 ```bash # 配置 DWF 服务器地址 dwf config set server http://your-dwf-server:6060 # 登录(输入原始密码,CLI 自动加密) dwf auth login # 查看登录状态 dwf auth status ``` ### 使用示例 ```bash # 查询实体类列表 dwf datamodel list dwf datamodel list -p 1 -s 10 # 查询关联类 dwf datamodel list -t r # 查询外部实体类 dwf datamodel list -t x # 包含系统类 dwf datamodel list --system # 查看某个类的属性 dwf datamodel show User dwf datamodel show Animate -f json # 数据操作 dwf data list --model User --page 0 dwf data get --model User dwf data create --model User --data '{"name":"test"}' # 配置管理 dwf config list dwf config get server dwf config set aes_key "your-key" ``` ## 架构 项目采用三层分离架构: ``` cli/ → api/ → core/ ``` - **`cli/`** — CLI 层:Typer 命令定义、参数解析、Rich 表格输出 - **`api/`** — API 层:DWF 后端 REST API 的 Python SDK(httpx) - **`core/`** — 基础设施层:配置管理、AES 加密、错误定义、输出格式化 依赖方向严格单向:`cli → api → core`,禁止反向依赖。 详细架构设计见 [ARCHITECTURE.md](ARCHITECTURE.md)。 ## 项目结构 ``` src/dwf_cli/ ├── __init__.py # 入口点 (dwf = "dwf_cli:app") ├── __main__.py # python -m dwf_cli ├── api/ # DWF 后端 REST SDK │ ├── client.py # HTTP 客户端(baseURL、token 注入、错误映射) │ ├── auth.py # 认证接口 │ ├── datamodel.py # 数据模型接口 │ ├── concept.py # 概念查询接口 │ └── data.py # 数据 CRUD 接口 ├── cli/ # Typer 命令 │ ├── __init__.py # 命令注册 + 上下文初始化 │ ├── _common.py # 共享工具(ContextObj、get_client) │ ├── auth.py # dwf auth {login, logout, status} │ ├── datamodel.py # dwf datamodel {list, show} │ ├── data.py # dwf data {list, get, create, update, delete} │ ├── concept.py # dwf concept {list, show, search} │ └── config.py # dwf config {get, set, list} └── core/ # 基础设施 ├── config.py # 配置管理(JSON 持久化) ├── crypto.py # AES 密码加密 ├── errors.py # 异常层级 + 退出码 └── output.py # Rich 表格/JSON 输出 ``` ## 开发 ### 添加新命令 只需 3 步: 1. 新建 `src/dwf_cli/api/xxx.py` — 定义 API 调用函数 2. 新建 `src/dwf_cli/cli/xxx.py` — 定义 Typer 命令 3. 编辑 `src/dwf_cli/cli/__init__.py` — 添加 `app.add_typer()` ### 开发命令 ```bash uv run dwf --help # 运行 CLI uv run pytest -v # 运行测试 uv run ruff check . # 代码检查 uv run ruff format . # 代码格式化 uv add # 添加依赖 ``` ## 技术栈 - [Typer](https://typer.tiangolo.com/) — CLI 框架 - [httpx](https://www.python-httpx.org/) — HTTP 客户端 - [Rich](https://rich.readthedocs.io/) — 终端美化输出 - [pycryptodome](https://www.pycryptodome.org/) — AES 密码加密 - [uv](https://docs.astral.sh/uv/) — 包管理器 - [pytest](https://docs.pytest.org/) — 测试框架 - [Ruff](https://docs.astral.sh/ruff/) — 代码检查与格式化 ## License MIT