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.
Files changed (39) hide show
  1. data_ops_cli-0.4.0/PKG-INFO +104 -0
  2. data_ops_cli-0.4.0/README.md +91 -0
  3. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/pyproject.toml +2 -1
  4. data_ops_cli-0.4.0/src/data_ops_cli.egg-info/PKG-INFO +104 -0
  5. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/SOURCES.txt +1 -0
  6. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/requires.txt +1 -1
  7. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/__init__.py +1 -1
  8. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/data_table.py +72 -18
  9. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/dataset.py +66 -52
  10. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/hazard.py +1 -1
  11. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/skill.py +12 -10
  12. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/table.py +169 -125
  13. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/utils.py +81 -4
  14. data_ops_cli-0.4.0/src/dataops_cli/cli/widget.py +789 -0
  15. data_ops_cli-0.3.6/PKG-INFO +0 -11
  16. data_ops_cli-0.3.6/src/data_ops_cli.egg-info/PKG-INFO +0 -11
  17. data_ops_cli-0.3.6/src/dataops_cli/cli/widget.py +0 -558
  18. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/setup.cfg +0 -0
  19. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/dependency_links.txt +0 -0
  20. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/entry_points.txt +0 -0
  21. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/data_ops_cli.egg-info/top_level.txt +0 -0
  22. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/_compat.py +0 -0
  23. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/__init__.py +0 -0
  24. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/alarm.py +0 -0
  25. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/api.py +0 -0
  26. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/auth.py +0 -0
  27. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/datasource.py +0 -0
  28. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/dict_.py +0 -0
  29. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/factory.py +0 -0
  30. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/metrics.py +0 -0
  31. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/ref.py +0 -0
  32. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/report.py +0 -0
  33. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/cli/workflow.py +0 -0
  34. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/exceptions.py +0 -0
  35. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/runner.py +0 -0
  36. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/schems.py +0 -0
  37. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/sdk.py +0 -0
  38. {data_ops_cli-0.3.6 → data_ops_cli-0.4.0}/src/dataops_cli/session.py +0 -0
  39. {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.3.6",
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]`
@@ -1,3 +1,4 @@
1
+ README.md
1
2
  pyproject.toml
2
3
  src/data_ops_cli.egg-info/PKG-INFO
3
4
  src/data_ops_cli.egg-info/SOURCES.txt
@@ -1,4 +1,4 @@
1
- dataops-sdk[runner]>=0.3.6
1
+ dataops-sdk[runner]>=0.4.0
2
2
  typer
3
3
  rich
4
4
 
@@ -14,4 +14,4 @@ groups command modules under :mod:`dataops_cli.cli` and re-exports the package
14
14
  removed in ``dataops_cli`` 1.0.
15
15
  """
16
16
 
17
- __version__ = "0.3.6"
17
+ __version__ = "0.4.0"
@@ -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(meta.data.model.datasource, meta.data.model.ref_type, meta.data.model.ref_code, meta.data.model.table_name)
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
- query_param: Annotated[
241
- str | None, typer.Option("--query", "-q", help="查询参数(SqlQueryParam)")
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
- 按编码或 (数据源, 表名) 组合查询多维表格数据;支持分页与 ``SqlQueryParam``
247
- 形式的条件过滤。
256
+ 按编码或 (数据源, 表名) 组合查询多维表格数据;支持分页与查询条件过滤。
248
257
 
249
258
  Args:
250
259
  arg1: 多维表格编码;当同时提供 ``name`` 时为数据源名称。
251
260
  name: 可选表名。
252
- page: 页码。
253
- size: 每页条数。
254
- query_param: 可选 SqlQueryParam JSON。
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("输入参数错误 using `table detail <code>` or `table detail <datasource> <name>`")
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.model_validate_json(query_param) if query_param else 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 = map(lambda x: x.lower(), datas[0].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
- if __name__ == "__main__":
288
- list_datatable()
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", "name", "alias", "remark"],
56
- [[column.code, column.name, column.title, column.remark] for column in group_nodes],
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
- console = Console(no_color=True)
88
- if full:
89
- table = Table("column", "alias", "dbType", "relation")
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
- query_param: Annotated[
113
- str | None, typer.Option("--query", "-q", help="查询参数(SqlQueryParam JSON)")
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
- query_param: 可选 SqlQueryParam JSON 字符串。
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, query)
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
- query_param: Annotated[
146
- str | None, typer.Option("--query", "-q", help="查询参数(SqlQueryParam JSON)")
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
- query_param: 可选 SqlQueryParam JSON 字符串。
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
- >>> data-ops-cli dataset data my_dataset_code --page-num 0 --page-size 20
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
- query,
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: