dataops-sdk 0.4.0__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.
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/PKG-INFO +1 -1
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/__init__.py +1 -1
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/__init__.py +3 -1
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/common.py +1 -1
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/enums.py +25 -1
- dataops_sdk-0.4.1/src/dataops_sdk/schemas/group.py +66 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/report.py +11 -12
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/user.py +2 -2
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/workflow.py +1 -5
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/__init__.py +12 -2
- dataops_sdk-0.4.1/src/dataops_sdk/services/group.py +69 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/meta.py +0 -2
- dataops_sdk-0.4.1/src/dataops_sdk/services/metrics.py +87 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/report.py +19 -2
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/skill.py +3 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/widget.py +14 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/session.py +5 -6
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/utils.py +5 -17
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/SOURCES.txt +1 -0
- dataops_sdk-0.4.0/src/dataops_sdk/schemas/group.py +0 -46
- dataops_sdk-0.4.0/src/dataops_sdk/services/metrics.py +0 -53
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/README.md +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/pyproject.toml +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/setup.cfg +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/constants.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/exceptions.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/__init__.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/datasource_factory.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/__init__.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/common.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/nacos.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/alarm.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/api.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/data_table.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/datasource.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/dict_.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/hazard.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/meta.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/query.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/skill.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/table.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/schemas/widget.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/alarm.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/api.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/auth.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/data_table.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/dataset.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/datasource.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/dict_.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/hazard.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/ref.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/table.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/services/workflow.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/__init__.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/builder.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/constants.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/models.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/render_utils.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/renderers.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/tiptap/tool.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/__init__.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/common.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/utils/log.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/requires.txt +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk.egg-info/top_level.txt +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/tests/test_constants.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/tests/test_exceptions.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/tests/test_session.py +0 -0
- {dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/tests/test_utils.py +0 -0
|
@@ -19,14 +19,16 @@ from .data_table import DataTableData, MetaDataTable
|
|
|
19
19
|
from .datasource import DataDataSource
|
|
20
20
|
from .dict_ import DataDict, DictItem
|
|
21
21
|
from .enums import (
|
|
22
|
+
GroupNodeRefType,
|
|
22
23
|
InnerMetaType,
|
|
24
|
+
MetaReportSubType,
|
|
23
25
|
MetaSkillFileSubType,
|
|
24
26
|
MetaSkillSubType,
|
|
25
27
|
MetaTemplateSubType,
|
|
26
28
|
MetaType,
|
|
27
29
|
MetaWidgetSubType,
|
|
28
30
|
)
|
|
29
|
-
from .group import GroupNode
|
|
31
|
+
from .group import GroupNode, GroupTree
|
|
30
32
|
from .hazard import HazardRecordDTO, HazardTaskDTO
|
|
31
33
|
from .meta import (
|
|
32
34
|
DEFAULT_META_DATA_TYPE,
|
|
@@ -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
|
-
"""数据源类型
|
|
31
|
+
"""数据源类型"""
|
|
21
32
|
|
|
22
33
|
def __repr__(self):
|
|
23
34
|
return self.value
|
|
@@ -248,3 +259,16 @@ class MetaSkillFileSubType(StrEnum):
|
|
|
248
259
|
DOC = "doc"
|
|
249
260
|
CODE = "code"
|
|
250
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
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
from collections.abc import Mapping
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
|
-
from pydantic import BaseModel, Field, JsonValue
|
|
10
|
-
|
|
11
9
|
from dataops_sdk.tiptap import TipTapBuilder
|
|
10
|
+
from pydantic import BaseModel, Field, JsonValue
|
|
12
11
|
|
|
13
12
|
from .meta import Meta
|
|
14
13
|
|
|
@@ -20,7 +19,16 @@ class ReportMetaData(BaseModel):
|
|
|
20
19
|
editor: tiptap 原始文档结构。
|
|
21
20
|
"""
|
|
22
21
|
|
|
23
|
-
editor: Annotated[
|
|
22
|
+
editor: Annotated[dict[str, JsonValue], Field(description="tiptap 原始文档")]
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def content(self) -> str:
|
|
26
|
+
"""由 ``data.editor`` 通过 ``TipTapBuilder`` 序列化为纯文本.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
str: 序列化结果。
|
|
30
|
+
"""
|
|
31
|
+
return TipTapBuilder().build().serialize(self.editor).strip()
|
|
24
32
|
|
|
25
33
|
|
|
26
34
|
class ReportMeta(Meta[ReportMetaData]):
|
|
@@ -31,12 +39,3 @@ class ReportMeta(Meta[ReportMetaData]):
|
|
|
31
39
|
Attributes:
|
|
32
40
|
content: 由 ``data.editor`` 序列化得到的纯文本。
|
|
33
41
|
"""
|
|
34
|
-
|
|
35
|
-
@property
|
|
36
|
-
def content(self) -> str:
|
|
37
|
-
"""由 ``data.editor`` 通过 ``TipTapBuilder`` 序列化为纯文本.
|
|
38
|
-
|
|
39
|
-
Returns:
|
|
40
|
-
str: 序列化结果。
|
|
41
|
-
"""
|
|
42
|
-
return TipTapBuilder().build().serialize(self.data.editor).strip()
|
|
@@ -41,8 +41,8 @@ class Application(BaseModel):
|
|
|
41
41
|
REMARK: Annotated[str | None, Field(description="备注")]
|
|
42
42
|
CREATE_TIME: Annotated[str, Field(description="创建时间")]
|
|
43
43
|
CREATE_USER: Annotated[str, Field(description="创建人")]
|
|
44
|
-
LAST_MODIFY_TIME: Annotated[str, Field(description="最后修改时间")]
|
|
45
|
-
LAST_MODIFY_USER: Annotated[str, Field(description="最后修改人")]
|
|
44
|
+
LAST_MODIFY_TIME: Annotated[str | None, Field(description="最后修改时间")]
|
|
45
|
+
LAST_MODIFY_USER: Annotated[str | None, Field(description="最后修改人")]
|
|
46
46
|
PROD_ADMIN: Annotated[str | None, Field(description="产品管理员")]
|
|
47
47
|
GIT_ID: Annotated[str | None, Field(description="Git ID")]
|
|
48
48
|
EXTS: Annotated[str | None, Field(description="扩展字段")]
|
|
@@ -6,17 +6,13 @@
|
|
|
6
6
|
from collections.abc import Mapping
|
|
7
7
|
from typing import Annotated, Generic, TypeVar
|
|
8
8
|
|
|
9
|
+
from dataops_sdk.schemas.meta import Meta
|
|
9
10
|
from pydantic import (
|
|
10
11
|
BaseModel,
|
|
11
12
|
Field,
|
|
12
13
|
JsonValue,
|
|
13
14
|
)
|
|
14
15
|
|
|
15
|
-
from dataops_sdk.schemas.meta import Meta
|
|
16
|
-
|
|
17
|
-
# 注意:用传统 TypeVar + Generic[T] 写法以兼容 Python 3.11+。
|
|
18
|
-
# PEP 695 ``class Foo[T](Bar)`` 语法需要 Python 3.12+,且其 default 参数需 3.13+,
|
|
19
|
-
# 故此处不使用 PEP 695 语法。
|
|
20
16
|
T = TypeVar("T")
|
|
21
17
|
|
|
22
18
|
|
|
@@ -60,6 +60,11 @@ from .dict_ import (
|
|
|
60
60
|
service_get_dict_detail_by_name,
|
|
61
61
|
service_list_dicts,
|
|
62
62
|
)
|
|
63
|
+
from .group import (
|
|
64
|
+
create_group_node,
|
|
65
|
+
get_group_by_name,
|
|
66
|
+
get_group_by_sapce,
|
|
67
|
+
)
|
|
63
68
|
from .hazard import (
|
|
64
69
|
service_clear_hazard_history_records,
|
|
65
70
|
service_dispatch_hazard_callback,
|
|
@@ -82,9 +87,13 @@ from .meta import (
|
|
|
82
87
|
release_ref_list,
|
|
83
88
|
release_ref_list_by_ref,
|
|
84
89
|
)
|
|
85
|
-
from .metrics import
|
|
90
|
+
from .metrics import (
|
|
91
|
+
service_get_metrics,
|
|
92
|
+
service_get_metrics_data_by_code,
|
|
93
|
+
service_list_metrics,
|
|
94
|
+
)
|
|
86
95
|
from .ref import service_ref_backward, service_ref_forward
|
|
87
|
-
from .report import service_get_report, service_list_reports
|
|
96
|
+
from .report import service_get_report, service_list_reports, servive_tree_report
|
|
88
97
|
from .skill import (
|
|
89
98
|
SkillPackValidationError,
|
|
90
99
|
service_delete_skill,
|
|
@@ -125,6 +134,7 @@ from .widget import (
|
|
|
125
134
|
service_get_widget_detail_by_code,
|
|
126
135
|
service_list_widgets,
|
|
127
136
|
service_update_widget,
|
|
137
|
+
servive_tree_widget,
|
|
128
138
|
)
|
|
129
139
|
from .workflow import (
|
|
130
140
|
service_get_workflow_by_code,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from collections.abc import Mapping, Sequence
|
|
2
|
+
from typing import Literal, cast
|
|
3
|
+
|
|
4
|
+
from dataops_sdk.exceptions import AuthenticationError
|
|
5
|
+
from dataops_sdk.schemas import (
|
|
6
|
+
GroupNode,
|
|
7
|
+
GroupNodeRefType,
|
|
8
|
+
GroupTree,
|
|
9
|
+
InnerMetaType,
|
|
10
|
+
MetaType,
|
|
11
|
+
)
|
|
12
|
+
from dataops_sdk.session import get_session, vaild_respone
|
|
13
|
+
from dataops_sdk.utils import encrypt_body
|
|
14
|
+
from pydantic import JsonValue
|
|
15
|
+
from pydantic_core import to_json
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_group_by_sapce(
|
|
19
|
+
space_name: str,
|
|
20
|
+
group_name: MetaType | InnerMetaType | str,
|
|
21
|
+
*,
|
|
22
|
+
auto_create: bool = False,
|
|
23
|
+
):
|
|
24
|
+
type_str = group_name.value if isinstance(group_name, (MetaType, InnerMetaType)) else group_name
|
|
25
|
+
url = f"/meta/group/getSpaceGroupTree/{space_name}/{type_str}"
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
with get_session() as session:
|
|
29
|
+
resp = session.get(url, params=dict(autoCreate=auto_create))
|
|
30
|
+
resp_body = vaild_respone(resp, True, _class=GroupTree)
|
|
31
|
+
return resp_body.data or []
|
|
32
|
+
except SystemExit as e:
|
|
33
|
+
raise AuthenticationError("认证失败,请先登录") from e
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_group_by_name(
|
|
37
|
+
group_name: MetaType | InnerMetaType | str,
|
|
38
|
+
*,
|
|
39
|
+
auto_create: bool = True,
|
|
40
|
+
) -> GroupTree:
|
|
41
|
+
type_str = group_name.value if isinstance(group_name, (MetaType, InnerMetaType)) else group_name
|
|
42
|
+
url = f"/meta/group/getGroupTree/{type_str}"
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
with get_session() as session:
|
|
46
|
+
resp = session.get(url, params=dict(autoCreate=auto_create))
|
|
47
|
+
resp_body = vaild_respone(resp, True, _class=GroupTree)
|
|
48
|
+
return resp_body.data or []
|
|
49
|
+
except SystemExit as e:
|
|
50
|
+
raise AuthenticationError("认证失败,请先登录") from e
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def create_group_node(
|
|
54
|
+
group_name: str,
|
|
55
|
+
node: GroupNode,
|
|
56
|
+
ref_node_id: str | None = None,
|
|
57
|
+
ref_type: GroupNodeRefType | None = None,
|
|
58
|
+
):
|
|
59
|
+
url = f"/meta/group/addGroupNode/{group_name}"
|
|
60
|
+
|
|
61
|
+
body = dict(addNode=node, refNodeId=ref_node_id, refType=ref_type)
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
with get_session() as session:
|
|
65
|
+
resp = session.post(url, content=to_json(encrypt_body(body)))
|
|
66
|
+
resp_body = vaild_respone(resp, True, _class=GroupTree)
|
|
67
|
+
return resp_body.data or []
|
|
68
|
+
except SystemExit as e:
|
|
69
|
+
raise AuthenticationError("认证失败,请先登录") from e
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""指标服务."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping, Sequence
|
|
4
|
+
|
|
5
|
+
from dataops_sdk.schemas import Meta, MetaBase, MetaType
|
|
6
|
+
from dataops_sdk.schemas.query import PageParam, SqlQueryParam
|
|
7
|
+
from dataops_sdk.services.meta import release_list_get_by_code, release_list_list
|
|
8
|
+
from dataops_sdk.session import get_session, vaild_respone
|
|
9
|
+
from dataops_sdk.utils import filter_nodes_by_pattern
|
|
10
|
+
from dataops_sdk.utils.utils import encrypt_body
|
|
11
|
+
from pydantic import JsonValue
|
|
12
|
+
from pydantic_core import to_json
|
|
13
|
+
|
|
14
|
+
__all__ = ["service_list_metrics", "service_get_metrics"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def service_list_metrics(query: str | None = None) -> list[MetaBase]:
|
|
18
|
+
"""列出指标(可选正则过滤).
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
query: 正则表达式,匹配 NAME / TITLE / REMARK / DIGEST
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
MetaBase 对象列表
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
DataOpsError: API 请求失败时
|
|
28
|
+
AuthenticationError: 未认证时
|
|
29
|
+
"""
|
|
30
|
+
nodes = release_list_list(MetaType.METRICS)
|
|
31
|
+
if query:
|
|
32
|
+
nodes = filter_nodes_by_pattern(nodes, query, include_digest=True)
|
|
33
|
+
return nodes
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def service_get_metrics(code: str) -> Meta[Mapping[str, JsonValue]]:
|
|
37
|
+
"""获取指标详情.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
code: 指标编码
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
指标元数据。`meta.data` 结构详见后端指标定义。
|
|
44
|
+
|
|
45
|
+
Raises:
|
|
46
|
+
NotFoundError: 找不到对应指标时.
|
|
47
|
+
DataOpsError: API 返回错误时.
|
|
48
|
+
AuthenticationError: 未认证或认证失败时.
|
|
49
|
+
"""
|
|
50
|
+
return release_list_get_by_code(MetaType.METRICS, code)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def service_get_metrics_data_by_code(
|
|
54
|
+
code: str,
|
|
55
|
+
page_param: PageParam | None = None,
|
|
56
|
+
query_param: SqlQueryParam | None = None,
|
|
57
|
+
dimensions: Sequence[str] | None = None,
|
|
58
|
+
) -> list[dict[str, JsonValue]]:
|
|
59
|
+
"""获取指标实际数据.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
code: 指标编码
|
|
63
|
+
page_param: 分页参数
|
|
64
|
+
query_param: 查询参数
|
|
65
|
+
dimensions: 维度字段名列表
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
查询 2026-04-18 的光缆数量
|
|
69
|
+
>>> data-ops-cli metrics data 1777544300561_98429 -c '{"name":"d_cycle_time","value":"2026-04-18"}'
|
|
70
|
+
按照统计日期维度查看光缆数量
|
|
71
|
+
>>> data-ops-cli metrics data 1777544300561_98429 -d d_cycle_time
|
|
72
|
+
"""
|
|
73
|
+
dimensions_body = None
|
|
74
|
+
if dimensions:
|
|
75
|
+
dimensions_body = [{"name": dimension} for dimension in dimensions]
|
|
76
|
+
body = {
|
|
77
|
+
"type": MetaType.METRICS,
|
|
78
|
+
"code": code,
|
|
79
|
+
"queryParam": query_param,
|
|
80
|
+
"pageParam": page_param,
|
|
81
|
+
"count": False,
|
|
82
|
+
"dimensions": dimensions_body,
|
|
83
|
+
}
|
|
84
|
+
with get_session() as session:
|
|
85
|
+
resp = session.post("/data/metrics/view/findData", content=to_json(encrypt_body(body)))
|
|
86
|
+
resp_body = vaild_respone(resp, check_data=True, _class=list[dict[str, JsonValue]])
|
|
87
|
+
return resp_body.data
|
|
@@ -7,12 +7,29 @@
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from dataops_sdk.schemas import MetaBase, MetaType, ReportMetaData
|
|
10
|
-
from dataops_sdk.services import
|
|
10
|
+
from dataops_sdk.services import (
|
|
11
|
+
get_group_by_sapce,
|
|
12
|
+
release_list_get_by_code,
|
|
13
|
+
release_list_list,
|
|
14
|
+
)
|
|
11
15
|
from dataops_sdk.utils import filter_nodes_by_pattern
|
|
12
16
|
|
|
13
17
|
__all__ = ["service_get_report", "service_list_reports"]
|
|
14
18
|
|
|
15
19
|
|
|
20
|
+
def servive_tree_report(space_code: str = "report"):
|
|
21
|
+
"""获取卡片树结构.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
卡片树结构
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
DataOpsError: API 请求失败时
|
|
28
|
+
AuthenticationError: 未认证时
|
|
29
|
+
"""
|
|
30
|
+
return get_group_by_sapce(space_code, MetaType.REPORT)
|
|
31
|
+
|
|
32
|
+
|
|
16
33
|
def service_list_reports(query: str | None = None) -> list[MetaBase]:
|
|
17
34
|
"""列出文档(可选正则过滤).
|
|
18
35
|
|
|
@@ -32,7 +49,7 @@ def service_list_reports(query: str | None = None) -> list[MetaBase]:
|
|
|
32
49
|
return nodes
|
|
33
50
|
|
|
34
51
|
|
|
35
|
-
def service_get_report(code: str)
|
|
52
|
+
def service_get_report(code: str):
|
|
36
53
|
"""读取文档内容并渲染为 Markdown.
|
|
37
54
|
|
|
38
55
|
Args:
|
|
@@ -278,6 +278,7 @@ def service_skill_upload(
|
|
|
278
278
|
file_path: str | Path,
|
|
279
279
|
sub_type: MetaSkillSubType,
|
|
280
280
|
title: str | None = None,
|
|
281
|
+
group_name: str | None = None,
|
|
281
282
|
ref_node_id: str | None = None,
|
|
282
283
|
ref_type: str | None = None,
|
|
283
284
|
) -> dict:
|
|
@@ -310,6 +311,8 @@ def service_skill_upload(
|
|
|
310
311
|
form_data["refNodeId"] = ref_node_id
|
|
311
312
|
if ref_type:
|
|
312
313
|
form_data["refType"] = ref_type
|
|
314
|
+
if group_name:
|
|
315
|
+
form_data["groupName"] = group_name
|
|
313
316
|
|
|
314
317
|
with (
|
|
315
318
|
open(path, "rb") as f,
|
|
@@ -16,6 +16,7 @@ from dataops_sdk.schemas import (
|
|
|
16
16
|
SqlQueryParam,
|
|
17
17
|
WidgetMetaData,
|
|
18
18
|
)
|
|
19
|
+
from dataops_sdk.services.group import get_group_by_name
|
|
19
20
|
from dataops_sdk.services.meta import (
|
|
20
21
|
release_list_get_by_code,
|
|
21
22
|
release_list_list,
|
|
@@ -26,6 +27,19 @@ from dataops_sdk.utils import encrypt_body
|
|
|
26
27
|
from pydantic_core import to_json
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
def servive_tree_widget():
|
|
31
|
+
"""获取卡片树结构.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
卡片树结构
|
|
35
|
+
|
|
36
|
+
Raises:
|
|
37
|
+
DataOpsError: API 请求失败时
|
|
38
|
+
AuthenticationError: 未认证时
|
|
39
|
+
"""
|
|
40
|
+
return get_group_by_name(MetaType.WIDGET)
|
|
41
|
+
|
|
42
|
+
|
|
29
43
|
def service_list_widgets(sub_types: list[str] | None = None) -> list[MetaBase]:
|
|
30
44
|
"""搜索卡片列表.
|
|
31
45
|
|
|
@@ -5,14 +5,13 @@ from contextvars import ContextVar
|
|
|
5
5
|
from typing import IO, Any, BinaryIO, Literal, overload
|
|
6
6
|
|
|
7
7
|
import httpx2
|
|
8
|
-
from pydantic import JsonValue, TypeAdapter, ValidationError
|
|
9
|
-
from pydantic_core import from_json, to_json
|
|
10
|
-
|
|
11
8
|
from dataops_sdk.constants import APPLICATION_FILE, USER_INFO_FILE
|
|
12
9
|
from dataops_sdk.exceptions import AuthenticationError, DataOpsError
|
|
13
10
|
from dataops_sdk.schemas import Application, DataOpsResponse, UserInfo
|
|
14
11
|
from dataops_sdk.schemas.common import DataVar
|
|
15
12
|
from dataops_sdk.utils import get_work_dir
|
|
13
|
+
from pydantic import JsonValue, TypeAdapter, ValidationError
|
|
14
|
+
from pydantic_core import from_json, to_json
|
|
16
15
|
|
|
17
16
|
__all__ = [
|
|
18
17
|
"set_request_auth",
|
|
@@ -223,7 +222,7 @@ def get_headers(strict: bool = True) -> dict[str, str]:
|
|
|
223
222
|
|
|
224
223
|
# 降级:原有的 CLI/环境变量/file 认证逻辑
|
|
225
224
|
fmind_auth_headers = os.getenv("FMIND_AUTH_HEADERS", None)
|
|
226
|
-
if fmind_auth_headers
|
|
225
|
+
if fmind_auth_headers:
|
|
227
226
|
headers = from_json(fmind_auth_headers)
|
|
228
227
|
assert isinstance(headers, dict), "FMIND_AUTH_HEADERS must be a JSON object string"
|
|
229
228
|
return headers
|
|
@@ -437,7 +436,7 @@ def post_multipart(
|
|
|
437
436
|
@overload
|
|
438
437
|
def vaild_respone(
|
|
439
438
|
respone: httpx2.Response, check_data: Literal[False] = False, *, _class: None = None
|
|
440
|
-
) -> DataOpsResponse: ...
|
|
439
|
+
) -> DataOpsResponse[JsonValue | None]: ...
|
|
441
440
|
|
|
442
441
|
|
|
443
442
|
@overload
|
|
@@ -478,7 +477,7 @@ def vaild_respone(
|
|
|
478
477
|
if check_data and response_body_json.get("data") is None:
|
|
479
478
|
raise DataOpsError(f"返回数据为空, 错误消息: {response_body_json.get('msg')}")
|
|
480
479
|
response_body = (
|
|
481
|
-
DataOpsResponse.model_validate(response_body_json)
|
|
480
|
+
DataOpsResponse[JsonValue | None].model_validate(response_body_json)
|
|
482
481
|
if _class is None
|
|
483
482
|
else DataOpsResponse[_class].model_validate(response_body_json)
|
|
484
483
|
)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import re
|
|
8
8
|
from base64 import b64decode, b64encode
|
|
9
|
-
from collections.abc import
|
|
9
|
+
from collections.abc import Mapping, Sequence
|
|
10
10
|
from copy import deepcopy
|
|
11
11
|
from os import PathLike
|
|
12
12
|
from pathlib import Path
|
|
@@ -14,11 +14,11 @@ from typing import Any, Literal, Protocol, TypeVar, cast
|
|
|
14
14
|
|
|
15
15
|
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
|
16
16
|
from cryptography.hazmat.primitives.padding import PKCS7
|
|
17
|
+
from dataops_sdk.constants import DEFAULT_SECRET_KEY
|
|
18
|
+
from dataops_sdk.schemas.meta import MetaBase
|
|
17
19
|
from pydantic import BaseModel, JsonValue
|
|
18
20
|
from pydantic_core import from_json, to_json
|
|
19
21
|
|
|
20
|
-
from dataops_sdk.constants import DEFAULT_SECRET_KEY
|
|
21
|
-
|
|
22
22
|
__all__ = [
|
|
23
23
|
"filter_nodes_by_pattern",
|
|
24
24
|
"get_work_dir",
|
|
@@ -28,24 +28,12 @@ __all__ = [
|
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class SearchableNode(Protocol):
|
|
32
|
-
"""Protocol for nodes that support regex search on name/title/remark/digest."""
|
|
33
|
-
|
|
34
|
-
name: str
|
|
35
|
-
title: str
|
|
36
|
-
remark: str | None
|
|
37
|
-
digest: str | None
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
T = TypeVar("T", bound=SearchableNode)
|
|
41
|
-
|
|
42
|
-
|
|
43
31
|
def filter_nodes_by_pattern(
|
|
44
|
-
nodes:
|
|
32
|
+
nodes: Sequence[MetaBase],
|
|
45
33
|
query: str,
|
|
46
34
|
*,
|
|
47
35
|
include_digest: bool = False,
|
|
48
|
-
) -> list[
|
|
36
|
+
) -> list[MetaBase]:
|
|
49
37
|
"""按正则表达式过滤节点,匹配 NAME、TITLE、REMARK 以及可选的 DIGEST 字段。
|
|
50
38
|
|
|
51
39
|
Args:
|
|
@@ -59,6 +59,7 @@ src/dataops_sdk/services/data_table.py
|
|
|
59
59
|
src/dataops_sdk/services/dataset.py
|
|
60
60
|
src/dataops_sdk/services/datasource.py
|
|
61
61
|
src/dataops_sdk/services/dict_.py
|
|
62
|
+
src/dataops_sdk/services/group.py
|
|
62
63
|
src/dataops_sdk/services/hazard.py
|
|
63
64
|
src/dataops_sdk/services/meta.py
|
|
64
65
|
src/dataops_sdk/services/metrics.py
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"""分组节点 (GroupNode) Schema 定义.
|
|
2
|
-
|
|
3
|
-
用于表示数据源目录树中的分组节点,包含节点的基本信息
|
|
4
|
-
和层级关系。
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from typing import Annotated
|
|
8
|
-
|
|
9
|
-
from pydantic import AliasChoices, BaseModel, Field
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class GroupNode(BaseModel):
|
|
13
|
-
"""分组节点模型.
|
|
14
|
-
|
|
15
|
-
用于表示数据源目录树中的分组节点,包含节点的基本信息
|
|
16
|
-
和层级关系。
|
|
17
|
-
|
|
18
|
-
Attributes:
|
|
19
|
-
code: 节点编码/ID(来自后端 ``id``)。
|
|
20
|
-
type: 节点类型。
|
|
21
|
-
subType: 子类型。
|
|
22
|
-
name: 节点名称。
|
|
23
|
-
label: 中文名称。
|
|
24
|
-
remark: 备注信息。
|
|
25
|
-
params: 扩展参数映射。
|
|
26
|
-
children: 子节点列表。
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
code: Annotated[str, Field(description="节点", validation_alias=AliasChoices("id"))]
|
|
30
|
-
type: Annotated[str, Field(description="类型")]
|
|
31
|
-
subType: Annotated[
|
|
32
|
-
str | None,
|
|
33
|
-
Field(
|
|
34
|
-
description="子类型",
|
|
35
|
-
validation_alias=AliasChoices("subType", "sub_type"),
|
|
36
|
-
exclude=True,
|
|
37
|
-
),
|
|
38
|
-
]
|
|
39
|
-
name: Annotated[str, Field(description="名称")]
|
|
40
|
-
label: Annotated[str, Field(description="中文名称")]
|
|
41
|
-
remark: Annotated[str | None, Field(description="备注")]
|
|
42
|
-
params: Annotated[
|
|
43
|
-
dict[str, str | int | float | bool | None] | None,
|
|
44
|
-
Field(description="参数", exclude=True),
|
|
45
|
-
]
|
|
46
|
-
children: Annotated[list["GroupNode"] | None, Field(description="子节点")]
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"""指标服务.
|
|
2
|
-
|
|
3
|
-
提供指标 (METRICS) 实体的列表与详情查询:
|
|
4
|
-
|
|
5
|
-
- :func:`service_list_metrics` 调用 ``release_list_list`` 全量拉取,再按正则过滤.
|
|
6
|
-
- :func:`service_get_metrics` 调用 ``release_list_get_by_code`` 获取单个指标的 Meta.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from collections.abc import Mapping
|
|
10
|
-
|
|
11
|
-
from pydantic import JsonValue
|
|
12
|
-
|
|
13
|
-
from dataops_sdk.schemas import Meta, MetaBase, MetaType
|
|
14
|
-
from dataops_sdk.services.meta import release_list_get_by_code, release_list_list
|
|
15
|
-
from dataops_sdk.utils import filter_nodes_by_pattern
|
|
16
|
-
|
|
17
|
-
__all__ = ["service_list_metrics", "service_get_metrics"]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def service_list_metrics(query: str | None = None) -> list[MetaBase]:
|
|
21
|
-
"""列出指标(可选正则过滤).
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
query: 正则表达式,匹配 NAME / TITLE / REMARK / DIGEST
|
|
25
|
-
|
|
26
|
-
Returns:
|
|
27
|
-
MetaBase 对象列表
|
|
28
|
-
|
|
29
|
-
Raises:
|
|
30
|
-
DataOpsError: API 请求失败时
|
|
31
|
-
AuthenticationError: 未认证时
|
|
32
|
-
"""
|
|
33
|
-
nodes = release_list_list(MetaType.METRICS)
|
|
34
|
-
if query:
|
|
35
|
-
nodes = filter_nodes_by_pattern(nodes, query, include_digest=True)
|
|
36
|
-
return nodes
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def service_get_metrics(code: str) -> Meta[Mapping[str, JsonValue]]:
|
|
40
|
-
"""获取指标详情.
|
|
41
|
-
|
|
42
|
-
Args:
|
|
43
|
-
code: 指标编码
|
|
44
|
-
|
|
45
|
-
Returns:
|
|
46
|
-
指标元数据。`meta.data` 结构详见后端指标定义。
|
|
47
|
-
|
|
48
|
-
Raises:
|
|
49
|
-
NotFoundError: 找不到对应指标时.
|
|
50
|
-
DataOpsError: API 返回错误时.
|
|
51
|
-
AuthenticationError: 未认证或认证失败时.
|
|
52
|
-
"""
|
|
53
|
-
return release_list_get_by_code(MetaType.METRICS, code)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_param.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_request.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.0 → dataops_sdk-0.4.1}/src/dataops_sdk/runner/schemas/nacos/naming_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|