dataops-sdk 0.3.6__tar.gz → 0.4.1__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 (95) hide show
  1. dataops_sdk-0.4.1/PKG-INFO +113 -0
  2. dataops_sdk-0.4.1/README.md +85 -0
  3. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/pyproject.toml +1 -0
  4. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/__init__.py +1 -1
  5. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/__init__.py +9 -1
  6. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/__init__.py +14 -5
  7. dataops_sdk-0.4.1/src/dataops_sdk/schemas/common.py +11 -0
  8. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/data_table.py +4 -2
  9. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/enums.py +77 -14
  10. dataops_sdk-0.4.1/src/dataops_sdk/schemas/group.py +66 -0
  11. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/meta.py +10 -3
  12. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/query.py +35 -27
  13. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/report.py +11 -12
  14. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/skill.py +1 -25
  15. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/table.py +49 -5
  16. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/user.py +2 -2
  17. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/widget.py +242 -160
  18. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/workflow.py +1 -5
  19. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/__init__.py +18 -7
  20. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/auth.py +1 -1
  21. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/data_table.py +26 -14
  22. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/dict_.py +1 -1
  23. dataops_sdk-0.4.1/src/dataops_sdk/services/group.py +69 -0
  24. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/meta.py +101 -120
  25. dataops_sdk-0.4.1/src/dataops_sdk/services/metrics.py +87 -0
  26. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/report.py +19 -2
  27. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/skill.py +20 -9
  28. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/table.py +9 -6
  29. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/widget.py +46 -10
  30. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/session.py +40 -36
  31. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/utils.py +5 -17
  32. dataops_sdk-0.4.1/src/dataops_sdk.egg-info/PKG-INFO +113 -0
  33. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/SOURCES.txt +2 -0
  34. dataops_sdk-0.3.6/PKG-INFO +0 -26
  35. dataops_sdk-0.3.6/src/dataops_sdk/schemas/common.py +0 -9
  36. dataops_sdk-0.3.6/src/dataops_sdk/schemas/group.py +0 -46
  37. dataops_sdk-0.3.6/src/dataops_sdk/services/metrics.py +0 -53
  38. dataops_sdk-0.3.6/src/dataops_sdk.egg-info/PKG-INFO +0 -26
  39. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/setup.cfg +0 -0
  40. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/constants.py +0 -0
  41. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/exceptions.py +0 -0
  42. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/__init__.py +0 -0
  43. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/datasource_factory.py +0 -0
  44. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
  45. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
  46. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
  47. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
  48. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
  49. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
  50. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
  51. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
  52. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
  53. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
  54. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/common.py +0 -0
  55. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
  56. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
  57. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
  58. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
  59. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
  60. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/nacos.py +0 -0
  61. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
  62. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
  63. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
  64. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
  65. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/alarm.py +0 -0
  66. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/api.py +0 -0
  67. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/datasource.py +0 -0
  68. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/dict_.py +0 -0
  69. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/hazard.py +0 -0
  70. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/alarm.py +0 -0
  71. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/api.py +0 -0
  72. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/dataset.py +0 -0
  73. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/datasource.py +0 -0
  74. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/hazard.py +0 -0
  75. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/ref.py +0 -0
  76. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/services/workflow.py +0 -0
  77. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/__init__.py +0 -0
  78. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/builder.py +0 -0
  79. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/constants.py +0 -0
  80. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
  81. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/models.py +0 -0
  82. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
  83. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/render_utils.py +0 -0
  84. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/renderers.py +0 -0
  85. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/tool.py +0 -0
  86. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/__init__.py +0 -0
  87. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/common.py +0 -0
  88. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/log.py +0 -0
  89. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
  90. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/requires.txt +0 -0
  91. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/top_level.txt +0 -0
  92. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/tests/test_constants.py +0 -0
  93. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/tests/test_exceptions.py +0 -0
  94. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/tests/test_session.py +0 -0
  95. {dataops_sdk-0.3.6 → dataops_sdk-0.4.1}/tests/test_utils.py +0 -0
@@ -0,0 +1,113 @@
1
+ Metadata-Version: 2.4
2
+ Name: dataops-sdk
3
+ Version: 0.4.1
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 — 队列驱动
@@ -7,6 +7,7 @@ name = "dataops-sdk"
7
7
  dynamic = ["version"]
8
8
  description = "Python SDK for the DataOps platform."
9
9
  requires-python = ">=3.11"
