dataops-sdk 0.3.4__tar.gz → 0.3.5__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 (87) hide show
  1. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/PKG-INFO +1 -1
  2. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/__init__.py +12 -1
  3. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/__init__.py +10 -3
  4. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/alarm.py +45 -10
  5. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/data_table.py +1 -1
  6. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/meta.py +75 -24
  7. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/skill.py +5 -3
  8. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/__init__.py +20 -0
  9. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/alarm.py +163 -11
  10. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/auth.py +3 -6
  11. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/data_table.py +105 -105
  12. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/dataset.py +10 -10
  13. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/dict_.py +3 -3
  14. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/meta.py +66 -16
  15. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/metrics.py +3 -3
  16. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/report.py +3 -3
  17. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/skill.py +22 -12
  18. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/table.py +220 -10
  19. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/widget.py +3 -3
  20. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/workflow.py +3 -3
  21. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/session.py +33 -105
  22. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/utils/utils.py +8 -8
  23. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
  24. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/pyproject.toml +0 -0
  25. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/setup.cfg +0 -0
  26. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/constants.py +0 -0
  27. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/exceptions.py +0 -0
  28. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/__init__.py +0 -0
  29. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/datasource_factory.py +0 -0
  30. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
  31. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
  32. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
  33. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
  34. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
  35. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
  36. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
  37. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
  38. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
  39. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
  40. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/__init__.py +0 -0
  41. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/common.py +0 -0
  42. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
  43. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
  44. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
  45. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
  46. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
  47. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/nacos.py +0 -0
  48. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
  49. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
  50. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
  51. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
  52. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/api.py +0 -0
  53. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/datasource.py +0 -0
  54. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/dict_.py +0 -0
  55. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/enums.py +0 -0
  56. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/group.py +0 -0
  57. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/hazard.py +0 -0
  58. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/query.py +0 -0
  59. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/report.py +0 -0
  60. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/table.py +0 -0
  61. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/user.py +0 -0
  62. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/widget.py +0 -0
  63. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/schemas/workflow.py +0 -0
  64. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/api.py +0 -0
  65. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/datasource.py +0 -0
  66. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/hazard.py +0 -0
  67. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/services/ref.py +0 -0
  68. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/__init__.py +0 -0
  69. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/builder.py +0 -0
  70. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/constants.py +0 -0
  71. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
  72. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/models.py +0 -0
  73. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
  74. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/render_utils.py +0 -0
  75. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/renderers.py +0 -0
  76. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/tiptap/tool.py +0 -0
  77. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/utils/__init__.py +0 -0
  78. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/utils/common.py +0 -0
  79. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk/utils/log.py +0 -0
  80. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk.egg-info/SOURCES.txt +0 -0
  81. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
  82. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk.egg-info/requires.txt +0 -0
  83. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/src/dataops_sdk.egg-info/top_level.txt +0 -0
  84. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/tests/test_constants.py +0 -0
  85. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/tests/test_exceptions.py +0 -0
  86. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/tests/test_session.py +0 -0
  87. {dataops_sdk-0.3.4 → dataops_sdk-0.3.5}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataops-sdk
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Python SDK for the DataOps platform.
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: pydantic<3,>=2
@@ -28,8 +28,11 @@ from .services import ( # noqa: F401
28
28
  service_count_widget_by_code,
29
29
  service_create_data_table,
30
30
  service_create_data_table_record,
31
+ service_create_table_record,
31
32
  service_delete_data_table_record_by_id,
32
33
  service_delete_data_table_record_by_id_list,
34
+ service_delete_table_record_by_id,
35
+ service_delete_table_record_by_id_list,
33
36
  service_exec_sql_by_datasource,
34
37
  service_find_alarm_table_data,
35
38
  service_find_meta_by_codes,
@@ -63,6 +66,11 @@ from .services import ( # noqa: F401
63
66
  service_get_table_data_by_name,
64
67
  service_get_table_detail_by_code,
65
68
  service_get_table_detail_by_name,
69
+ service_get_table_list_by_code,
70
+ service_get_table_record_by_id,
71
+ service_get_table_records_by_code,
72
+ service_get_table_reference_list,
73
+ service_get_table_total_by_code,
66
74
  service_get_widget_data_by_code,
67
75
  service_get_widget_detail_by_code,
68
76
  service_get_workflow_by_code,
@@ -96,6 +104,9 @@ from .services import ( # noqa: F401
96
104
  service_trigger_hazard_task,
97
105
  service_update_data_table_record_by_id,
98
106
  service_update_data_table_record_by_id_list,
107
+ service_update_table_record_by_id,
108
+ service_update_table_record_by_id_list,
99
109
  )
110
+ from .session import dataops_base_url_context, request_context
100
111
 
101
- __version__ = "0.3.4"
112
+ __version__ = "0.3.5"
@@ -4,7 +4,15 @@
4
4
  dataops_sdk.schemas import ...`` 使用。
5
5
  """
6
6
 
7
- from .alarm import AlarmRuleItem
7
+ from .alarm import (
8
+ AlarmActionItem,
9
+ AlarmBuiltinFunctionItem,
10
+ AlarmDetail,
11
+ AlarmPreprocessItem,
12
+ AlarmRuleItem,
13
+ AlarmRuleMatchItem,
14
+ AlarmSpecItem,
15
+ )
8
16
  from .api import ApiMeta, HttpInterfaceData
9
17
  from .data_table import DataTableData, MetaDataTable
10
18
  from .datasource import DataDataSource
@@ -19,12 +27,11 @@ from .meta import (
19
27
  MetaBase,
20
28
  MetaCreate,
21
29
  MetaRef,
22
- MetaRelease,
23
30
  MetaUpdate,
24
31
  )
25
32
  from .query import PageParam, SqlCondition, SqlQueryParam, SqlSort
26
33
  from .report import ReportMeta, ReportMetaData
27
- from .skill import DataSkill, MetaSkill, SkillCallResult
34
+ from .skill import DataSkill, DataSkillSubFile, MetaSkill, SkillCallResult
28
35
  from .table import (
29
36
  ColumnItem,
30
37
  DataBaseColumnDictExternal,
@@ -1,14 +1,14 @@
1
1
  """告警 (Alarm) 相关实体的 Schema 定义.
2
2
 
3
3
  对应平台告警规则、规则规格、处理动作与匹配项等数据模型,
4
- 统一继承自 ``MetaRelease`` 并复用了启用状态相关字段。
4
+ 统一继承自 ``MetaBase`` 并复用了启用状态相关字段。
5
5
  """
6
6
 
7
7
  from typing import Annotated
8
8
 
9
- from pydantic import BaseModel, Field
9
+ from pydantic import BaseModel, ConfigDict, Field, JsonValue
10
10
 
11
- from dataops_sdk.schemas.meta import MetaRelease
11
+ from dataops_sdk.schemas.meta import Meta, MetaBase, MetaRelease
12
12
 
13
13
 
14
14
  class AlarmExternal(BaseModel):
@@ -21,7 +21,7 @@ class AlarmExternal(BaseModel):
21
21
  N_IS_ENABLED: Annotated[str, Field(description="是否启用名称")]
22
22
 
23
23
 
24
- class AlarmRuleItem(MetaRelease, AlarmExternal):
24
+ class AlarmRuleItem(MetaBase, AlarmExternal):
25
25
  """告警规则条目.
26
26
 
27
27
  Attributes:
@@ -33,7 +33,7 @@ class AlarmRuleItem(MetaRelease, AlarmExternal):
33
33
  DESCRIPTION: Annotated[str, Field(description="描述")] = ""
34
34
 
35
35
 
36
- class AlarmSpecItem(MetaRelease, AlarmExternal):
36
+ class AlarmSpecItem(MetaBase, AlarmExternal):
37
37
  """告警规则规格条目.
38
38
 
39
39
  Attributes:
@@ -46,12 +46,12 @@ class AlarmSpecItem(MetaRelease, AlarmExternal):
46
46
 
47
47
  INDUSTRY: Annotated[str, Field(description="行业")]
48
48
  N_INDUSTRY: Annotated[str, Field(description="行业名称")]
49
- BUSINESS_DOMAIN: Annotated[str, Field(description="业务域")]
50
- N_BUSINESS_DOMAIN: Annotated[str, Field(description="业务域名称")]
51
- KAFKA_TOPICS: Annotated[str, Field(description="Kafka主题列表")]
49
+ BUSINESS_DOMAIN: Annotated[str | None, Field(description="业务域")] = None
50
+ N_BUSINESS_DOMAIN: Annotated[str | None, Field(description="业务域名称")] = None
51
+ KAFKA_TOPICS: Annotated[str | None, Field(description="Kafka主题列表")] = None
52
52
 
53
53
 
54
- class AlarmActionItem(MetaRelease, AlarmExternal):
54
+ class AlarmActionItem(MetaBase, AlarmExternal):
55
55
  """告警处理动作条目.
56
56
 
57
57
  Attributes:
@@ -66,7 +66,7 @@ class AlarmActionItem(MetaRelease, AlarmExternal):
66
66
  SCRIPT_CONTENT: Annotated[str, Field(description="脚本内容")]
67
67
 
68
68
 
69
- class AlarmRuleMatchItem(MetaRelease, AlarmExternal):
69
+ class AlarmRuleMatchItem(MetaBase, AlarmExternal):
70
70
  """告警规则匹配条目.
71
71
 
72
72
  Attributes:
@@ -82,3 +82,38 @@ class AlarmRuleMatchItem(MetaRelease, AlarmExternal):
82
82
  N_SPEC_TYPE: Annotated[str, Field(description="规则类型名称")]
83
83
  RULE_TYPE: Annotated[str, Field(description="规则类型")]
84
84
  N_RULE_TYPE: Annotated[str, Field(description="规则类型名称")]
85
+
86
+
87
+ class AlarmPreprocessItem(MetaRelease, AlarmExternal):
88
+ """预处理脚本列表条目。
89
+
90
+ 前端列表接口返回大写字段;说明、脚本内容和专业名称可能为空,
91
+ 因此这里不把这些展示字段设置为必填。
92
+ """
93
+
94
+ N_SPEC_TYPE: Annotated[str | None, Field(description="关联专业名称")] = None
95
+ DESCRIPTION: Annotated[str | None, Field(description="脚本说明")] = None
96
+ SCRIPT_CONTENT: Annotated[str | None, Field(description="脚本内容")] = None
97
+
98
+ model_config = ConfigDict(extra="allow", str_to_lower=False)
99
+
100
+
101
+ class AlarmBuiltinFunctionItem(MetaRelease, AlarmExternal):
102
+ """内置函数列表条目。"""
103
+
104
+ CLAZZ: Annotated[str | None, Field(description="类全路径")] = None
105
+ SCRIPT: Annotated[str | None, Field(description="函数脚本")] = None
106
+ REMARK: Annotated[str | None, Field(description="备注")] = None
107
+
108
+ model_config = ConfigDict(extra="allow", str_to_lower=False)
109
+
110
+
111
+ class AlarmDetail(BaseModel):
112
+ """告警详情的统一返回结构。
113
+
114
+ ``meta`` 来自主体接口,``params`` 来自 Meta 参数接口;data 使用 JSON
115
+ 映射保留前端可能新增的字段,避免详情查询因未知字段失败。
116
+ """
117
+
118
+ meta: Meta[dict[str, JsonValue]]
119
+ params: dict[str, JsonValue] = Field(default_factory=dict)
@@ -435,7 +435,7 @@ class DataTableField(BaseModel):
435
435
  Field(description="类型扩展配置", validation_alias=AliasChoices("typeExt", "type_ext")),
436
436
  ] = None
437
437
 
438
- model_config = ConfigDict(str_to_lower=True, extra="allow")
438
+ model_config = ConfigDict(extra="allow")
439
439
 
440
440
 
441
441
  # ---------------------------------------------------------------------------
@@ -1,7 +1,6 @@
1
1
  """平台 Meta 通用 Schema 定义.
2
2
 
3
3
  集中管理 ``Meta`` 体系的基类与容器,包括:
4
- - ``MetaRelease``: 后端返回的发布态基类,字段采用大写下划线。
5
4
  - ``MetaBase``: list 接口使用的基类,字段采用小驼峰 + alias。
6
5
  - ``Meta``: 详情响应容器,承载 ``data`` 字段并按需自动反序列化 ``rawData``。
7
6
  - ``MetaRef``: 引用形态元数据。
@@ -70,7 +69,7 @@ class MetaRelease(BaseModel):
70
69
  LAST_MODIFY_TIME: Annotated[datetime, Field(description="最后修改时间")]
71
70
  LAST_MODIFY_USER: Annotated[str, Field(description="最后修改人")]
72
71
 
73
- model_config = ConfigDict(extra="allow", str_to_lower=True)
72
+ model_config = ConfigDict(extra="allow")
74
73
 
75
74
 
76
75
  class MetaBase(BaseModel):
@@ -101,68 +100,120 @@ class MetaBase(BaseModel):
101
100
  version: 版本号。
102
101
  """
103
102
 
104
- id: Annotated[str, Field(description="元数据ID", validation_alias=AliasChoices("id", "cuid"))]
103
+ id: Annotated[
104
+ str, Field(description="元数据ID", validation_alias=AliasChoices("id", "cuid", "CUID"))
105
+ ]
105
106
  parentId: Annotated[
106
107
  str | None,
107
- Field(description="父ID", validation_alias=AliasChoices("parentId", "parent_id")),
108
+ Field(
109
+ description="父ID", validation_alias=AliasChoices("parentId", "parent_id", "PARENT_ID")
110
+ ),
108
111
  ]
109
- code: Annotated[str, Field(description="编码")]
112
+ code: Annotated[str, Field(description="编码", validation_alias=AliasChoices("code", "CODE"))]
110
113
 
111
114
  groupCode: Annotated[
112
115
  str | None,
113
- Field(description="组编码", validation_alias=AliasChoices("groupCode", "group_code")),
116
+ Field(
117
+ description="组编码",
118
+ validation_alias=AliasChoices("groupCode", "group_code", "GROUP_CODE"),
119
+ ),
114
120
  ]
115
- groupName: Annotated[str | None, Field(description="组名称")] = None
116
- spaceName: Annotated[str | None, Field(description="空间名称")] = None
121
+ groupName: Annotated[
122
+ str | None,
123
+ Field(
124
+ description="组名称",
125
+ validation_alias=AliasChoices("groupName", "group_name", "GROUP_NAME"),
126
+ ),
127
+ ] = None
128
+ spaceName: Annotated[
129
+ str | None,
130
+ Field(
131
+ description="空间名称",
132
+ validate_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME"),
133
+ ),
134
+ ] = None
117
135
 
118
136
  subSystem: Annotated[
119
- str, Field(description="子系统", validation_alias=AliasChoices("subSystem", "sub_system"))
137
+ str,
138
+ Field(
139
+ description="子系统",
140
+ validation_alias=AliasChoices("subSystem", "sub_system", "SUB_SYSTEM"),
141
+ ),
120
142
  ]
121
143
 
122
- type: Annotated[str, Field(description="类型")]
144
+ type: Annotated[str, Field(description="类型", validation_alias=AliasChoices("type", "TYPE"))]
123
145
  subType: Annotated[
124
146
  str | None,
125
- Field(description="子类型", validation_alias=AliasChoices("subType", "sub_type")),
147
+ Field(
148
+ description="子类型", validation_alias=AliasChoices("subType", "sub_type", "SUB_TYPE")
149
+ ),
126
150
  ]
127
151
 
128
- name: Annotated[str, Field(description="名称")]
129
- title: Annotated[str, Field(description="中文名称")]
130
- digest: Annotated[str | None, Field(description="摘要")]
152
+ name: Annotated[str, Field(description="名称", validation_alias=AliasChoices("name", "NAME"))]
153
+ title: Annotated[
154
+ str, Field(description="中文名称", validation_alias=AliasChoices("title", "TITLE"))
155
+ ]
156
+ digest: Annotated[
157
+ str | None, Field(description="摘要", validation_alias=AliasChoices("digest", "DIGEST"))
158
+ ]
131
159
 
132
- remark: Annotated[str | None, Field(description="备注")]
160
+ remark: Annotated[
161
+ str | None, Field(description="备注", validation_alias=AliasChoices("remark", "REMARK"))
162
+ ]
133
163
 
134
164
  createUser: Annotated[
135
- str, Field(description="创建人", validation_alias=AliasChoices("createUser", "create_user"))
165
+ str,
166
+ Field(
167
+ description="创建人",
168
+ validation_alias=AliasChoices("createUser", "create_user", "CREATE_USER"),
169
+ ),
136
170
  ]
137
171
  createTime: Annotated[
138
172
  datetime,
139
- Field(description="创建时间", validation_alias=AliasChoices("createTime", "create_time")),
173
+ Field(
174
+ description="创建时间",
175
+ validation_alias=AliasChoices("createTime", "create_time", "CREATE_TIME"),
176
+ ),
140
177
  ]
141
178
  lastModifyUser: Annotated[
142
179
  str,
143
180
  Field(
144
181
  description="最后修改人",
145
- validation_alias=AliasChoices("lastModifyUser", "last_modify_user"),
182
+ validation_alias=AliasChoices("lastModifyUser", "last_modify_user", "LAST_MODIFY_USER"),
146
183
  ),
147
184
  ]
148
185
  lastModifyTime: Annotated[
149
186
  datetime,
150
187
  Field(
151
188
  description="最后修改时间",
152
- validation_alias=AliasChoices("lastModifyTime", "last_modify_time"),
189
+ validation_alias=AliasChoices("lastModifyTime", "last_modify_time", "LAST_MODIFY_TIME"),
153
190
  ),
154
191
  ]
155
192
 
156
193
  tenantId: Annotated[
157
- str, Field(description="租户ID", validation_alias=AliasChoices("tenantId", "tenant_id"))
194
+ str,
195
+ Field(
196
+ description="租户ID",
197
+ validation_alias=AliasChoices("tenantId", "tenant_id", "TENANT_ID"),
198
+ ),
158
199
  ]
159
200
  prodCode: Annotated[
160
- str, Field(description="产品编码", validation_alias=AliasChoices("prodCode", "prod_code"))
201
+ str,
202
+ Field(
203
+ description="产品编码",
204
+ validation_alias=AliasChoices("prodCode", "prod_code", "PROD_CODE"),
205
+ ),
161
206
  ]
162
- release: Annotated[str, Field(description="版本")]
207
+ release: Annotated[
208
+ str | None, Field(description="版本", validation_alias=AliasChoices("release", "RELEASE"))
209
+ ] = None
163
210
 
164
- action: Annotated[str, Field(description="操作")]
165
- version: Annotated[str, Field(description="版本")]
211
+ action: Annotated[
212
+ str, Field(description="操作", validation_alias=AliasChoices("action", "ACTION"))
213
+ ]
214
+ version: Annotated[
215
+ str, Field(description="版本", validation_alias=AliasChoices("version", "VERSION"))
216
+ ]
166
217
 
167
218
  model_config = ConfigDict(extra="allow")
168
219
 
@@ -6,11 +6,10 @@
6
6
 
7
7
  from collections.abc import Mapping
8
8
  from enum import StrEnum
9
- from typing import Annotated, Any
10
-
11
- from pydantic import AliasChoices, BaseModel, Field, JsonValue
9
+ from typing import Annotated, Any, Union
12
10
 
13
11
  from dataops_sdk.schemas.meta import Meta
12
+ from pydantic import AliasChoices, BaseModel, Field, JsonValue
14
13
 
15
14
 
16
15
  class MetaSkillSubType(StrEnum):
@@ -62,6 +61,9 @@ class DataSkillSubFileImage(BaseModel):
62
61
  language: Annotated[str, Field(description="编程语言")]
63
62
 
64
63
 
64
+ DataSkillSubFile = Union[DataSkillSubFileDoc, DataSkillSubFileCode, DataSkillSubFileImage]
65
+
66
+
65
67
  class MetaSkill(Meta[DataSkill]):
66
68
  """技能详情,继承通用 Meta 字段并附加 DataSkill data.
67
69
 
@@ -5,11 +5,20 @@ from .alarm import (
5
5
  service_count_alarm_specs,
6
6
  service_find_alarm_table_data,
7
7
  service_find_meta_by_codes,
8
+ service_get_alarm_action_detail,
9
+ service_get_alarm_builtin_function_detail,
10
+ service_get_alarm_preprocess_detail,
11
+ service_get_alarm_rule_detail,
12
+ service_get_alarm_rule_type_detail,
8
13
  service_get_alarm_rule_enums,
9
14
  service_get_alarm_table_columns,
10
15
  service_get_rel_table_columns,
16
+ service_get_alarm_spec_detail,
17
+ service_list_alarm_builtin_functions,
18
+ service_list_alarm_action,
11
19
  service_list_alarm_rule_matches,
12
20
  service_list_alarm_rules,
21
+ service_list_alarm_preprocess,
13
22
  service_list_alarm_specs,
14
23
  )
15
24
  from .api import service_get_api_by_code, service_get_api_by_name
@@ -64,6 +73,7 @@ from .meta import (
64
73
  release_list_create,
65
74
  release_list_get_by_code,
66
75
  release_list_get_by_name,
76
+ release_list_params_get_rel_by_code,
67
77
  release_list_list,
68
78
  release_list_list_by_parent_id,
69
79
  release_list_page,
@@ -94,12 +104,22 @@ from .skill import (
94
104
  from .table import (
95
105
  service_count_table_by_code,
96
106
  service_count_table_by_name,
107
+ service_create_table_record,
108
+ service_delete_table_record_by_id,
109
+ service_delete_table_record_by_id_list,
97
110
  service_exec_sql_by_datasource,
98
111
  service_get_table_data_by_code,
99
112
  service_get_table_data_by_name,
100
113
  service_get_table_detail_by_code,
101
114
  service_get_table_detail_by_name,
115
+ service_get_table_list_by_code,
116
+ service_get_table_record_by_id,
117
+ service_get_table_records_by_code,
118
+ service_get_table_reference_list,
119
+ service_get_table_total_by_code,
102
120
  service_list_tables,
121
+ service_update_table_record_by_id,
122
+ service_update_table_record_by_id_list,
103
123
  )
104
124
  from .widget import (
105
125
  service_count_widget_by_code,
@@ -15,21 +15,43 @@ from pydantic_core import to_json
15
15
  from dataops_sdk.exceptions import AuthenticationError, DataOpsError
16
16
  from dataops_sdk.schemas.alarm import (
17
17
  AlarmActionItem,
18
+ AlarmBuiltinFunctionItem,
19
+ AlarmDetail,
20
+ AlarmPreprocessItem,
18
21
  AlarmRuleItem,
19
22
  AlarmRuleMatchItem,
20
23
  AlarmSpecItem,
21
24
  )
22
25
  from dataops_sdk.schemas.query import PageParam, SqlQueryParam
26
+ from dataops_sdk.services.meta import (
27
+ release_list_get_by_code,
28
+ release_list_params_get_rel_by_code,
29
+ )
23
30
  from dataops_sdk.session import get_session
24
31
  from dataops_sdk.utils import encrypt_body
25
32
 
26
33
  __all__ = [
27
- "service_list_alarm_rules",
28
- "service_get_alarm_rule_enums",
34
+ "service_count_alarm_action",
35
+ "service_count_alarm_rule_matches",
36
+ "service_count_alarm_rules",
37
+ "service_count_alarm_specs",
38
+ "service_find_alarm_table_data",
29
39
  "service_find_meta_by_codes",
40
+ "service_get_alarm_action_detail",
41
+ "service_get_alarm_builtin_function_detail",
42
+ "service_get_alarm_preprocess_detail",
43
+ "service_get_alarm_rule_detail",
44
+ "service_get_alarm_rule_type_detail",
45
+ "service_get_alarm_rule_enums",
30
46
  "service_get_alarm_table_columns",
31
47
  "service_get_rel_table_columns",
32
- "service_find_alarm_table_data",
48
+ "service_get_alarm_spec_detail",
49
+ "service_list_alarm_builtin_functions",
50
+ "service_list_alarm_action",
51
+ "service_list_alarm_preprocess",
52
+ "service_list_alarm_rule_matches",
53
+ "service_list_alarm_rules",
54
+ "service_list_alarm_specs",
33
55
  ]
34
56
 
35
57
 
@@ -62,7 +84,12 @@ def _post_alarm(
62
84
  DataOpsError: API 返回错误时
63
85
  AuthenticationError: 未认证或认证失败时
64
86
  """
65
- body = dict(pageParam=page_param, queryParam=query_param, count=count)
87
+ body = {"pageParam": page_param, "queryParam": query_param, "count": count}
88
+ return _post_alarm_body(url, body)
89
+
90
+
91
+ def _post_alarm_body(url: str, body: Mapping[str, Any]) -> Any:
92
+ """发送告警 POST 请求并返回响应 data。"""
66
93
  try:
67
94
  with get_session() as session:
68
95
  resp = session.post(url, content=to_json(encrypt_body(body)))
@@ -101,6 +128,106 @@ def _get_alarm(url: str) -> Any:
101
128
  raise AuthenticationError("认证失败,请先登录") from e
102
129
 
103
130
 
131
+ def _join_alarm_filter(value: Iterable[str] | str | bool | None) -> str | None:
132
+ """将前端的单值/多值筛选统一为后端 varMap 所需的逗号字符串。"""
133
+ if value is None:
134
+ return None
135
+ if isinstance(value, bool):
136
+ return "1" if value else "0"
137
+ if isinstance(value, str):
138
+ return value
139
+ return ",".join(str(item) for item in value)
140
+
141
+
142
+ def _get_alarm_detail(
143
+ meta_type: str,
144
+ code: str,
145
+ param_names: list[str],
146
+ ) -> AlarmDetail:
147
+ """组合前端详情使用的 Meta 主体和 Meta 参数两次查询。"""
148
+ meta = release_list_get_by_code(meta_type, code)
149
+ params = release_list_params_get_rel_by_code(meta_type, code, param_names)
150
+ return AlarmDetail(meta=meta, params=params)
151
+
152
+
153
+ def service_get_alarm_preprocess_detail(code: str) -> AlarmDetail:
154
+ """按编码查询预处理脚本详情。"""
155
+ return _get_alarm_detail("alarm_preprocess", code, ["is_enabled", "spec_type"])
156
+
157
+
158
+ def service_get_alarm_builtin_function_detail(code: str) -> AlarmDetail:
159
+ """按编码查询内置函数详情。"""
160
+ return _get_alarm_detail("alarm_builtin_func", code, ["is_enabled"])
161
+
162
+
163
+ def service_get_alarm_spec_detail(code: str) -> AlarmDetail:
164
+ """按编码查询专业管理详情。"""
165
+ return _get_alarm_detail("alarm_spec_type", code, ["is_enabled", "industry"])
166
+
167
+
168
+ def service_get_alarm_rule_type_detail(code: str) -> AlarmDetail:
169
+ """按编码查询规则类型详情。"""
170
+ return _get_alarm_detail("alarm_rule_type", code, ["is_enabled"])
171
+
172
+
173
+ def service_get_alarm_rule_detail(code: str) -> AlarmDetail:
174
+ """按编码查询匹配规则基础详情。"""
175
+ return _get_alarm_detail("alarm_rule", code, [])
176
+
177
+
178
+ def service_get_alarm_action_detail(code: str) -> AlarmDetail:
179
+ """按编码查询处置动作详情。"""
180
+ return _get_alarm_detail("alarm_action", code, ["is_enabled", "rule_type"])
181
+
182
+
183
+ def service_list_alarm_preprocess(
184
+ page: int = 0,
185
+ size: int = 50,
186
+ query: str | None = None,
187
+ spec_types: Iterable[str] | None = None,
188
+ enabled: Iterable[str] | str | bool | None = None,
189
+ ) -> list[AlarmPreprocessItem]:
190
+ """分页查询预处理脚本列表。"""
191
+ query_param = SqlQueryParam()
192
+ if query:
193
+ query_param.add_like("title", query, "mrl")
194
+ spec_type_value = _join_alarm_filter(spec_types)
195
+ enabled_value = _join_alarm_filter(enabled)
196
+ if spec_type_value:
197
+ query_param.varMap["specType"] = spec_type_value
198
+ if enabled_value:
199
+ query_param.varMap["isEnabled"] = enabled_value
200
+
201
+ results = _post_alarm(
202
+ "/alarm/preprocess/list",
203
+ query_param=query_param,
204
+ page_param=PageParam(start=page * max(0, size), limit=size),
205
+ )
206
+ return TypeAdapter(list[AlarmPreprocessItem]).validate_python(results)
207
+
208
+
209
+ def service_list_alarm_builtin_functions(
210
+ page: int = 0,
211
+ size: int = 50,
212
+ query: str | None = None,
213
+ enabled: Iterable[str] | str | bool | None = None,
214
+ ) -> list[AlarmBuiltinFunctionItem]:
215
+ """分页查询内置函数列表。"""
216
+ query_param = SqlQueryParam()
217
+ if query:
218
+ query_param.add_like("title", query, "mrl")
219
+ enabled_value = _join_alarm_filter(enabled)
220
+ if enabled_value:
221
+ query_param.varMap["isEnabled"] = enabled_value
222
+
223
+ results = _post_alarm(
224
+ "/alarm/builtinFunction/list",
225
+ query_param=query_param,
226
+ page_param=PageParam(start=page * max(0, size), limit=size),
227
+ )
228
+ return TypeAdapter(list[AlarmBuiltinFunctionItem]).validate_python(results)
229
+
230
+
104
231
  def service_list_alarm_rules(
105
232
  page: int = 0,
106
233
  size: int = 50,
@@ -130,7 +257,12 @@ def service_list_alarm_rules(
130
257
  if query:
131
258
  query_param.add_like("title", query, "mrl")
132
259
 
133
- results = _post_alarm(url, False, page_param, query_param)
260
+ results = _post_alarm(
261
+ url,
262
+ False,
263
+ query_param=query_param,
264
+ page_param=page_param,
265
+ )
134
266
  return TypeAdapter(list[AlarmRuleItem], config=ConfigDict(str_to_lower=True)).validate_python(
135
267
  results
136
268
  )
@@ -190,7 +322,12 @@ def service_list_alarm_specs(
190
322
  query_param.varMap["isEnabled"] = "1" if enabled else "0"
191
323
  if query:
192
324
  query_param.add_like("title", query, "mrl")
193
- results = _post_alarm(url, False, page_param, query_param)
325
+ results = _post_alarm(
326
+ url,
327
+ False,
328
+ query_param=query_param,
329
+ page_param=page_param,
330
+ )
194
331
  return TypeAdapter(list[AlarmSpecItem], config=ConfigDict(str_to_lower=True)).validate_python(
195
332
  results
196
333
  )
@@ -254,7 +391,12 @@ def service_list_alarm_rule_matches(
254
391
  query_param.varMap["specType"] = ",".join(specs)
255
392
  if query:
256
393
  query_param.add_like("title", query, "mrl")
257
- results = _post_alarm(url, False, page_param, query_param)
394
+ results = _post_alarm(
395
+ url,
396
+ False,
397
+ query_param=query_param,
398
+ page_param=page_param,
399
+ )
258
400
  return TypeAdapter(
259
401
  list[AlarmRuleMatchItem], config=ConfigDict(str_to_lower=True)
260
402
  ).validate_python(results)
@@ -322,7 +464,12 @@ def service_list_alarm_action(
322
464
  query_param.varMap["ruleType"] = ",".join(rules)
323
465
  if query:
324
466
  query_param.add_like("title", query, "mrl")
325
- results = _post_alarm(url, False, page_param, query_param)
467
+ results = _post_alarm(
468
+ url,
469
+ False,
470
+ query_param=query_param,
471
+ page_param=page_param,
472
+ )
326
473
  return TypeAdapter(list[AlarmActionItem], config=ConfigDict(str_to_lower=True)).validate_python(
327
474
  results
328
475
  )
@@ -384,7 +531,7 @@ def service_find_meta_by_codes(codes: list[str]) -> list[dict]:
384
531
  DataOpsError: API 请求失败时
385
532
  AuthenticationError: 未认证或认证失败时
386
533
  """
387
- data = _post_alarm("/alarm/rule/findMetaByCodes", {"codes": codes})
534
+ data = _post_alarm_body("/alarm/rule/findMetaByCodes", {"codes": codes})
388
535
  return data or []
389
536
 
390
537
 
@@ -436,5 +583,10 @@ def service_find_alarm_table_data(code: str, query: Mapping[str, JsonValue] | No
436
583
  DataOpsError: API 请求失败时
437
584
  AuthenticationError: 未认证或认证失败时
438
585
  """
439
- body = {"code": code, "query": query or {}}
440
- return _post_alarm("/alarm/rule/findTableData", body) or {}
586
+ body = {
587
+ "code": code,
588
+ "pageParam": PageParam().model_dump(),
589
+ "queryParam": query or {},
590
+ "count": False,
591
+ }
592
+ return _post_alarm_body("/alarm/rule/findTableData", body) or {}