data-ops-cli 0.3.6__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data_ops_cli-0.4.0/PKG-INFO +104 -0
- data_ops_cli-0.4.0/README.md +91 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/pyproject.toml +2 -1
- data_ops_cli-0.4.0/src/data_ops_cli.egg-info/PKG-INFO +104 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/SOURCES.txt +1 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/requires.txt +1 -1
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/__init__.py +1 -1
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/data_table.py +72 -18
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/dataset.py +66 -52
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/hazard.py +1 -1
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/skill.py +12 -10
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/table.py +169 -125
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/utils.py +81 -4
- data_ops_cli-0.4.0/src/dataops_cli/cli/widget.py +789 -0
- data_ops_cli-0.3.6/PKG-INFO +0 -11
- data_ops_cli-0.3.6/src/data_ops_cli.egg-info/PKG-INFO +0 -11
- data_ops_cli-0.3.6/src/dataops_cli/cli/widget.py +0 -558
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/setup.cfg +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/dependency_links.txt +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/entry_points.txt +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/top_level.txt +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/_compat.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/__init__.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/alarm.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/api.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/auth.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/datasource.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/dict_.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/factory.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/metrics.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/ref.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/report.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/workflow.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/exceptions.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/runner.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/schems.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/sdk.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/session.py +0 -0
- {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/utils.py +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: data-ops-cli
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Command-line wrapper around dataops_sdk for the DataOps platform.
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: dataops-sdk[runner]>=0.4.0
|
|
8
|
+
Requires-Dist: typer
|
|
9
|
+
Requires-Dist: rich
|
|
10
|
+
Provides-Extra: dev
|
|
11
|
+
Requires-Dist: pytest; extra == "dev"
|
|
12
|
+
Requires-Dist: ruff; extra == "dev"
|
|
13
|
+
|
|
14
|
+
# data-ops-cli
|
|
15
|
+
|
|
16
|
+
DataOps platform command-line tool, powered by `dataops_sdk`.
|
|
17
|
+
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 在线安装
|
|
22
|
+
pip install data-ops-cli
|
|
23
|
+
|
|
24
|
+
# 本地开发
|
|
25
|
+
uv sync --all-extras
|
|
26
|
+
pip install -e packages/dataops_cli
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 认证配置
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 环境变量方式
|
|
33
|
+
export DATA_OPS_BASE_URL="https://your-platform.com"
|
|
34
|
+
export DATA_OPS_API_KEY="your-api-key"
|
|
35
|
+
|
|
36
|
+
# 或首次使用时 CLI 会引导输入
|
|
37
|
+
data-ops-cli auth login
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 命令
|
|
41
|
+
|
|
42
|
+
完整命令树见 [skills/data-ops-cli-usage/SKILL.md](../skills/data-ops-cli-usage/SKILL.md)。
|
|
43
|
+
|
|
44
|
+
### 认证
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
data-ops-cli auth login
|
|
48
|
+
data-ops-cli auth status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 数据源
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
data-ops-cli datasource list
|
|
55
|
+
data-ops-cli datasource detail <id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 数据集
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
data-ops-cli dataset list
|
|
62
|
+
data-ops-cli dataset detail <id>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 数据表
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
data-ops-cli data_table list
|
|
69
|
+
data-ops-cli data_table detail <id>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 指标
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
data-ops-cli metrics list
|
|
76
|
+
data-ops-cli metrics detail <id>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 报表
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
data-ops-cli report list
|
|
83
|
+
data-ops-cli report detail <id>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 工作流
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
data-ops-cli workflow list
|
|
90
|
+
data-ops-cli workflow detail <id>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### AMIS 组件
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
data-ops-cli widget list
|
|
97
|
+
data-ops-cli widget detail <id>
|
|
98
|
+
data-ops-cli widget print <id>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 依赖
|
|
102
|
+
|
|
103
|
+
- Python >= 3.11
|
|
104
|
+
- data-ops-cli 内部依赖 `dataops_sdk[runner]`
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# data-ops-cli
|
|
2
|
+
|
|
3
|
+
DataOps platform command-line tool, powered by `dataops_sdk`.
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 在线安装
|
|
9
|
+
pip install data-ops-cli
|
|
10
|
+
|
|
11
|
+
# 本地开发
|
|
12
|
+
uv sync --all-extras
|
|
13
|
+
pip install -e packages/dataops_cli
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 认证配置
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 环境变量方式
|
|
20
|
+
export DATA_OPS_BASE_URL="https://your-platform.com"
|
|
21
|
+
export DATA_OPS_API_KEY="your-api-key"
|
|
22
|
+
|
|
23
|
+
# 或首次使用时 CLI 会引导输入
|
|
24
|
+
data-ops-cli auth login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 命令
|
|
28
|
+
|
|
29
|
+
完整命令树见 [skills/data-ops-cli-usage/SKILL.md](../skills/data-ops-cli-usage/SKILL.md)。
|
|
30
|
+
|
|
31
|
+
### 认证
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
data-ops-cli auth login
|
|
35
|
+
data-ops-cli auth status
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 数据源
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
data-ops-cli datasource list
|
|
42
|
+
data-ops-cli datasource detail <id>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 数据集
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
data-ops-cli dataset list
|
|
49
|
+
data-ops-cli dataset detail <id>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 数据表
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
data-ops-cli data_table list
|
|
56
|
+
data-ops-cli data_table detail <id>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 指标
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
data-ops-cli metrics list
|
|
63
|
+
data-ops-cli metrics detail <id>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 报表
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
data-ops-cli report list
|
|
70
|
+
data-ops-cli report detail <id>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 工作流
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
data-ops-cli workflow list
|
|
77
|
+
data-ops-cli workflow detail <id>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### AMIS 组件
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
data-ops-cli widget list
|
|
84
|
+
data-ops-cli widget detail <id>
|
|
85
|
+
data-ops-cli widget print <id>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 依赖
|
|
89
|
+
|
|
90
|
+
- Python >= 3.11
|
|
91
|
+
- data-ops-cli 内部依赖 `dataops_sdk[runner]`
|
|
@@ -7,8 +7,9 @@ name = "data-ops-cli"
|
|
|
7
7
|
dynamic = ["version"]
|
|
8
8
|
description = "Command-line wrapper around dataops_sdk for the DataOps platform."
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
|
+
readme = "README.md"
|
|
10
11
|
dependencies = [
|
|
11
|
-
"dataops-sdk[runner]>=0.
|
|
12
|
+
"dataops-sdk[runner]>=0.4.0",
|
|
12
13
|
"typer",
|
|
13
14
|
"rich",
|
|
14
15
|
]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: data-ops-cli
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Command-line wrapper around dataops_sdk for the DataOps platform.
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: dataops-sdk[runner]>=0.4.0
|
|
8
|
+
Requires-Dist: typer
|
|
9
|
+
Requires-Dist: rich
|
|
10
|
+
Provides-Extra: dev
|
|
11
|
+
Requires-Dist: pytest; extra == "dev"
|
|
12
|
+
Requires-Dist: ruff; extra == "dev"
|
|
13
|
+
|
|
14
|
+
# data-ops-cli
|
|
15
|
+
|
|
16
|
+
DataOps platform command-line tool, powered by `dataops_sdk`.
|
|
17
|
+
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 在线安装
|
|
22
|
+
pip install data-ops-cli
|
|
23
|
+
|
|
24
|
+
# 本地开发
|
|
25
|
+
uv sync --all-extras
|
|
26
|
+
pip install -e packages/dataops_cli
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 认证配置
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 环境变量方式
|
|
33
|
+
export DATA_OPS_BASE_URL="https://your-platform.com"
|
|
34
|
+
export DATA_OPS_API_KEY="your-api-key"
|
|
35
|
+
|
|
36
|
+
# 或首次使用时 CLI 会引导输入
|
|
37
|
+
data-ops-cli auth login
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 命令
|
|
41
|
+
|
|
42
|
+
完整命令树见 [skills/data-ops-cli-usage/SKILL.md](../skills/data-ops-cli-usage/SKILL.md)。
|
|
43
|
+
|
|
44
|
+
### 认证
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
data-ops-cli auth login
|
|
48
|
+
data-ops-cli auth status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 数据源
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
data-ops-cli datasource list
|
|
55
|
+
data-ops-cli datasource detail <id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 数据集
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
data-ops-cli dataset list
|
|
62
|
+
data-ops-cli dataset detail <id>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 数据表
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
data-ops-cli data_table list
|
|
69
|
+
data-ops-cli data_table detail <id>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 指标
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
data-ops-cli metrics list
|
|
76
|
+
data-ops-cli metrics detail <id>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 报表
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
data-ops-cli report list
|
|
83
|
+
data-ops-cli report detail <id>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 工作流
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
data-ops-cli workflow list
|
|
90
|
+
data-ops-cli workflow detail <id>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### AMIS 组件
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
data-ops-cli widget list
|
|
97
|
+
data-ops-cli widget detail <id>
|
|
98
|
+
data-ops-cli widget print <id>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 依赖
|
|
102
|
+
|
|
103
|
+
- Python >= 3.11
|
|
104
|
+
- data-ops-cli 内部依赖 `dataops_sdk[runner]`
|
|
@@ -9,17 +9,16 @@ from typing import Annotated
|
|
|
9
9
|
|
|
10
10
|
import typer
|
|
11
11
|
from dataops_sdk.exceptions import DataOpsError
|
|
12
|
-
from dataops_sdk.schemas import MetaType, PageParam, SqlQueryParam
|
|
12
|
+
from dataops_sdk.schemas import MetaType, PageParam, SqlFilter, SqlQueryParam
|
|
13
13
|
from dataops_sdk.services import (
|
|
14
14
|
service_get_data_table_by_code,
|
|
15
15
|
service_get_data_table_by_name,
|
|
16
16
|
service_get_data_table_data_by_code,
|
|
17
17
|
service_get_data_table_data_by_name,
|
|
18
|
+
service_get_data_table_total,
|
|
18
19
|
)
|
|
19
20
|
from dataops_sdk.services.meta import release_list_list
|
|
20
21
|
from dataops_sdk.utils import filter_nodes_by_pattern
|
|
21
|
-
from rich.console import Console
|
|
22
|
-
from rich.table import Table
|
|
23
22
|
|
|
24
23
|
from dataops_cli.cli.utils import print_list
|
|
25
24
|
|
|
@@ -107,7 +106,12 @@ def get_datatable_detail(
|
|
|
107
106
|
raise typer.Exit(code=1) from None
|
|
108
107
|
|
|
109
108
|
print("ref-datasource ref-type ref-code ref-table-name")
|
|
110
|
-
print(
|
|
109
|
+
print(
|
|
110
|
+
meta.data.model.datasource,
|
|
111
|
+
meta.data.model.ref_type,
|
|
112
|
+
meta.data.model.ref_code,
|
|
113
|
+
meta.data.model.table_name,
|
|
114
|
+
)
|
|
111
115
|
print()
|
|
112
116
|
|
|
113
117
|
print_list(
|
|
@@ -237,34 +241,47 @@ def get_datatable_data(
|
|
|
237
241
|
name: Annotated[str | None, typer.Argument(help="表名")] = None,
|
|
238
242
|
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
239
243
|
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
filters: Annotated[
|
|
245
|
+
list[SqlFilter] | None,
|
|
246
|
+
typer.Option(
|
|
247
|
+
"--condition",
|
|
248
|
+
"-c",
|
|
249
|
+
parser=SqlFilter.from_str,
|
|
250
|
+
help='查询条件(可多次传入),JSON 格式 {"name":"字段名","value":值[,"expression":"eq"]},expression 缺省 eq',
|
|
251
|
+
),
|
|
242
252
|
] = None,
|
|
243
253
|
) -> None:
|
|
244
254
|
"""获取多维表格数据。
|
|
245
255
|
|
|
246
|
-
按编码或 (数据源, 表名)
|
|
247
|
-
形式的条件过滤。
|
|
256
|
+
按编码或 (数据源, 表名) 组合查询多维表格数据;支持分页与查询条件过滤。
|
|
248
257
|
|
|
249
258
|
Args:
|
|
250
259
|
arg1: 多维表格编码;当同时提供 ``name`` 时为数据源名称。
|
|
251
260
|
name: 可选表名。
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
261
|
+
page_num: 页码,默认 0。
|
|
262
|
+
page_size: 每页大小,默认 20。
|
|
263
|
+
filters: 查询条件,JSON 格式 ``{"name": 字段名, "value": 值[, "expression": 表达式]}``。
|
|
264
|
+
可多次传入,多个条件按 AND 组合;``expression`` 缺省为 ``eq``,可选
|
|
265
|
+
``eq/ne/gt/ge/lt/le/in/notin/like/notlike/between/notbetween/isnull/isnotnull``。
|
|
255
266
|
|
|
256
267
|
Examples:
|
|
257
|
-
|
|
268
|
+
通过多维表格编码查询数据
|
|
258
269
|
>>> data-ops-cli data_table data <code>
|
|
259
270
|
通过数据源和表名查询数据
|
|
260
271
|
>>> data-ops-cli data_table data <datasource> <name>
|
|
272
|
+
带查询条件过滤(status 等于 1)
|
|
273
|
+
>>> data-ops-cli data_table data <code> -c '{"name": "status", "value": 1}'
|
|
261
274
|
"""
|
|
262
275
|
if not name and not arg1.replace("_", "").replace("-", "").isnumeric():
|
|
263
|
-
print(
|
|
276
|
+
print(
|
|
277
|
+
"输入参数错误 using `data_table data <code>` or `data_table data <datasource> <name>`"
|
|
278
|
+
)
|
|
264
279
|
raise typer.Exit(code=1) from None
|
|
265
280
|
|
|
266
281
|
pp = PageParam(start=page_num * page_size, limit=page_size)
|
|
267
|
-
qp = SqlQueryParam
|
|
282
|
+
qp = SqlQueryParam()
|
|
283
|
+
if filters:
|
|
284
|
+
qp.add(*(filter_item.to_condition() for filter_item in filters))
|
|
268
285
|
|
|
269
286
|
try:
|
|
270
287
|
datas = (
|
|
@@ -273,16 +290,53 @@ def get_datatable_data(
|
|
|
273
290
|
else service_get_data_table_data_by_code(arg1, pp, qp)
|
|
274
291
|
)
|
|
275
292
|
except DataOpsError as e:
|
|
276
|
-
typer.echo(f"错误: {e.message}")
|
|
293
|
+
typer.echo(f"错误: {e.message}", err=True)
|
|
277
294
|
raise typer.Exit(code=1) from None
|
|
278
295
|
if not datas:
|
|
279
296
|
print("未查询到数据")
|
|
280
297
|
return
|
|
281
298
|
|
|
282
299
|
# 取第一行构建列
|
|
283
|
-
keys =
|
|
300
|
+
keys = (x.lower() for x in datas[0])
|
|
284
301
|
print_list(keys, (tuple(row.values()) for row in datas))
|
|
285
302
|
|
|
286
303
|
|
|
287
|
-
|
|
288
|
-
|
|
304
|
+
@data_table_typer.command("count", no_args_is_help=True)
|
|
305
|
+
def count_datatable(
|
|
306
|
+
code: Annotated[str, typer.Argument(help="多维表格编码")],
|
|
307
|
+
filters: Annotated[
|
|
308
|
+
list[SqlFilter] | None,
|
|
309
|
+
typer.Option(
|
|
310
|
+
"--condition",
|
|
311
|
+
"-c",
|
|
312
|
+
parser=SqlFilter.from_str,
|
|
313
|
+
help='查询条件(可多次传入),JSON 格式 {"name":"字段名","value":值[,"expression":"eq"]},expression 缺省 eq',
|
|
314
|
+
),
|
|
315
|
+
] = None,
|
|
316
|
+
) -> None:
|
|
317
|
+
"""统计多维表格数据总数。
|
|
318
|
+
|
|
319
|
+
支持通过 ``--condition/-c`` 参数(可多次传入)添加查询条件过滤。
|
|
320
|
+
|
|
321
|
+
Args:
|
|
322
|
+
code: 多维表格编码。
|
|
323
|
+
filters: 查询条件,JSON 格式 ``{"name": 字段名, "value": 值[, "expression": 表达式]}``。
|
|
324
|
+
可多次传入,多个条件按 AND 组合;``expression`` 缺省为 ``eq``,可选
|
|
325
|
+
``eq/ne/gt/ge/lt/le/in/notin/like/notlike/between/notbetween/isnull/isnotnull``。
|
|
326
|
+
|
|
327
|
+
Examples:
|
|
328
|
+
统计多维表格数据总数
|
|
329
|
+
>>> data-ops-cli data_table count dt_code_001
|
|
330
|
+
|
|
331
|
+
带查询条件统计(status 等于 1)
|
|
332
|
+
>>> data-ops-cli data_table count dt_code_001 -c '{"name": "status", "value": 1}'
|
|
333
|
+
"""
|
|
334
|
+
qp = SqlQueryParam()
|
|
335
|
+
if filters:
|
|
336
|
+
qp.add(*(filter_item.to_condition() for filter_item in filters))
|
|
337
|
+
try:
|
|
338
|
+
total = service_get_data_table_total(code, qp)
|
|
339
|
+
except DataOpsError as e:
|
|
340
|
+
typer.echo(f"错误: {e.message}", err=True)
|
|
341
|
+
raise typer.Exit(code=1) from e
|
|
342
|
+
print(total)
|
|
@@ -7,7 +7,7 @@ from typing import Annotated
|
|
|
7
7
|
|
|
8
8
|
import typer
|
|
9
9
|
from dataops_sdk.exceptions import DataOpsError
|
|
10
|
-
from dataops_sdk.schemas import PageParam, SqlQueryParam
|
|
10
|
+
from dataops_sdk.schemas import PageParam, SqlFilter, SqlQueryParam
|
|
11
11
|
from dataops_sdk.services import (
|
|
12
12
|
service_count_dataset_by_code,
|
|
13
13
|
service_get_dataset_data_by_code,
|
|
@@ -15,11 +15,8 @@ from dataops_sdk.services import (
|
|
|
15
15
|
service_list_datasets,
|
|
16
16
|
)
|
|
17
17
|
from dataops_sdk.utils import filter_nodes_by_pattern
|
|
18
|
-
from pydantic import ValidationError
|
|
19
|
-
from rich.console import Console
|
|
20
|
-
from rich.table import Table
|
|
21
18
|
|
|
22
|
-
from dataops_cli.cli.utils import print_list
|
|
19
|
+
from dataops_cli.cli.utils import print_list, print_table_column_detail
|
|
23
20
|
|
|
24
21
|
dataset_typer = typer.Typer(name="dataset", help="Manage dataset.", no_args_is_help=True)
|
|
25
22
|
|
|
@@ -27,6 +24,7 @@ dataset_typer = typer.Typer(name="dataset", help="Manage dataset.", no_args_is_h
|
|
|
27
24
|
@dataset_typer.command("list")
|
|
28
25
|
def list_dataset(
|
|
29
26
|
query: Annotated[str | None, typer.Option("-q", "--query", help="名称关键字")] = None,
|
|
27
|
+
head: Annotated[int | None, typer.Option("-h", "--head", min=1, help="显示前N条记录")] = None,
|
|
30
28
|
) -> None:
|
|
31
29
|
"""列出所有数据集。
|
|
32
30
|
|
|
@@ -51,9 +49,12 @@ def list_dataset(
|
|
|
51
49
|
if query:
|
|
52
50
|
group_nodes = filter_nodes_by_pattern(group_nodes, query, include_digest=True)
|
|
53
51
|
|
|
52
|
+
if head is not None and head > 0:
|
|
53
|
+
group_nodes = group_nodes[:head]
|
|
54
|
+
|
|
54
55
|
print_list(
|
|
55
|
-
["code", "
|
|
56
|
-
[[column.code, column.
|
|
56
|
+
["code", "title", "remark"],
|
|
57
|
+
[[column.code, column.title, column.remark] for column in group_nodes],
|
|
57
58
|
)
|
|
58
59
|
|
|
59
60
|
|
|
@@ -84,52 +85,49 @@ def get_dataset_detail_by_code(
|
|
|
84
85
|
typer.echo(f"错误: {e.message}")
|
|
85
86
|
raise typer.Exit(code=1) from None
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
for column in meta.data.columns:
|
|
91
|
-
relation = None
|
|
92
|
-
if column.typeExt is not None:
|
|
93
|
-
relation = column.typeExt.ref__dict or column.typeExt.ref__valueField
|
|
94
|
-
if relation is not None:
|
|
95
|
-
relation = relation.model_dump_json()
|
|
96
|
-
table.add_row(column.name, column.title, column.dbType, relation)
|
|
97
|
-
console.print(table)
|
|
98
|
-
for column in filter(lambda c: c.typeExt is not None, meta.data.columns):
|
|
99
|
-
relation = column.typeExt.ref__dict or column.typeExt.ref__valueField
|
|
100
|
-
if relation is not None:
|
|
101
|
-
console.print(f"{column.name} -> {relation.model_dump_json()}")
|
|
102
|
-
else:
|
|
103
|
-
table = Table("column", "alias", "dbType")
|
|
104
|
-
for column in meta.data.columns:
|
|
105
|
-
table.add_row(column.name, column.title, column.dbType)
|
|
106
|
-
console.print(table)
|
|
88
|
+
assert meta.data, "元数据不存在"
|
|
89
|
+
|
|
90
|
+
print_table_column_detail(meta.data.columns, full)
|
|
107
91
|
|
|
108
92
|
|
|
109
93
|
@dataset_typer.command("count", no_args_is_help=True)
|
|
110
94
|
def count_dataset_by_code(
|
|
111
95
|
code: Annotated[str, typer.Argument(help="数据集编码")],
|
|
112
|
-
|
|
113
|
-
|
|
96
|
+
filters: Annotated[
|
|
97
|
+
list[SqlFilter] | None,
|
|
98
|
+
typer.Option(
|
|
99
|
+
"--condition",
|
|
100
|
+
"-c",
|
|
101
|
+
parser=SqlFilter.from_str,
|
|
102
|
+
help='查询条件(可多次传入),JSON 格式 {"name":"字段名","value":值[,"expression":"eq"]},expression 缺省 eq',
|
|
103
|
+
),
|
|
114
104
|
] = None,
|
|
115
105
|
) -> None:
|
|
116
106
|
"""获取数据集的数据量。
|
|
117
107
|
|
|
108
|
+
支持通过 ``--condition/-c`` 参数(可多次传入)添加查询条件过滤。
|
|
109
|
+
|
|
118
110
|
Args:
|
|
119
111
|
code: 数据集编码。
|
|
120
|
-
|
|
112
|
+
filters: 查询条件,JSON 格式 ``{"name": 字段名, "value": 值[, "expression": 表达式]}``。
|
|
113
|
+
可多次传入,多个条件按 AND 组合;``expression`` 缺省为 ``eq``,可选
|
|
114
|
+
``eq/ne/gt/ge/lt/le/in/notin/like/notlike/between/notbetween/isnull/isnotnull``。
|
|
121
115
|
|
|
122
116
|
Examples:
|
|
117
|
+
通过数据集编码统计数量
|
|
123
118
|
>>> data-ops-cli dataset count my_dataset_code
|
|
124
|
-
"""
|
|
125
|
-
try:
|
|
126
|
-
query = SqlQueryParam.model_validate_json(query_param) if query_param else None
|
|
127
|
-
except ValidationError as error:
|
|
128
|
-
typer.echo(f"错误: --query 参数格式无效: {error}")
|
|
129
|
-
raise typer.Exit(code=2) from None
|
|
130
119
|
|
|
120
|
+
带查询条件统计数量(status 等于 1)
|
|
121
|
+
>>> data-ops-cli dataset count my_dataset_code -c '{"name": "status", "value": 1}'
|
|
122
|
+
|
|
123
|
+
多个条件 AND 组合(status 等于 1 且 amount 大于 1000)
|
|
124
|
+
>>> data-ops-cli dataset count my_dataset_code -c '{"name": "status", "value": 1}' -c '{"name": "amount", "value": 1000, "expression": "gt"}'
|
|
125
|
+
"""
|
|
126
|
+
qp = SqlQueryParam()
|
|
127
|
+
if filters:
|
|
128
|
+
qp.add(*(filter_item.to_condition() for filter_item in filters))
|
|
131
129
|
try:
|
|
132
|
-
count = service_count_dataset_by_code(code,
|
|
130
|
+
count = service_count_dataset_by_code(code, qp)
|
|
133
131
|
except DataOpsError as error:
|
|
134
132
|
typer.echo(f"错误: {error.message}")
|
|
135
133
|
raise typer.Exit(code=1) from None
|
|
@@ -142,33 +140,49 @@ def get_dataset_data(
|
|
|
142
140
|
code: Annotated[str, typer.Argument(help="数据集编码")],
|
|
143
141
|
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
144
142
|
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
filters: Annotated[
|
|
144
|
+
list[SqlFilter] | None,
|
|
145
|
+
typer.Option(
|
|
146
|
+
"--condition",
|
|
147
|
+
"-c",
|
|
148
|
+
parser=SqlFilter.from_str,
|
|
149
|
+
help='查询条件(可多次传入),JSON 格式 {"name":"字段名","value":值[,"expression":"eq"]},expression 缺省 eq',
|
|
150
|
+
),
|
|
147
151
|
] = None,
|
|
148
152
|
) -> None:
|
|
149
|
-
"""
|
|
153
|
+
"""读取指定数据集的实际数据,支持分页与查询条件过滤。
|
|
154
|
+
|
|
155
|
+
支持通过 ``--condition/-c`` 参数(可多次传入)添加查询条件过滤。
|
|
150
156
|
|
|
151
157
|
Args:
|
|
152
158
|
code: 数据集编码。
|
|
153
|
-
page_num:
|
|
154
|
-
page_size:
|
|
155
|
-
|
|
159
|
+
page_num: 页码,默认 0。
|
|
160
|
+
page_size: 每页大小,默认 20。
|
|
161
|
+
filters: 查询条件,JSON 格式 ``{"name": 字段名, "value": 值[, "expression": 表达式]}``。
|
|
162
|
+
可多次传入,多个条件按 AND 组合;``expression`` 缺省为 ``eq``,可选
|
|
163
|
+
``eq/ne/gt/ge/lt/le/in/notin/like/notlike/between/notbetween/isnull/isnotnull``。
|
|
156
164
|
|
|
157
165
|
Examples:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
try:
|
|
161
|
-
query = SqlQueryParam.model_validate_json(query_param) if query_param else None
|
|
162
|
-
except ValidationError as error:
|
|
163
|
-
typer.echo(f"错误: --query 参数格式无效: {error}")
|
|
164
|
-
raise typer.Exit(code=2) from None
|
|
166
|
+
读取数据集默认前 20 条数据
|
|
167
|
+
>>> data-ops-cli dataset data my_dataset_code
|
|
165
168
|
|
|
169
|
+
分页读取
|
|
170
|
+
>>> data-ops-cli dataset data my_dataset_code --page-num 1 --page-size 50
|
|
171
|
+
|
|
172
|
+
带查询条件过滤(status 等于 1)
|
|
173
|
+
>>> data-ops-cli dataset data my_dataset_code -c '{"name": "status", "value": 1}'
|
|
174
|
+
|
|
175
|
+
多个条件 AND 组合(status 等于 1 且 amount 大于 1000)
|
|
176
|
+
>>> data-ops-cli dataset data my_dataset_code -c '{"name": "status", "value": 1}' -c '{"name": "amount", "value": 1000, "expression": "gt"}'
|
|
177
|
+
"""
|
|
178
|
+
qp = SqlQueryParam()
|
|
179
|
+
if filters:
|
|
180
|
+
qp.add(*(filter_item.to_condition() for filter_item in filters))
|
|
166
181
|
try:
|
|
167
|
-
# CLI 只负责把终端参数转换成查询模型,再把查询交给 SDK。
|
|
168
182
|
data = service_get_dataset_data_by_code(
|
|
169
183
|
code,
|
|
170
184
|
PageParam(start=page_num * page_size, limit=page_size),
|
|
171
|
-
|
|
185
|
+
qp,
|
|
172
186
|
)
|
|
173
187
|
except DataOpsError as error:
|
|
174
188
|
typer.echo(f"错误: {error.message}")
|
|
@@ -176,7 +176,7 @@ def get_hazard_task_logs(
|
|
|
176
176
|
|
|
177
177
|
Examples:
|
|
178
178
|
>>> data-ops-cli hazard task logs task_hazard_001
|
|
179
|
-
>>> data-ops-cli hazard task logs task_hazard_001 --page 0 --size 50
|
|
179
|
+
>>> data-ops-cli hazard task logs task_hazard_001 --page-num 0 --page-size 50
|
|
180
180
|
>>> data-ops-cli hazard task logs task_hazard_001 --count
|
|
181
181
|
"""
|
|
182
182
|
try:
|