dataops-sdk 0.3.5__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.
- dataops_sdk-0.4.0/PKG-INFO +113 -0
- dataops_sdk-0.4.0/README.md +85 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/pyproject.toml +1 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/__init__.py +1 -3
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/__init__.py +9 -1
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/__init__.py +11 -2
- dataops_sdk-0.4.0/src/dataops_sdk/schemas/common.py +11 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/data_table.py +4 -2
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/enums.py +52 -13
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/meta.py +12 -1
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/query.py +39 -33
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/skill.py +1 -24
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/table.py +49 -5
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/widget.py +242 -160
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/__init__.py +6 -7
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/auth.py +1 -1
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/data_table.py +120 -168
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/dict_.py +2 -4
- dataops_sdk-0.4.0/src/dataops_sdk/services/meta.py +484 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/skill.py +17 -9
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/table.py +168 -213
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/widget.py +32 -10
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/session.py +72 -7
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/utils/utils.py +2 -2
- dataops_sdk-0.4.0/src/dataops_sdk.egg-info/PKG-INFO +113 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk.egg-info/SOURCES.txt +2 -0
- dataops_sdk-0.3.5/PKG-INFO +0 -26
- dataops_sdk-0.3.5/src/dataops_sdk/services/meta.py +0 -618
- dataops_sdk-0.3.5/src/dataops_sdk.egg-info/PKG-INFO +0 -26
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/setup.cfg +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/exceptions.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/datasource_factory.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/common.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/nacos.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/alarm.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/api.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/datasource.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/dict_.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/group.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/hazard.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/report.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/user.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/schemas/workflow.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/alarm.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/api.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/dataset.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/datasource.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/hazard.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/metrics.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/ref.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/report.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/services/workflow.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/builder.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/models.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/render_utils.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/renderers.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/tiptap/tool.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/utils/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/utils/common.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk/utils/log.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk.egg-info/requires.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/src/dataops_sdk.egg-info/top_level.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/tests/test_constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/tests/test_exceptions.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/tests/test_session.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.4.0}/tests/test_utils.py +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dataops-sdk
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Python SDK for the DataOps platform.
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: pydantic<3,>=2
|
|
8
|
+
Requires-Dist: pydantic-core
|
|
9
|
+
Requires-Dist: pydantic-settings>=2.14.2
|
|
10
|
+
Requires-Dist: httpx2>=2.5.0
|
|
11
|
+
Requires-Dist: jinja2>=3.1.6
|
|
12
|
+
Requires-Dist: markdown-it-py[plugins]
|
|
13
|
+
Requires-Dist: cryptography>=49.0.0
|
|
14
|
+
Requires-Dist: PyYaml
|
|
15
|
+
Provides-Extra: runner
|
|
16
|
+
Requires-Dist: paramiko>4; extra == "runner"
|
|
17
|
+
Requires-Dist: pandas; extra == "runner"
|
|
18
|
+
Requires-Dist: sqlalchemy; extra == "runner"
|
|
19
|
+
Requires-Dist: pymysql; extra == "runner"
|
|
20
|
+
Requires-Dist: doris-python>=1.0.3; extra == "runner"
|
|
21
|
+
Requires-Dist: oracledb~=4.0.1; extra == "runner"
|
|
22
|
+
Requires-Dist: neo4j; extra == "runner"
|
|
23
|
+
Requires-Dist: kafka-python>3; extra == "runner"
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pytest; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
27
|
+
Requires-Dist: ruff; extra == "dev"
|
|
28
|
+
|
|
29
|
+
# dataops-sdk
|
|
30
|
+
|
|
31
|
+
Python SDK for the DataOps platform.
|
|
32
|
+
|
|
33
|
+
## 安装
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 基础安装
|
|
37
|
+
pip install dataops_sdk
|
|
38
|
+
|
|
39
|
+
# 含数据库驱动
|
|
40
|
+
pip install "dataops_sdk[runner]"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 快速开始
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from dataops_sdk.session import configure
|
|
47
|
+
from dataops_sdk.services import service_list_tables, service_get_table_data_by_code
|
|
48
|
+
|
|
49
|
+
# 配置认证
|
|
50
|
+
configure(base_url="https://your-platform.com", api_key="your-api-key")
|
|
51
|
+
|
|
52
|
+
# 查询数据表
|
|
53
|
+
tables = service_list_tables("doris")
|
|
54
|
+
print(tables)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 核心模块
|
|
58
|
+
|
|
59
|
+
### session — 认证配置
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from dataops_sdk.session import configure, get_session
|
|
63
|
+
|
|
64
|
+
configure(base_url, api_key) # 设置全局会话
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### schemas — 数据模型
|
|
68
|
+
|
|
69
|
+
| 模块 | 说明 |
|
|
70
|
+
|------|------|
|
|
71
|
+
| `MetaType` | 元数据类型枚举 |
|
|
72
|
+
| `SqlQueryParam` | SQL 查询参数 |
|
|
73
|
+
| `Meta` | 元数据通用模型 |
|
|
74
|
+
| `Datasource` | 数据源模型 |
|
|
75
|
+
| `DataTable` | 数据表模型 |
|
|
76
|
+
| `Dataset` | 数据集模型 |
|
|
77
|
+
| `Metrics` | 指标模型 |
|
|
78
|
+
| `Report` | 报表模型 |
|
|
79
|
+
| `Widget` | 组件模型 |
|
|
80
|
+
| `Workflow` | 工作流模型 |
|
|
81
|
+
| `Alarm` | 告警模型 |
|
|
82
|
+
| `Hazard` | 隐患模型 |
|
|
83
|
+
| `Api` | API 模型 |
|
|
84
|
+
| `Dict` | 字典模型 |
|
|
85
|
+
| `Skill` | 技能模型 |
|
|
86
|
+
| `Ref` | 引用模型 |
|
|
87
|
+
|
|
88
|
+
### services — 平台操作
|
|
89
|
+
|
|
90
|
+
每个服务模块对应一类实体的操作,提供 `list`、`detail` 等通用接口:
|
|
91
|
+
|
|
92
|
+
- `service_*_list` — 列表查询
|
|
93
|
+
- `service_*_detail` — 详情查询
|
|
94
|
+
- `service_*_create` — 创建
|
|
95
|
+
- `service_*_update` — 更新
|
|
96
|
+
- `service_*_delete` — 删除
|
|
97
|
+
|
|
98
|
+
## 依赖
|
|
99
|
+
|
|
100
|
+
- Python >= 3.11
|
|
101
|
+
- pydantic >= 2
|
|
102
|
+
- httpx2 >= 2.5.0
|
|
103
|
+
- pydantic-settings >= 2.14.2
|
|
104
|
+
- jinja2 >= 3.1.6
|
|
105
|
+
- cryptography >= 49.0.0
|
|
106
|
+
|
|
107
|
+
## 可选依赖 (runner)
|
|
108
|
+
|
|
109
|
+
- paramiko > 4 — 文件传输
|
|
110
|
+
- pandas — 数据分析
|
|
111
|
+
- sqlalchemy / pymysql / doris-python / oracledb — 关系数据库
|
|
112
|
+
- neo4j — 图数据库
|
|
113
|
+
- kafka-python > 3 — 队列驱动
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# dataops-sdk
|
|
2
|
+
|
|
3
|
+
Python SDK for the DataOps platform.
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 基础安装
|
|
9
|
+
pip install dataops_sdk
|
|
10
|
+
|
|
11
|
+
# 含数据库驱动
|
|
12
|
+
pip install "dataops_sdk[runner]"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 快速开始
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
from dataops_sdk.session import configure
|
|
19
|
+
from dataops_sdk.services import service_list_tables, service_get_table_data_by_code
|
|
20
|
+
|
|
21
|
+
# 配置认证
|
|
22
|
+
configure(base_url="https://your-platform.com", api_key="your-api-key")
|
|
23
|
+
|
|
24
|
+
# 查询数据表
|
|
25
|
+
tables = service_list_tables("doris")
|
|
26
|
+
print(tables)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 核心模块
|
|
30
|
+
|
|
31
|
+
### session — 认证配置
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from dataops_sdk.session import configure, get_session
|
|
35
|
+
|
|
36
|
+
configure(base_url, api_key) # 设置全局会话
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### schemas — 数据模型
|
|
40
|
+
|
|
41
|
+
| 模块 | 说明 |
|
|
42
|
+
|------|------|
|
|
43
|
+
| `MetaType` | 元数据类型枚举 |
|
|
44
|
+
| `SqlQueryParam` | SQL 查询参数 |
|
|
45
|
+
| `Meta` | 元数据通用模型 |
|
|
46
|
+
| `Datasource` | 数据源模型 |
|
|
47
|
+
| `DataTable` | 数据表模型 |
|
|
48
|
+
| `Dataset` | 数据集模型 |
|
|
49
|
+
| `Metrics` | 指标模型 |
|
|
50
|
+
| `Report` | 报表模型 |
|
|
51
|
+
| `Widget` | 组件模型 |
|
|
52
|
+
| `Workflow` | 工作流模型 |
|
|
53
|
+
| `Alarm` | 告警模型 |
|
|
54
|
+
| `Hazard` | 隐患模型 |
|
|
55
|
+
| `Api` | API 模型 |
|
|
56
|
+
| `Dict` | 字典模型 |
|
|
57
|
+
| `Skill` | 技能模型 |
|
|
58
|
+
| `Ref` | 引用模型 |
|
|
59
|
+
|
|
60
|
+
### services — 平台操作
|
|
61
|
+
|
|
62
|
+
每个服务模块对应一类实体的操作,提供 `list`、`detail` 等通用接口:
|
|
63
|
+
|
|
64
|
+
- `service_*_list` — 列表查询
|
|
65
|
+
- `service_*_detail` — 详情查询
|
|
66
|
+
- `service_*_create` — 创建
|
|
67
|
+
- `service_*_update` — 更新
|
|
68
|
+
- `service_*_delete` — 删除
|
|
69
|
+
|
|
70
|
+
## 依赖
|
|
71
|
+
|
|
72
|
+
- Python >= 3.11
|
|
73
|
+
- pydantic >= 2
|
|
74
|
+
- httpx2 >= 2.5.0
|
|
75
|
+
- pydantic-settings >= 2.14.2
|
|
76
|
+
- jinja2 >= 3.1.6
|
|
77
|
+
- cryptography >= 49.0.0
|
|
78
|
+
|
|
79
|
+
## 可选依赖 (runner)
|
|
80
|
+
|
|
81
|
+
- paramiko > 4 — 文件传输
|
|
82
|
+
- pandas — 数据分析
|
|
83
|
+
- sqlalchemy / pymysql / doris-python / oracledb — 关系数据库
|
|
84
|
+
- neo4j — 图数据库
|
|
85
|
+
- kafka-python > 3 — 队列驱动
|
|
@@ -67,9 +67,7 @@ from .services import ( # noqa: F401
|
|
|
67
67
|
service_get_table_detail_by_code,
|
|
68
68
|
service_get_table_detail_by_name,
|
|
69
69
|
service_get_table_list_by_code,
|
|
70
|
-
service_get_table_record_by_id,
|
|
71
70
|
service_get_table_records_by_code,
|
|
72
|
-
service_get_table_reference_list,
|
|
73
71
|
service_get_table_total_by_code,
|
|
74
72
|
service_get_widget_data_by_code,
|
|
75
73
|
service_get_widget_detail_by_code,
|
|
@@ -109,4 +107,4 @@ from .services import ( # noqa: F401
|
|
|
109
107
|
)
|
|
110
108
|
from .session import dataops_base_url_context, request_context
|
|
111
109
|
|
|
112
|
-
__version__ = "0.
|
|
110
|
+
__version__ = "0.4.0"
|
|
@@ -19,7 +19,14 @@ Example:
|
|
|
19
19
|
>>> from dataops_sdk.runner.utils import DatabaseConn, encrypt_body
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
from .common import
|
|
22
|
+
from .common import (
|
|
23
|
+
decrypt_body,
|
|
24
|
+
encrypt_body,
|
|
25
|
+
generate_uuid,
|
|
26
|
+
parse_args,
|
|
27
|
+
parse_trigger_time,
|
|
28
|
+
print_json,
|
|
29
|
+
)
|
|
23
30
|
from .dbConn_sync import DatabaseConn
|
|
24
31
|
from .ftp_file_transfer import FTPFileTransfer
|
|
25
32
|
from .nacos import get_service_instance
|
|
@@ -39,4 +46,5 @@ __all__ = [
|
|
|
39
46
|
"FTPFileTransfer",
|
|
40
47
|
"SFTPFileTransfer",
|
|
41
48
|
"parse_args",
|
|
49
|
+
"parse_trigger_time",
|
|
42
50
|
]
|
|
@@ -14,10 +14,18 @@ from .alarm import (
|
|
|
14
14
|
AlarmSpecItem,
|
|
15
15
|
)
|
|
16
16
|
from .api import ApiMeta, HttpInterfaceData
|
|
17
|
+
from .common import DataOpsResponse
|
|
17
18
|
from .data_table import DataTableData, MetaDataTable
|
|
18
19
|
from .datasource import DataDataSource
|
|
19
20
|
from .dict_ import DataDict, DictItem
|
|
20
|
-
from .enums import
|
|
21
|
+
from .enums import (
|
|
22
|
+
InnerMetaType,
|
|
23
|
+
MetaSkillFileSubType,
|
|
24
|
+
MetaSkillSubType,
|
|
25
|
+
MetaTemplateSubType,
|
|
26
|
+
MetaType,
|
|
27
|
+
MetaWidgetSubType,
|
|
28
|
+
)
|
|
21
29
|
from .group import GroupNode
|
|
22
30
|
from .hazard import HazardRecordDTO, HazardTaskDTO
|
|
23
31
|
from .meta import (
|
|
@@ -26,10 +34,11 @@ from .meta import (
|
|
|
26
34
|
Meta,
|
|
27
35
|
MetaBase,
|
|
28
36
|
MetaCreate,
|
|
37
|
+
MetaPageData,
|
|
29
38
|
MetaRef,
|
|
30
39
|
MetaUpdate,
|
|
31
40
|
)
|
|
32
|
-
from .query import PageParam, SqlCondition, SqlQueryParam, SqlSort
|
|
41
|
+
from .query import PageParam, SqlCondition, SqlFilter, SqlQueryParam, SqlSort
|
|
33
42
|
from .report import ReportMeta, ReportMetaData
|
|
34
43
|
from .skill import DataSkill, DataSkillSubFile, MetaSkill, SkillCallResult
|
|
35
44
|
from .table import (
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from typing import Annotated, Generic, TypeVar
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field, JsonValue, NonNegativeInt
|
|
4
|
+
|
|
5
|
+
DataVar = TypeVar("DataVar", default=JsonValue | None)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DataOpsResponse(BaseModel, Generic[DataVar]):
|
|
9
|
+
code: Annotated[NonNegativeInt, Field(description="响应码")]
|
|
10
|
+
msg: Annotated[str | None, Field(description="响应消息")]
|
|
11
|
+
data: Annotated[DataVar, Field(description="响应数据")]
|
|
@@ -410,7 +410,7 @@ class DataTableField(BaseModel):
|
|
|
410
410
|
|
|
411
411
|
title: Annotated[str | None, Field(description="显示标题")]
|
|
412
412
|
name: Annotated[str, Field(description="字段名称/列名 (前端显示的名称)")]
|
|
413
|
-
type: Annotated[str, Field(description="字段类型")]
|
|
413
|
+
type: Annotated[str | None, Field(description="字段类型")] = None
|
|
414
414
|
|
|
415
415
|
# 数据属性
|
|
416
416
|
pk: Annotated[bool, Field(description="是否主键")] = False
|
|
@@ -608,7 +608,7 @@ class DataTableData(BaseModel):
|
|
|
608
608
|
"""
|
|
609
609
|
|
|
610
610
|
# 模型配置
|
|
611
|
-
model: Annotated[DataTableModel, Field(description="数据源模型配置")]
|
|
611
|
+
model: Annotated[DataTableModel | None, Field(description="数据源模型配置")] = None
|
|
612
612
|
|
|
613
613
|
# 字段定义
|
|
614
614
|
fields: Annotated[list[DataTableField], Field(description="字段列表", default_factory=list)] = (
|
|
@@ -641,6 +641,8 @@ class DataTableData(BaseModel):
|
|
|
641
641
|
querys: Annotated[list[QueryCondition] | None, Field(description="查询条件列表")] = None
|
|
642
642
|
query_form: Annotated[QueryForm | None, Field(description="查询表单配置")] = None
|
|
643
643
|
|
|
644
|
+
model_config = ConfigDict(extra="allow")
|
|
645
|
+
|
|
644
646
|
|
|
645
647
|
# ---------------------------------------------------------------------------
|
|
646
648
|
# MetaDataTable
|
|
@@ -76,17 +76,17 @@ class SqlExpression(StrEnum):
|
|
|
76
76
|
用于查询条件构造,对应后端 ``SqlExpression``。
|
|
77
77
|
"""
|
|
78
78
|
|
|
79
|
-
EQ = "
|
|
79
|
+
EQ = "eq"
|
|
80
80
|
"""相等 (=)。"""
|
|
81
|
-
NE = "
|
|
81
|
+
NE = "ne"
|
|
82
82
|
"""不相等 (!=)。"""
|
|
83
|
-
GT = "
|
|
83
|
+
GT = "gt"
|
|
84
84
|
"""大于 (>)。"""
|
|
85
|
-
GE = "
|
|
85
|
+
GE = "ge"
|
|
86
86
|
"""大于等于 (>=)。"""
|
|
87
|
-
LT = "
|
|
87
|
+
LT = "lt"
|
|
88
88
|
"""小于 (<)。"""
|
|
89
|
-
LE = "
|
|
89
|
+
LE = "le"
|
|
90
90
|
"""小于等于 (<=)。"""
|
|
91
91
|
IN = "in"
|
|
92
92
|
"""属于 (IN)。"""
|
|
@@ -116,16 +116,16 @@ class SqlExpression(StrEnum):
|
|
|
116
116
|
Returns:
|
|
117
117
|
str: 中文标题,例如 ``"相等"``、``"属于"`` 等。
|
|
118
118
|
"""
|
|
119
|
-
return _EXPRESSION_TITLES[self]
|
|
119
|
+
return _EXPRESSION_TITLES[self.value]
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
_EXPRESSION_TITLES: dict[str, str] = {
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
123
|
+
"eq": "相等",
|
|
124
|
+
"ne": "不相等",
|
|
125
|
+
"gt": "大于",
|
|
126
|
+
"ge": "大于等于",
|
|
127
|
+
"lt": "小于",
|
|
128
|
+
"le": "小于等于",
|
|
129
129
|
"in": "属于",
|
|
130
130
|
"notin": "不属于",
|
|
131
131
|
"like": "匹配",
|
|
@@ -209,3 +209,42 @@ class ColumnType(StrEnum):
|
|
|
209
209
|
"""子表类型。"""
|
|
210
210
|
STRING = "string"
|
|
211
211
|
"""字符串类型。"""
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class MetaWidgetSubType(StrEnum):
|
|
215
|
+
"""卡片子类型枚举."""
|
|
216
|
+
|
|
217
|
+
CHART = "chart"
|
|
218
|
+
TABLE = "table"
|
|
219
|
+
DETAIL = "detail"
|
|
220
|
+
STATISTIC = "statistic"
|
|
221
|
+
STATISTIC_V2 = "statistic-v2"
|
|
222
|
+
GIS = "gis"
|
|
223
|
+
METRIC = "metric"
|
|
224
|
+
TOPOLOGY = "topology"
|
|
225
|
+
AMIS = "amis"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class MetaTemplateSubType(StrEnum):
|
|
229
|
+
"""模板子类型枚举."""
|
|
230
|
+
|
|
231
|
+
REPORT = "report"
|
|
232
|
+
PYTHON = "python"
|
|
233
|
+
JAVASCRIPT = "javascript"
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class MetaSkillSubType(StrEnum):
|
|
237
|
+
"""技能子类型枚举."""
|
|
238
|
+
|
|
239
|
+
LLM = "llm"
|
|
240
|
+
API = "api"
|
|
241
|
+
REPORT = "report"
|
|
242
|
+
FORM_SAVE = "form-save"
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
class MetaSkillFileSubType(StrEnum):
|
|
246
|
+
"""技能子文件类型枚举."""
|
|
247
|
+
|
|
248
|
+
DOC = "doc"
|
|
249
|
+
CODE = "code"
|
|
250
|
+
IMAGE = "image"
|
|
@@ -129,7 +129,7 @@ class MetaBase(BaseModel):
|
|
|
129
129
|
str | None,
|
|
130
130
|
Field(
|
|
131
131
|
description="空间名称",
|
|
132
|
-
|
|
132
|
+
validation_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME"),
|
|
133
133
|
),
|
|
134
134
|
] = None
|
|
135
135
|
|
|
@@ -339,3 +339,14 @@ class MetaUpdate(BaseModel, Generic[META_DATA_TYPE]):
|
|
|
339
339
|
data: Annotated[
|
|
340
340
|
META_DATA_TYPE | None, Field(description="元数据", exclude_if=lambda x: x is None)
|
|
341
341
|
] = None
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
class MetaPageData(BaseModel):
|
|
345
|
+
total: Annotated[int, Field(description="总数")]
|
|
346
|
+
page_num: Annotated[
|
|
347
|
+
int, Field(description="页码", validation_alias=AliasChoices("pageNum", "page_num"))
|
|
348
|
+
]
|
|
349
|
+
page_size: Annotated[
|
|
350
|
+
int, Field(description="页大小", validation_alias=AliasChoices("pageSize", "page_size"))
|
|
351
|
+
]
|
|
352
|
+
records: list[MetaBase] = Field(default_factory=list, description="数据")
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
承载分页参数、SQL 条件、排序、过滤等查询相关模型,供 SDK services 层拼装 SQL 查询时复用。
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
from collections.abc import Sequence
|
|
6
7
|
from typing import Annotated, Any, Literal
|
|
7
8
|
|
|
8
9
|
from pydantic import BaseModel, Field, JsonValue
|
|
@@ -32,6 +33,7 @@ class SqlConditionBase(BaseModel):
|
|
|
32
33
|
|
|
33
34
|
name: Annotated[str, Field(description="字段名")]
|
|
34
35
|
value: Annotated[Any, Field(description="字段值")]
|
|
36
|
+
expression: Annotated[SqlExpression, Field(description="条件表达式")] = SqlExpression.EQ
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
class SqlCondition(SqlConditionBase):
|
|
@@ -45,7 +47,6 @@ class SqlCondition(SqlConditionBase):
|
|
|
45
47
|
"""
|
|
46
48
|
|
|
47
49
|
alias: Annotated[str | None, Field(description="表别名")] = None
|
|
48
|
-
expression: Annotated[SqlExpression, Field(description="条件表达式")]
|
|
49
50
|
|
|
50
51
|
|
|
51
52
|
class SqlSort(BaseModel):
|
|
@@ -59,20 +60,33 @@ class SqlSort(BaseModel):
|
|
|
59
60
|
|
|
60
61
|
alias: Annotated[str | None, Field(description="表别名")] = None
|
|
61
62
|
name: Annotated[str, Field(description="字段名")]
|
|
62
|
-
asc: Annotated[bool, Field(description="
|
|
63
|
+
asc: Annotated[bool, Field(description="是否升序")] = True
|
|
63
64
|
|
|
64
65
|
|
|
65
|
-
class SqlFilter(
|
|
66
|
-
"""
|
|
66
|
+
class SqlFilter(SqlConditionBase):
|
|
67
|
+
"""条件过滤器"""
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
@classmethod
|
|
70
|
+
def from_str(cls, value: str) -> "SqlFilter":
|
|
71
|
+
"""解析查询参数.
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
Returns:
|
|
74
|
+
SqlFilter: 解析后的查询参数。
|
|
75
|
+
"""
|
|
76
|
+
return cls.model_validate_json(value)
|
|
77
|
+
|
|
78
|
+
def to_condition(self, alias: str | None = None) -> SqlCondition:
|
|
79
|
+
"""将过滤器转换为条件.
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
Args:
|
|
82
|
+
alias: 可选表别名。
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
SqlCondition: 转换后的条件。
|
|
86
|
+
"""
|
|
87
|
+
return SqlCondition(
|
|
88
|
+
alias=alias, name=self.name, value=self.value, expression=self.expression
|
|
89
|
+
)
|
|
76
90
|
|
|
77
91
|
@classmethod
|
|
78
92
|
def eq(cls, name: str, value: Any):
|
|
@@ -85,7 +99,7 @@ class SqlFilter(BaseModel):
|
|
|
85
99
|
Returns:
|
|
86
100
|
SqlFilter: 对应的过滤器实例。
|
|
87
101
|
"""
|
|
88
|
-
return cls(
|
|
102
|
+
return cls(name=name, value=value, expression=SqlExpression.EQ)
|
|
89
103
|
|
|
90
104
|
@classmethod
|
|
91
105
|
def ne(cls, name: str, value: Any):
|
|
@@ -98,7 +112,7 @@ class SqlFilter(BaseModel):
|
|
|
98
112
|
Returns:
|
|
99
113
|
SqlFilter: 对应的过滤器实例。
|
|
100
114
|
"""
|
|
101
|
-
return cls(
|
|
115
|
+
return cls(name=name, value=value, expression=SqlExpression.NE)
|
|
102
116
|
|
|
103
117
|
@classmethod
|
|
104
118
|
def gt(cls, name: str, value: Any):
|
|
@@ -111,7 +125,7 @@ class SqlFilter(BaseModel):
|
|
|
111
125
|
Returns:
|
|
112
126
|
SqlFilter: 对应的过滤器实例。
|
|
113
127
|
"""
|
|
114
|
-
return cls(
|
|
128
|
+
return cls(name=name, value=value, expression=SqlExpression.GT)
|
|
115
129
|
|
|
116
130
|
@classmethod
|
|
117
131
|
def ge(cls, name: str, value: Any):
|
|
@@ -124,7 +138,7 @@ class SqlFilter(BaseModel):
|
|
|
124
138
|
Returns:
|
|
125
139
|
SqlFilter: 对应的过滤器实例。
|
|
126
140
|
"""
|
|
127
|
-
return cls(
|
|
141
|
+
return cls(name=name, value=value, expression=SqlExpression.GE)
|
|
128
142
|
|
|
129
143
|
@classmethod
|
|
130
144
|
def lt(cls, name: str, value: Any):
|
|
@@ -137,7 +151,7 @@ class SqlFilter(BaseModel):
|
|
|
137
151
|
Returns:
|
|
138
152
|
SqlFilter: 对应的过滤器实例。
|
|
139
153
|
"""
|
|
140
|
-
return cls(
|
|
154
|
+
return cls(name=name, value=value, expression=SqlExpression.LT)
|
|
141
155
|
|
|
142
156
|
@classmethod
|
|
143
157
|
def le(cls, name: str, value: Any):
|
|
@@ -150,7 +164,7 @@ class SqlFilter(BaseModel):
|
|
|
150
164
|
Returns:
|
|
151
165
|
SqlFilter: 对应的过滤器实例。
|
|
152
166
|
"""
|
|
153
|
-
return cls(
|
|
167
|
+
return cls(name=name, value=value, expression=SqlExpression.LE)
|
|
154
168
|
|
|
155
169
|
@classmethod
|
|
156
170
|
def in_(cls, name: str, value: list):
|
|
@@ -163,7 +177,7 @@ class SqlFilter(BaseModel):
|
|
|
163
177
|
Returns:
|
|
164
178
|
SqlFilter: 对应的过滤器实例。
|
|
165
179
|
"""
|
|
166
|
-
return cls(
|
|
180
|
+
return cls(name=name, value=value, expression=SqlExpression.IN)
|
|
167
181
|
|
|
168
182
|
@classmethod
|
|
169
183
|
def not_in(cls, name: str, value: list):
|
|
@@ -176,9 +190,7 @@ class SqlFilter(BaseModel):
|
|
|
176
190
|
Returns:
|
|
177
191
|
SqlFilter: 对应的过滤器实例。
|
|
178
192
|
"""
|
|
179
|
-
return cls(
|
|
180
|
-
condition=SqlConditionBase(name=name, value=value, expression=SqlExpression.NOT_IN)
|
|
181
|
-
)
|
|
193
|
+
return cls(name=name, value=value, expression=SqlExpression.NOT_IN)
|
|
182
194
|
|
|
183
195
|
@classmethod
|
|
184
196
|
def like(cls, name: str, value: str):
|
|
@@ -191,9 +203,7 @@ class SqlFilter(BaseModel):
|
|
|
191
203
|
Returns:
|
|
192
204
|
SqlFilter: 对应的过滤器实例。
|
|
193
205
|
"""
|
|
194
|
-
return cls(
|
|
195
|
-
condition=SqlConditionBase(name=name, value=value, expression=SqlExpression.LIKE)
|
|
196
|
-
)
|
|
206
|
+
return cls(name=name, value=value, expression=SqlExpression.LIKE)
|
|
197
207
|
|
|
198
208
|
@classmethod
|
|
199
209
|
def not_like(cls, name: str, value: str):
|
|
@@ -206,9 +216,7 @@ class SqlFilter(BaseModel):
|
|
|
206
216
|
Returns:
|
|
207
217
|
SqlFilter: 对应的过滤器实例。
|
|
208
218
|
"""
|
|
209
|
-
return cls(
|
|
210
|
-
condition=SqlConditionBase(name=name, value=value, expression=SqlExpression.NOT_LIKE)
|
|
211
|
-
)
|
|
219
|
+
return cls(name=name, value=value, expression=SqlExpression.NOT_LIKE)
|
|
212
220
|
|
|
213
221
|
|
|
214
222
|
class SqlQueryParam(BaseModel):
|
|
@@ -222,11 +230,9 @@ class SqlQueryParam(BaseModel):
|
|
|
222
230
|
"""
|
|
223
231
|
|
|
224
232
|
conjunction: Annotated[Literal["and", "or"], Field(description="条件连接符")] = "and"
|
|
225
|
-
conditionList:
|
|
226
|
-
|
|
227
|
-
]
|
|
228
|
-
sorts: Annotated[list[SqlSort], Field(description="排序列表", default_factory=list)]
|
|
229
|
-
varMap: Annotated[dict[str, JsonValue], Field(description="变量映射", default_factory=dict)]
|
|
233
|
+
conditionList: list[SqlCondition] = Field(description="条件列表", default_factory=list)
|
|
234
|
+
sorts: list[SqlSort] = Field(description="排序列表", default_factory=list)
|
|
235
|
+
varMap: dict[str, JsonValue] = Field(description="变量映射", default_factory=dict)
|
|
230
236
|
|
|
231
237
|
def add(self, *condition: SqlCondition):
|
|
232
238
|
"""追加条件.
|
|
@@ -336,7 +342,7 @@ class SqlQueryParam(BaseModel):
|
|
|
336
342
|
)
|
|
337
343
|
return self
|
|
338
344
|
|
|
339
|
-
def add_in(self, name: str, value:
|
|
345
|
+
def add_in(self, name: str, value: Sequence[Any], alias: str | None = None):
|
|
340
346
|
"""追加 ``in`` 属于条件.
|
|
341
347
|
|
|
342
348
|
Args:
|
|
@@ -352,7 +358,7 @@ class SqlQueryParam(BaseModel):
|
|
|
352
358
|
)
|
|
353
359
|
return self
|
|
354
360
|
|
|
355
|
-
def add_not_in(self, name: str, value:
|
|
361
|
+
def add_not_in(self, name: str, value: Sequence[Any], alias: str | None = None):
|
|
356
362
|
"""追加 ``not in`` 不属于条件.
|
|
357
363
|
|
|
358
364
|
Args:
|
|
@@ -5,23 +5,11 @@
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from collections.abc import Mapping
|
|
8
|
-
from enum import StrEnum
|
|
9
8
|
from typing import Annotated, Any, Union
|
|
10
9
|
|
|
11
|
-
from dataops_sdk.schemas.meta import Meta
|
|
12
10
|
from pydantic import AliasChoices, BaseModel, Field, JsonValue
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
class MetaSkillSubType(StrEnum):
|
|
16
|
-
LLM = "llm"
|
|
17
|
-
API = "api"
|
|
18
|
-
REPORT = "report"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class MetaSkillFileSubType(StrEnum):
|
|
22
|
-
DOC = "doc"
|
|
23
|
-
CODE = "code"
|
|
24
|
-
IMAGE = "image"
|
|
12
|
+
from dataops_sdk.schemas.meta import Meta
|
|
25
13
|
|
|
26
14
|
|
|
27
15
|
class DataSkill(BaseModel):
|
|
@@ -73,17 +61,6 @@ class MetaSkill(Meta[DataSkill]):
|
|
|
73
61
|
content: 来自 ``data.markdown`` 的 Markdown 文本,若 ``data`` 为空时返回空字符串。
|
|
74
62
|
"""
|
|
75
63
|
|
|
76
|
-
@property
|
|
77
|
-
def content(self) -> str:
|
|
78
|
-
"""便利访问:返回 markdown 文本(若存在).
|
|
79
|
-
|
|
80
|
-
Returns:
|
|
81
|
-
str: Markdown 内容,缺失时返回空字符串。
|
|
82
|
-
"""
|
|
83
|
-
if self.data is None:
|
|
84
|
-
return ""
|
|
85
|
-
return self.data.markdown or ""
|
|
86
|
-
|
|
87
64
|
|
|
88
65
|
class SkillCallResult(BaseModel):
|
|
89
66
|
"""调用 skill 后的返回结果,对应 Java ``SkillResult``.
|