10
+ readme = "README.md"
10
11
  dependencies = [
11
12
  "pydantic>=2,<3",
12
13
  "pydantic-core",
@@ -107,4 +107,4 @@ from .services import ( # noqa: F401
107
107
  )
108
108
  from .session import dataops_base_url_context, request_context
109
109
 
110
- __version__ = "0.3.6"
110
+ __version__ = "0.4.1"
@@ -19,7 +19,14 @@ Example:
19
19
  >>> from dataops_sdk.runner.utils import DatabaseConn, encrypt_body
20
20
  """
21
21
 
22
- from .common import decrypt_body, encrypt_body, generate_uuid, parse_args, print_json
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,11 +14,21 @@ 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 InnerMetaType, MetaType
21
- from .group import GroupNode
21
+ from .enums import (
22
+ GroupNodeRefType,
23
+ InnerMetaType,
24
+ MetaReportSubType,
25
+ MetaSkillFileSubType,
26
+ MetaSkillSubType,
27
+ MetaTemplateSubType,
28
+ MetaType,
29
+ MetaWidgetSubType,
30
+ )
31
+ from .group import GroupNode, GroupTree
22
32
  from .hazard import HazardRecordDTO, HazardTaskDTO
23
33
  from .meta import (
24
34
  DEFAULT_META_DATA_TYPE,
@@ -26,11 +36,11 @@ from .meta import (
26
36
  Meta,
27
37
  MetaBase,
28
38
  MetaCreate,
39
+ MetaPageData,
29
40
  MetaRef,
30
41
  MetaUpdate,
31
- MetaPageData,
32
42
  )
33
- from .query import PageParam, SqlCondition, SqlQueryParam, SqlSort
43
+ from .query import PageParam, SqlCondition, SqlFilter, SqlQueryParam, SqlSort
34
44
  from .report import ReportMeta, ReportMetaData
35
45
  from .skill import DataSkill, DataSkillSubFile, MetaSkill, SkillCallResult
36
46
  from .table import (
@@ -44,4 +54,3 @@ from .table import (
44
54
  from .user import Application, UserInfo
45
55
  from .widget import WidgetMeta, WidgetMetaData
46
56
  from .workflow import DataWorkflow, MetaWorkflow
47
- from .common import DataOpsResponse
@@ -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")
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
@@ -7,6 +7,14 @@
7
7
  from enum import StrEnum
8
8
 
9
9
 
10
+ class GroupNodeRefType(StrEnum):
11
+ """分组节点引用类型枚举."""
12
+
13
+ INNER = "inner"
14
+ BEFORE = "before"
15
+ AFTER = "after"
16
+
17
+
10
18
  class InnerMetaType(StrEnum):
11
19
  """SDK 内部使用的 Meta 类型枚举.
12
20
 
@@ -16,8 +24,11 @@ class InnerMetaType(StrEnum):
16
24
  DATASOURCE: 数据源类型 meta。
17
25
  """
18
26
 
27
+ GROUP = "group"
28
+ """分组"""
29
+
19
30
  DATASOURCE = "datasource"
20
- """数据源类型 meta。"""
31
+ """数据源类型"""
21
32
 
22
33
  def __repr__(self):
23
34
  return self.value
@@ -76,17 +87,17 @@ class SqlExpression(StrEnum):
76
87
  用于查询条件构造,对应后端 ``SqlExpression``。
77
88
  """
78
89
 
79
- EQ = "="
90
+ EQ = "eq"
80
91
  """相等 (=)。"""
81
- NE = "!="
92
+ NE = "ne"
82
93
  """不相等 (!=)。"""
83
- GT = ">"
94
+ GT = "gt"
84
95
  """大于 (>)。"""
85
- GE = ">="
96
+ GE = "ge"
86
97
  """大于等于 (>=)。"""
87
- LT = "<"
98
+ LT = "lt"
88
99
  """小于 (<)。"""
89
- LE = "<="
100
+ LE = "le"
90
101
  """小于等于 (<=)。"""
91
102
  IN = "in"
92
103
  """属于 (IN)。"""
@@ -116,16 +127,16 @@ class SqlExpression(StrEnum):
116
127
  Returns:
117
128
  str: 中文标题,例如 ``"相等"``、``"属于"`` 等。
118
129
  """
119
- return _EXPRESSION_TITLES[self]
130
+ return _EXPRESSION_TITLES[self.value]
120
131
 
121
132
 
122
133
  _EXPRESSION_TITLES: dict[str, str] = {
123
- "=": "相等",
124
- "!=": "不相等",
125
- ">": "大于",
126
- ">=": "大于等于",
127
- "<": "小于",
128
- "<=": "小于等于",
134
+ "eq": "相等",
135
+ "ne": "不相等",
136
+ "gt": "大于",
137
+ "ge": "大于等于",
138
+ "lt": "小于",
139
+ "le": "小于等于",
129
140
  "in": "属于",
130
141
  "notin": "不属于",
131
142
  "like": "匹配",
@@ -209,3 +220,55 @@ class ColumnType(StrEnum):
209
220
  """子表类型。"""
210
221
  STRING = "string"
211
222
  """字符串类型。"""
223
+
224
+
225
+ class MetaWidgetSubType(StrEnum):
226
+ """卡片子类型枚举."""
227
+
228
+ CHART = "chart"
229
+ TABLE = "table"
230
+ DETAIL = "detail"
231
+ STATISTIC = "statistic"
232
+ STATISTIC_V2 = "statistic-v2"
233
+ GIS = "gis"
234
+ METRIC = "metric"
235
+ TOPOLOGY = "topology"
236
+ AMIS = "amis"
237
+
238
+
239
+ class MetaTemplateSubType(StrEnum):
240
+ """模板子类型枚举."""
241
+
242
+ REPORT = "report"
243
+ PYTHON = "python"
244
+ JAVASCRIPT = "javascript"
245
+
246
+
247
+ class MetaSkillSubType(StrEnum):
248
+ """技能子类型枚举."""
249
+
250
+ LLM = "llm"
251
+ API = "api"
252
+ REPORT = "report"
253
+ FORM_SAVE = "form-save"
254
+
255
+
256
+ class MetaSkillFileSubType(StrEnum):
257
+ """技能子文件类型枚举."""
258
+
259
+ DOC = "doc"
260
+ CODE = "code"
261
+ IMAGE = "image"
262
+
263
+
264
+ class MetaReportSubType(StrEnum):
265
+ """文档子类型枚举."""
266
+
267
+ # 文档
268
+ DOC = "doc"
269
+ # 本体
270
+ ONTOLOGY = "ontology"
271
+ # 看板
272
+ DASHBOARD = "dashboard"
273
+ # # 废弃
274
+ # SKILL = "skill"
@@ -0,0 +1,66 @@
1
+ """分组节点 (GroupNode) Schema 定义.
2
+
3
+ 用于表示数据源目录树中的分组节点,包含节点的基本信息
4
+ 和层级关系。
5
+ """
6
+
7
+ from typing import Annotated
8
+
9
+ from pydantic import AliasChoices, BaseModel, Field, JsonValue
10
+
11
+
12
+ class GroupTree(BaseModel):
13
+ prodCode: Annotated[
14
+ str,
15
+ Field(
16
+ description="产品编码",
17
+ validation_alias=AliasChoices("prodCode", "prod_code", "PROD_CODE"),
18
+ ),
19
+ ]
20
+ release: Annotated[
21
+ str | None, Field(description="版本", validation_alias=AliasChoices("release", "RELEASE"))
22
+ ] = None
23
+
24
+ name: Annotated[str, Field(description="名称", validation_alias=AliasChoices("name", "NAME"))]
25
+ title: Annotated[
26
+ str, Field(description="中文名称", validation_alias=AliasChoices("title", "TITLE"))
27
+ ]
28
+
29
+ data: list["GroupNode"] = Field(default_factory=list, description="数据")
30
+ nodeMap: dict[str, dict[str, JsonValue]] = Field(default_factory=dict, description="节点映射")
31
+
32
+
33
+ class GroupNode(BaseModel):
34
+ id: Annotated[
35
+ str, Field(description="元数据ID", validation_alias=AliasChoices("id", "cuid", "CUID"))
36
+ ]
37
+ pid: Annotated[str | None, Field(description="父ID")]
38
+ parentId: Annotated[
39
+ str | None,
40
+ Field(
41
+ description="父ID", validation_alias=AliasChoices("parentId", "parent_id", "PARENT_ID")
42
+ ),
43
+ ]
44
+
45
+ type: Annotated[str, Field(description="类型", validation_alias=AliasChoices("type", "TYPE"))]
46
+ subType: Annotated[
47
+ str | None,
48
+ Field(
49
+ description="子类型", validation_alias=AliasChoices("subType", "sub_type", "SUB_TYPE")
50
+ ),
51
+ ]
52
+
53
+ name: Annotated[str, Field(description="名称", validation_alias=AliasChoices("name", "NAME"))]
54
+ title: Annotated[
55
+ str, Field(description="中文名称", validation_alias=AliasChoices("label", "title", "TITLE"))
56
+ ]
57
+ digest: Annotated[
58
+ str | None, Field(description="摘要", validation_alias=AliasChoices("digest", "DIGEST"))
59
+ ]
60
+ remark: Annotated[
61
+ str | None, Field(description="备注", validation_alias=AliasChoices("remark", "REMARK"))
62
+ ]
63
+
64
+ attrs: Annotated[dict[str, JsonValue] | None, Field(description="扩展属性")] = None
65
+ params: Annotated[dict[str, JsonValue] | None, Field(description="参数")] = None
66
+ children: Annotated[list["GroupNode"] | None, Field(description="子节点")] = None
@@ -127,7 +127,10 @@ class MetaBase(BaseModel):
127
127
  ] = None
128
128
  spaceName: Annotated[
129
129
  str | None,
130
- Field(description="空间名称", validation_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME")),
130
+ Field(
131
+ description="空间名称",
132
+ validation_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME"),
133
+ ),
131
134
  ] = None
132
135
 
133
136
  subSystem: Annotated[
@@ -340,6 +343,10 @@ class MetaUpdate(BaseModel, Generic[META_DATA_TYPE]):
340
343
 
341
344
  class MetaPageData(BaseModel):
342
345
  total: Annotated[int, Field(description="总数")]
343
- page_num: Annotated[int, Field(description="页码", validation_alias=AliasChoices("pageNum", "page_num"))]
344
- page_size: Annotated[int, Field(description="页大小", validation_alias=AliasChoices("pageSize", "page_size"))]
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
+ ]
345
352
  records: list[MetaBase] = Field(default_factory=list, description="数据")