DWF platform command-line tool for AI agents
Project description
DWF-CLI
DWF(Digital Workflow)平台命令行工具,通过 REST API 与 DWF 后端交互,为 AI 智能体和开发人员提供数据模型查询、数据操作、认证管理等功能。
功能
- 用户认证 — 登录/登出/状态查询(AES 加密密码传输)
- 数据模型管理 — 查询/创建/更新/删除实体类、关联类、外部实体类及其属性
- 数据操作 — 对象数据的增删改查(CRUD),支持
--if-not-exists幂等创建 - 高级查询 — 对象列表支持
refs(关联字段拉平)和options(嵌套子查询) - Excel 快速建表 — 上传 Excel 一键完成建表和数据导入
- 功能模型 — 应用管理、全局操作列表
- 表单模型 — 视图的查询/创建/更新/删除
- Schema 自省 —
dwf-cli schema查看命令参数定义,--validate校验输入 - 配置管理 — 服务器地址、AES 密钥等配置项管理
快速开始
环境要求
- Python 3.12+
- uv 包管理器
安装
# 安装(推荐 uv tool)
uv tool install dwf-cli
# 或从源码安装
git clone https://gitee.com/tsinghua-nercbds/dwf-cli.git
cd dwf-cli
uv tool install .
配置与登录
# 配置 DWF 服务器地址
dwf-cli config set server http://your-dwf-server:6060
# 登录(输入原始密码,CLI 自动加密)
dwf-cli auth login
# 查看登录状态
dwf-cli auth status
使用示例
# 查询实体类列表
dwf-cli datamodel list
dwf-cli datamodel list -p 1 -s 10
# 查询关联类 / 外部实体类
dwf-cli datamodel list -t r
dwf-cli datamodel list -t x
# 包含系统类
dwf-cli datamodel list --system
# 查看某个类的属性
dwf-cli datamodel show User
dwf-cli datamodel show Animate -f json
# 创建实体类(支持 --type entity|relation|external)
dwf-cli datamodel create --data '[{"className":"TestClass","displayName":"测试类"}]'
dwf-cli datamodel create -t relation --data '[{"className":"UserAsset","leftClass":"User","rightClass":"Asset"}]'
dwf-cli datamodel create -t external --external-mode sql --file ext.json
# 更新类信息
dwf-cli datamodel update --data '{"id":"ABC123","displayName":"新名称"}'
dwf-cli datamodel update -t external --data '{"id":"EXT123","displayName":"新名称"}'
# 属性管理
dwf-cli datamodel attribute list --keyword name
dwf-cli datamodel attribute create --data '[{"attributeName":"phone","valueType":"String"}]'
dwf-cli datamodel attribute bind -c User --data '[{"attributeName":"phone"}]'
# 对象数据操作
dwf-cli datamodel object list -c User -p 0
dwf-cli datamodel object get <oid> -c User
dwf-cli datamodel object create -c User --data '{"name":"test"}'
dwf-cli datamodel object create -c User --data '{"name":"test"}' --if-not-exists
# 对象高级查询(refs 关联字段拉平)
dwf-cli datamodel object list -c Animate --file query.json
# Excel 一键建表
dwf-cli datamodel excel-quickstart template.xlsx
# Schema 自省
dwf-cli schema --all
dwf-cli schema datamodel create
# 功能模型
dwf-cli funcmodel app list
dwf-cli funcmodel operations list
# 表单模型
dwf-cli formmodel view list -c User
dwf-cli formmodel view create -c User --name myView
# 配置管理
dwf-cli config list
dwf-cli config get server
dwf-cli config set aes_key "your-key"
文档
完整文档使用 MkDocs + Material 主题构建:
# 本地预览(默认不含 API 参考文档,构建更快)
uv run mkdocs serve
# 包含 API 参考文档
DWF_INCLUDE_API_DOCS=1 uv run mkdocs serve
# 重新生成 API 文档(从 OpenAPI JSON)
uv run python scripts/openapi_to_md.py
文档站点自动部署至 Tomcat(通过 Jenkinsfile CI)。
架构
项目采用三层分离架构:
cli/ → api/ → core/
cli/— CLI 层:Typer 命令定义、参数解析、Rich 表格输出api/— API 层:DWF 后端 REST API 的 Python SDK(httpx)core/— 基础设施层:配置管理、AES 加密、错误定义、输出格式化
依赖方向严格单向:cli → api → core,禁止反向依赖。
详细架构设计见 ARCHITECTURE.md。
项目结构
src/dwf_cli/
├── __init__.py # 入口点 (dwf-cli = "dwf_cli:app")
├── __main__.py # python -m dwf_cli
├── api/ # DWF 后端 REST SDK
│ ├── client.py # HTTP 客户端(baseURL、token 注入、错误映射)
│ ├── auth.py # 认证接口
│ ├── datamodel.py # 数据模型 + 对象 CRUD 接口
│ ├── funcmodel.py # 功能模型接口
│ └── formmodel.py # 表单模型接口
├── cli/ # Typer 命令
│ ├── __init__.py # 命令注册 + 上下文初始化
│ ├── _common.py # 共享工具(ContextObj、get_client)
│ ├── auth.py # dwf-cli auth {login, logout, status}
│ ├── datamodel.py # dwf-cli datamodel {list, show, object CRUD}
│ ├── funcmodel.py # dwf-cli funcmodel {app, operations}
│ ├── formmodel.py # dwf-cli formmodel {view}
│ └── config.py # dwf-cli config {get, set, list}
└── core/ # 基础设施
├── config.py # 配置管理(JSON 持久化)
├── crypto.py # AES 密码加密
├── errors.py # 异常层级 + 退出码
└── output.py # Rich 表格/JSON 输出
开发
添加新命令
只需 3 步:
- 新建
src/dwf_cli/api/xxx.py— 定义 API 调用函数 - 新建
src/dwf_cli/cli/xxx.py— 定义 Typer 命令 - 编辑
src/dwf_cli/cli/__init__.py— 添加app.add_typer()
开发命令
uv run dwf-cli --help # 开发时运行 CLI
uv run pytest -v # 运行测试
uv run ruff check . # 代码检查
uv run ruff format . # 代码格式化
uv add <package> # 添加依赖
安装后直接使用:
dwf-cli --help # 已安装环境直接调用
文档命令
uv run mkdocs serve # 本地预览文档
DWF_INCLUDE_API_DOCS=1 uv run mkdocs serve # 含 API 参考
uv run python scripts/openapi_to_md.py # 重新生成 API 文档
技术栈
- Typer — CLI 框架
- httpx — HTTP 客户端
- Rich — 终端美化输出
- pycryptodome — AES 密码加密
- uv — 包管理器
- pytest — 测试框架
- Ruff — 代码检查与格式化
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dwf_cli-0.1.0.tar.gz
(141.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
dwf_cli-0.1.0-py3-none-any.whl
(64.5 kB
view details)
File details
Details for the file dwf_cli-0.1.0.tar.gz.
File metadata
- Download URL: dwf_cli-0.1.0.tar.gz
- Upload date:
- Size: 141.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adb2e6fb071200e3bdc668a90a4e05af34274e8d886060c8c4cbebdbb05919c3
|
|
| MD5 |
c89b6eedefa4a701d3e13a6a06292a0a
|
|
| BLAKE2b-256 |
5aa6bc5a3b4c58fead831df376680a10d730638ca55d1aa6af356bb54252033c
|
File details
Details for the file dwf_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dwf_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 64.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cd3ce9d8e00dd9d0692c200c248449a4997b4b32a5a0e4bc0fe842a6d8d1783
|
|
| MD5 |
cb7325c9782987cecb2b8b193afab13a
|
|
| BLAKE2b-256 |
f7265bd45d011322afa1d199c732c1f58b022ada16cb4578629657a86ae0ee6f
|