dataops-sdk 0.3.5__tar.gz → 0.3.6__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.3.5 → dataops_sdk-0.3.6}/PKG-INFO +1 -1
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/__init__.py +1 -3
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/__init__.py +2 -0
- dataops_sdk-0.3.6/src/dataops_sdk/schemas/common.py +9 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/meta.py +8 -4
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/query.py +5 -7
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/skill.py +1 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/__init__.py +0 -2
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/data_table.py +106 -166
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/dict_.py +1 -3
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/meta.py +32 -149
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/table.py +167 -215
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/widget.py +2 -2
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/session.py +66 -6
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/utils/utils.py +2 -2
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk.egg-info/SOURCES.txt +1 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/pyproject.toml +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/setup.cfg +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/exceptions.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/datasource_factory.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/common.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/nacos.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/alarm.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/api.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/data_table.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/datasource.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/dict_.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/enums.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/group.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/hazard.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/report.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/table.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/user.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/widget.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/schemas/workflow.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/alarm.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/api.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/auth.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/dataset.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/datasource.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/hazard.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/metrics.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/ref.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/report.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/skill.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/services/workflow.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/builder.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/models.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/render_utils.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/renderers.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/tiptap/tool.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/utils/__init__.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/utils/common.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk/utils/log.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk.egg-info/requires.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/src/dataops_sdk.egg-info/top_level.txt +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/tests/test_constants.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/tests/test_exceptions.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/tests/test_session.py +0 -0
- {dataops_sdk-0.3.5 → dataops_sdk-0.3.6}/tests/test_utils.py +0 -0
|
@@ -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.3.
|
|
110
|
+
__version__ = "0.3.6"
|
|
@@ -28,6 +28,7 @@ from .meta import (
|
|
|
28
28
|
MetaCreate,
|
|
29
29
|
MetaRef,
|
|
30
30
|
MetaUpdate,
|
|
31
|
+
MetaPageData,
|
|
31
32
|
)
|
|
32
33
|
from .query import PageParam, SqlCondition, SqlQueryParam, SqlSort
|
|
33
34
|
from .report import ReportMeta, ReportMetaData
|
|
@@ -43,3 +44,4 @@ from .table import (
|
|
|
43
44
|
from .user import Application, UserInfo
|
|
44
45
|
from .widget import WidgetMeta, WidgetMetaData
|
|
45
46
|
from .workflow import DataWorkflow, MetaWorkflow
|
|
47
|
+
from .common import DataOpsResponse
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from typing_extensions import Annotated, TypeVar, Generic
|
|
2
|
+
from pydantic import BaseModel, JsonValue, Field, NonNegativeInt
|
|
3
|
+
|
|
4
|
+
DataVar = TypeVar("DataVar", default=JsonValue | None)
|
|
5
|
+
|
|
6
|
+
class DataOpsResponse(BaseModel, Generic[DataVar]):
|
|
7
|
+
code: Annotated[NonNegativeInt, Field(description="响应码")]
|
|
8
|
+
msg: Annotated[str | None, Field(description="响应消息")]
|
|
9
|
+
data: Annotated[DataVar, Field(description="响应数据")]
|
|
@@ -127,10 +127,7 @@ class MetaBase(BaseModel):
|
|
|
127
127
|
] = None
|
|
128
128
|
spaceName: Annotated[
|
|
129
129
|
str | None,
|
|
130
|
-
Field(
|
|
131
|
-
description="空间名称",
|
|
132
|
-
validate_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME"),
|
|
133
|
-
),
|
|
130
|
+
Field(description="空间名称", validation_alias=AliasChoices("spaceName", "space_name", "SPACE_NAME")),
|
|
134
131
|
] = None
|
|
135
132
|
|
|
136
133
|
subSystem: Annotated[
|
|
@@ -339,3 +336,10 @@ class MetaUpdate(BaseModel, Generic[META_DATA_TYPE]):
|
|
|
339
336
|
data: Annotated[
|
|
340
337
|
META_DATA_TYPE | None, Field(description="元数据", exclude_if=lambda x: x is None)
|
|
341
338
|
] = None
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
class MetaPageData(BaseModel):
|
|
342
|
+
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"))]
|
|
345
|
+
records: list[MetaBase] = Field(default_factory=list, description="数据")
|
|
@@ -32,6 +32,7 @@ class SqlConditionBase(BaseModel):
|
|
|
32
32
|
|
|
33
33
|
name: Annotated[str, Field(description="字段名")]
|
|
34
34
|
value: Annotated[Any, Field(description="字段值")]
|
|
35
|
+
expression: Annotated[SqlExpression, Field(description="条件表达式")] = SqlExpression.EQ
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
class SqlCondition(SqlConditionBase):
|
|
@@ -45,7 +46,6 @@ class SqlCondition(SqlConditionBase):
|
|
|
45
46
|
"""
|
|
46
47
|
|
|
47
48
|
alias: Annotated[str | None, Field(description="表别名")] = None
|
|
48
|
-
expression: Annotated[SqlExpression, Field(description="条件表达式")]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class SqlSort(BaseModel):
|
|
@@ -85,7 +85,7 @@ class SqlFilter(BaseModel):
|
|
|
85
85
|
Returns:
|
|
86
86
|
SqlFilter: 对应的过滤器实例。
|
|
87
87
|
"""
|
|
88
|
-
return cls(condition=SqlConditionBase(name=name, value=value))
|
|
88
|
+
return cls(condition=SqlConditionBase(name=name, value=value, expression=SqlExpression.EQ))
|
|
89
89
|
|
|
90
90
|
@classmethod
|
|
91
91
|
def ne(cls, name: str, value: Any):
|
|
@@ -222,11 +222,9 @@ class SqlQueryParam(BaseModel):
|
|
|
222
222
|
"""
|
|
223
223
|
|
|
224
224
|
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)]
|
|
225
|
+
conditionList: list[SqlCondition] = Field(description="条件列表", default_factory=list)
|
|
226
|
+
sorts: list[SqlSort] = Field(description="排序列表", default_factory=list)
|
|
227
|
+
varMap: dict[str, JsonValue] = Field(description="变量映射", default_factory=dict)
|
|
230
228
|
|
|
231
229
|
def add(self, *condition: SqlCondition):
|
|
232
230
|
"""追加条件.
|
|
@@ -113,9 +113,7 @@ from .table import (
|
|
|
113
113
|
service_get_table_detail_by_code,
|
|
114
114
|
service_get_table_detail_by_name,
|
|
115
115
|
service_get_table_list_by_code,
|
|
116
|
-
service_get_table_record_by_id,
|
|
117
116
|
service_get_table_records_by_code,
|
|
118
|
-
service_get_table_reference_list,
|
|
119
117
|
service_get_table_total_by_code,
|
|
120
118
|
service_list_tables,
|
|
121
119
|
service_update_table_record_by_id,
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"""多维表格 (DataTable) 的 SDK 服务层.
|
|
2
|
-
|
|
3
|
-
纯 Python 接口,返回原始 Pydantic 模型,不依赖 typer/Rich。
|
|
4
2
|
"""
|
|
5
3
|
|
|
6
4
|
from __future__ import annotations
|
|
7
5
|
|
|
8
|
-
import warnings
|
|
9
6
|
from collections.abc import Mapping, Sequence
|
|
7
|
+
from typing_extensions import cast
|
|
10
8
|
|
|
11
9
|
from pydantic import JsonValue, TypeAdapter
|
|
10
|
+
from pydantic_core import to_json
|
|
12
11
|
|
|
13
12
|
from dataops_sdk.schemas import (
|
|
14
13
|
DataTableData,
|
|
@@ -23,18 +22,8 @@ from dataops_sdk.services.meta import (
|
|
|
23
22
|
release_list_get_by_code,
|
|
24
23
|
release_list_get_by_name,
|
|
25
24
|
)
|
|
26
|
-
from dataops_sdk.
|
|
27
|
-
|
|
28
|
-
service_delete_table_record_by_id,
|
|
29
|
-
service_delete_table_record_by_id_list,
|
|
30
|
-
service_get_table_list_by_code,
|
|
31
|
-
service_get_table_record_by_id,
|
|
32
|
-
service_get_table_records_by_code,
|
|
33
|
-
service_get_table_reference_list,
|
|
34
|
-
service_get_table_total_by_code,
|
|
35
|
-
service_update_table_record_by_id,
|
|
36
|
-
service_update_table_record_by_id_list,
|
|
37
|
-
)
|
|
25
|
+
from dataops_sdk.session import get_headers, get_session, vaild_respone
|
|
26
|
+
from dataops_sdk.utils import encrypt_body
|
|
38
27
|
|
|
39
28
|
__all__ = [
|
|
40
29
|
"service_get_data_table_by_name",
|
|
@@ -53,15 +42,6 @@ __all__ = [
|
|
|
53
42
|
]
|
|
54
43
|
|
|
55
44
|
|
|
56
|
-
def _warn_deprecated(old_name: str, new_name: str) -> None:
|
|
57
|
-
"""提示调用方迁移到 ``table`` SDK 的同等服务。"""
|
|
58
|
-
warnings.warn(
|
|
59
|
-
f"{old_name} 已弃用,请改用 dataops_sdk.services.table.{new_name}",
|
|
60
|
-
DeprecationWarning,
|
|
61
|
-
stacklevel=3,
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
|
|
65
45
|
def service_get_data_table_by_name(datasource: str, name: str) -> Meta[DataTableData]:
|
|
66
46
|
"""根据名称获取多维表格.
|
|
67
47
|
|
|
@@ -99,6 +79,26 @@ def service_get_data_table_by_code(code: str) -> Meta[DataTableData]:
|
|
|
99
79
|
return release_list_get_by_code(MetaType.DATA_TABLE, code, _class=DataTableData)
|
|
100
80
|
|
|
101
81
|
|
|
82
|
+
def service_create_data_table(meta: MetaCreate[DataTableData]) -> Meta[DataTableData]:
|
|
83
|
+
"""创建多维表格.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
meta: 要创建的多维表格元数据对象.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
后端返回的 ``data`` 字典.
|
|
90
|
+
|
|
91
|
+
Raises:
|
|
92
|
+
FailedToCreateError: 创建失败时.
|
|
93
|
+
DataOpsError: API 返回错误时.
|
|
94
|
+
AuthenticationError: 未认证或认证失败时.
|
|
95
|
+
"""
|
|
96
|
+
return release_list_create(
|
|
97
|
+
meta,
|
|
98
|
+
_class=DataTableData,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
102
|
def service_get_data_table_data_by_code(
|
|
103
103
|
code: str,
|
|
104
104
|
page_param: PageParam | None = None,
|
|
@@ -107,7 +107,6 @@ def service_get_data_table_data_by_code(
|
|
|
107
107
|
translate: bool = True,
|
|
108
108
|
*,
|
|
109
109
|
meta: Meta[DataTableData] | None = None,
|
|
110
|
-
_warn: bool = True,
|
|
111
110
|
) -> list[Mapping[str, JsonValue]]:
|
|
112
111
|
"""根据编码获取多维表格的数据.
|
|
113
112
|
|
|
@@ -115,7 +114,6 @@ def service_get_data_table_data_by_code(
|
|
|
115
114
|
code: 数据表编码
|
|
116
115
|
page_param: 分页参数,默认为 PageParam()(第一页,每页 20 条)
|
|
117
116
|
query_param: 查询过滤条件,默认为 SqlQueryParam()
|
|
118
|
-
datasource: 数据源标识,指定从哪个子系统查询(可选)
|
|
119
117
|
show_invisible: 是否显示未标记 visible 的字段,默认为 False
|
|
120
118
|
translate: 是否对 DICT 类型字段进行值翻译,默认为 True
|
|
121
119
|
|
|
@@ -127,13 +125,8 @@ def service_get_data_table_data_by_code(
|
|
|
127
125
|
DataOpsError: API 返回错误时
|
|
128
126
|
AuthenticationError: 未认证或认证失败时
|
|
129
127
|
"""
|
|
130
|
-
if
|
|
131
|
-
|
|
132
|
-
"service_get_data_table_data_by_code",
|
|
133
|
-
"service_get_table_records_by_code"
|
|
134
|
-
if translate
|
|
135
|
-
else "service_get_table_list_by_code",
|
|
136
|
-
)
|
|
128
|
+
url = f"/data/table/records/{code}" if translate else f"/data/table/list/{code}"
|
|
129
|
+
|
|
137
130
|
|
|
138
131
|
if page_param is None:
|
|
139
132
|
page_param = PageParam()
|
|
@@ -141,24 +134,19 @@ def service_get_data_table_data_by_code(
|
|
|
141
134
|
query_param = SqlQueryParam()
|
|
142
135
|
|
|
143
136
|
meta = meta or service_get_data_table_by_code(code)
|
|
137
|
+
assert meta.data, "元数据为空 is None"
|
|
138
|
+
|
|
139
|
+
with get_session(timeout=15, sub_system=meta.subSystem) as session:
|
|
140
|
+
resp = session.post(url, content=to_json(encrypt_body(dict(pageParam=page_param, queryParam=query_param, code=code))))
|
|
141
|
+
body = vaild_respone(resp, True)
|
|
144
142
|
|
|
145
143
|
adapter = TypeAdapter(list[Mapping[str, JsonValue]])
|
|
146
144
|
|
|
147
145
|
if translate:
|
|
148
|
-
|
|
149
|
-
code,
|
|
150
|
-
page_param=page_param,
|
|
151
|
-
query_param=query_param,
|
|
152
|
-
datasource=meta.subSystem,
|
|
153
|
-
)
|
|
154
|
-
datas = adapter.validate_python(records_body.get("list", []))
|
|
146
|
+
datas = adapter.validate_python(body.data.get("list", []))
|
|
155
147
|
else:
|
|
156
|
-
datas =
|
|
157
|
-
|
|
158
|
-
page_param=page_param,
|
|
159
|
-
query_param=query_param,
|
|
160
|
-
datasource=meta.subSystem,
|
|
161
|
-
)
|
|
148
|
+
datas = adapter.validate_python(body.data or [])
|
|
149
|
+
|
|
162
150
|
|
|
163
151
|
# 过滤不需要显示的字段,建立字段名映射
|
|
164
152
|
all_fields = meta.data.fields
|
|
@@ -170,13 +158,12 @@ def service_get_data_table_data_by_code(
|
|
|
170
158
|
dict_fields_name: set[str] = set()
|
|
171
159
|
dict_field_map: dict[str, dict[str, str]] = {}
|
|
172
160
|
if translate:
|
|
173
|
-
relations =
|
|
161
|
+
relations = body.data.get("data", {}).get("relations", {})
|
|
174
162
|
dict_fields = [f for f in all_fields if f.type == MetaType.DICT.value]
|
|
175
163
|
if not isinstance(relations, Mapping):
|
|
176
164
|
relations = {}
|
|
177
165
|
for key, relation in relations.items():
|
|
178
166
|
if key.startswith("dict"):
|
|
179
|
-
# 查找匹配的字段(通过 ref.code 匹配)
|
|
180
167
|
field = next(
|
|
181
168
|
(f for f in dict_fields if f.type_ext.get("ref", {}).get("code")),
|
|
182
169
|
None,
|
|
@@ -188,7 +175,7 @@ def service_get_data_table_data_by_code(
|
|
|
188
175
|
}
|
|
189
176
|
dict_fields_name.add(field.dbName)
|
|
190
177
|
|
|
191
|
-
#
|
|
178
|
+
# 单次遍历完成所有转换
|
|
192
179
|
datas = [
|
|
193
180
|
{
|
|
194
181
|
field_name_map[k_lower]: (
|
|
@@ -213,9 +200,6 @@ def service_get_data_table_data_by_name(
|
|
|
213
200
|
):
|
|
214
201
|
"""按数据源与名称获取多维表格数据.
|
|
215
202
|
|
|
216
|
-
内部先按 ``datasource`` / ``name`` 获取 meta 对象,再委托给
|
|
217
|
-
:func:`service_get_data_table_data_by_code` 完成实际查询并复用 meta 提升性能.
|
|
218
|
-
|
|
219
203
|
Args:
|
|
220
204
|
datasource: 数据源.
|
|
221
205
|
name: 多维表格名称.
|
|
@@ -232,10 +216,6 @@ def service_get_data_table_data_by_name(
|
|
|
232
216
|
DataOpsError: API 返回错误时.
|
|
233
217
|
AuthenticationError: 未认证或认证失败时.
|
|
234
218
|
"""
|
|
235
|
-
_warn_deprecated(
|
|
236
|
-
"service_get_data_table_data_by_name",
|
|
237
|
-
"service_get_table_records_by_code" if translate else "service_get_table_list_by_code",
|
|
238
|
-
)
|
|
239
219
|
meta = service_get_data_table_by_name(datasource, name)
|
|
240
220
|
return service_get_data_table_data_by_code(
|
|
241
221
|
meta.code,
|
|
@@ -244,67 +224,9 @@ def service_get_data_table_data_by_name(
|
|
|
244
224
|
show_invisible=show_invisible,
|
|
245
225
|
translate=translate,
|
|
246
226
|
meta=meta,
|
|
247
|
-
_warn=False,
|
|
248
|
-
)
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
def service_create_data_table(meta: MetaCreate[DataTableData]) -> dict:
|
|
252
|
-
"""创建多维表格.
|
|
253
|
-
|
|
254
|
-
Args:
|
|
255
|
-
meta: 要创建的多维表格元数据对象.
|
|
256
|
-
|
|
257
|
-
Returns:
|
|
258
|
-
后端返回的 ``data`` 字典.
|
|
259
|
-
|
|
260
|
-
Raises:
|
|
261
|
-
FailedToCreateError: 创建失败时.
|
|
262
|
-
DataOpsError: API 返回错误时.
|
|
263
|
-
AuthenticationError: 未认证或认证失败时.
|
|
264
|
-
"""
|
|
265
|
-
return release_list_create(
|
|
266
|
-
meta,
|
|
267
|
-
_class=DataTableData,
|
|
268
227
|
)
|
|
269
228
|
|
|
270
229
|
|
|
271
|
-
# def service_update_data_table(
|
|
272
|
-
# code: str,
|
|
273
|
-
# title: str,
|
|
274
|
-
# data: dict,
|
|
275
|
-
# *,
|
|
276
|
-
# name: str | None = None,
|
|
277
|
-
# cuid: str | None = None,
|
|
278
|
-
# sub_type: str | None = None,
|
|
279
|
-
# ) -> dict:
|
|
280
|
-
# """更新多维表格.
|
|
281
|
-
|
|
282
|
-
# Args:
|
|
283
|
-
# code: 多维表格编码
|
|
284
|
-
# title: 中文标题
|
|
285
|
-
# data: meta.data 字典,结构参考 DataTableData
|
|
286
|
-
# name: 名称 (默认为 code)
|
|
287
|
-
# cuid: 元数据 CUID (更新时必传)
|
|
288
|
-
# sub_type: 子类型 (可选)
|
|
289
|
-
|
|
290
|
-
# Returns:
|
|
291
|
-
# API 返回的 data 字典
|
|
292
|
-
|
|
293
|
-
# Raises:
|
|
294
|
-
# DataOpsError: API 返回错误时
|
|
295
|
-
# AuthenticationError: 未认证或认证失败时
|
|
296
|
-
# """
|
|
297
|
-
# return release_list_update(
|
|
298
|
-
# MetaType.DATA_TABLE,
|
|
299
|
-
# code=code,
|
|
300
|
-
# name=name or code,
|
|
301
|
-
# title=title,
|
|
302
|
-
# data=data,
|
|
303
|
-
# cuid=cuid,
|
|
304
|
-
# sub_type=sub_type,
|
|
305
|
-
# )
|
|
306
|
-
|
|
307
|
-
|
|
308
230
|
def service_get_data_table_total(
|
|
309
231
|
code: str,
|
|
310
232
|
query_param: SqlQueryParam | None = None,
|
|
@@ -325,22 +247,18 @@ def service_get_data_table_total(
|
|
|
325
247
|
DataOpsError: API 返回错误时
|
|
326
248
|
AuthenticationError: 未认证或认证失败时
|
|
327
249
|
"""
|
|
328
|
-
_warn_deprecated(
|
|
329
|
-
"service_get_data_table_total",
|
|
330
|
-
"service_get_table_total_by_code",
|
|
331
|
-
)
|
|
332
250
|
meta = meta or service_get_data_table_by_code(code)
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
251
|
+
if query_param is None:
|
|
252
|
+
query_param = SqlQueryParam()
|
|
253
|
+
body = {
|
|
254
|
+
"queryParam": query_param,
|
|
255
|
+
}
|
|
256
|
+
with get_session(timeout=15, sub_system=meta.subSystem) as session:
|
|
257
|
+
resp = session.post(f"/data/table/total/{code}", content=to_json(encrypt_body(dict(queryParam=query_param))))
|
|
258
|
+
body = vaild_respone(resp, True)
|
|
259
|
+
return body.data or 0 # pyright: ignore[reportReturnType]
|
|
338
260
|
|
|
339
261
|
|
|
340
|
-
@warnings.deprecated(
|
|
341
|
-
"Use dataops_sdk.services.table.service_get_table_reference_list instead.",
|
|
342
|
-
stacklevel=2,
|
|
343
|
-
)
|
|
344
262
|
def service_get_data_table_reference_list(
|
|
345
263
|
code: str,
|
|
346
264
|
subcode: str,
|
|
@@ -362,18 +280,17 @@ def service_get_data_table_reference_list(
|
|
|
362
280
|
DataOpsError: API 返回错误时
|
|
363
281
|
AuthenticationError: 未认证或认证失败时
|
|
364
282
|
"""
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
)
|
|
283
|
+
meta = service_get_data_table_by_code(code)
|
|
284
|
+
body = {
|
|
285
|
+
"pageParam": page_param or PageParam(),
|
|
286
|
+
"queryParam": query_param or SqlQueryParam(),
|
|
287
|
+
}
|
|
288
|
+
with get_session(timeout=15, sub_system=meta.subSystem) as session:
|
|
289
|
+
resp = session.post(f"/data/table/referenceList/{code}/{subcode}", content=to_json(encrypt_body(body)))
|
|
290
|
+
body = vaild_respone(resp, True, _class=list[str])
|
|
291
|
+
return body.data or []
|
|
371
292
|
|
|
372
293
|
|
|
373
|
-
@warnings.deprecated(
|
|
374
|
-
"Use dataops_sdk.services.table.service_get_table_record_by_id instead.",
|
|
375
|
-
stacklevel=2,
|
|
376
|
-
)
|
|
377
294
|
def service_get_data_table_record_by_id(code: str, id: str) -> dict[str, JsonValue]:
|
|
378
295
|
"""根据 ID 获取多维表格单条记录.
|
|
379
296
|
|
|
@@ -389,7 +306,10 @@ def service_get_data_table_record_by_id(code: str, id: str) -> dict[str, JsonVal
|
|
|
389
306
|
DataOpsError: API 返回错误时
|
|
390
307
|
AuthenticationError: 未认证或认证失败时
|
|
391
308
|
"""
|
|
392
|
-
|
|
309
|
+
with get_session() as session:
|
|
310
|
+
resp = session.get(f"/data/table/getById/{code}/{id}")
|
|
311
|
+
body = vaild_respone(resp, True, _class=dict[str, JsonValue])
|
|
312
|
+
return body.data or {}
|
|
393
313
|
|
|
394
314
|
|
|
395
315
|
def service_create_data_table_record(
|
|
@@ -412,23 +332,20 @@ def service_create_data_table_record(
|
|
|
412
332
|
DataOpsError: API 返回错误时
|
|
413
333
|
AuthenticationError: 未认证或认证失败时
|
|
414
334
|
"""
|
|
415
|
-
_warn_deprecated(
|
|
416
|
-
"service_create_data_table_record",
|
|
417
|
-
"service_create_table_record",
|
|
418
|
-
)
|
|
419
335
|
if meta is None:
|
|
420
336
|
meta = service_get_data_table_by_code(code)
|
|
421
|
-
|
|
337
|
+
with get_session(sub_system=meta.subSystem) as session:
|
|
338
|
+
resp = session.post(f"/data/table/create/{code}", content=to_json(encrypt_body(dict(data))))
|
|
339
|
+
body = vaild_respone(resp, True)
|
|
340
|
+
return str(body.data) if body.data else ""
|
|
422
341
|
|
|
423
342
|
|
|
424
|
-
@warnings.deprecated(
|
|
425
|
-
"Use dataops_sdk.services.table.service_update_table_record_by_id instead.",
|
|
426
|
-
stacklevel=2,
|
|
427
|
-
)
|
|
428
343
|
def service_update_data_table_record_by_id(
|
|
429
344
|
code: str,
|
|
430
345
|
id: str,
|
|
431
346
|
data: Mapping[str, JsonValue],
|
|
347
|
+
*,
|
|
348
|
+
meta: Meta[DataTableData] | None = None,
|
|
432
349
|
) -> bool:
|
|
433
350
|
"""按 ID 更新多维表格记录.
|
|
434
351
|
|
|
@@ -436,6 +353,7 @@ def service_update_data_table_record_by_id(
|
|
|
436
353
|
code: 数据表编码
|
|
437
354
|
id: 主键 ID
|
|
438
355
|
data: 要更新的字段数据
|
|
356
|
+
meta: 多维表格元数据对象(可选,用于获取 subSystem)
|
|
439
357
|
|
|
440
358
|
Returns:
|
|
441
359
|
更新是否成功
|
|
@@ -444,24 +362,28 @@ def service_update_data_table_record_by_id(
|
|
|
444
362
|
DataOpsError: API 返回错误时
|
|
445
363
|
AuthenticationError: 未认证或认证失败时
|
|
446
364
|
"""
|
|
447
|
-
|
|
365
|
+
if meta is None:
|
|
366
|
+
meta = service_get_data_table_by_code(code)
|
|
367
|
+
with get_session(sub_system=meta.subSystem) as session:
|
|
368
|
+
resp = session.post(f"/data/table/updateById/{code}/{id}", content=to_json(encrypt_body(dict(data))))
|
|
369
|
+
body = vaild_respone(resp, True)
|
|
370
|
+
return cast(bool, body.data)
|
|
448
371
|
|
|
449
372
|
|
|
450
|
-
@warnings.deprecated(
|
|
451
|
-
"Use dataops_sdk.services.table.service_update_table_record_by_id_list instead.",
|
|
452
|
-
stacklevel=2,
|
|
453
|
-
)
|
|
454
373
|
def service_update_data_table_record_by_id_list(
|
|
455
374
|
code: str,
|
|
456
|
-
|
|
375
|
+
ids: Sequence[str],
|
|
457
376
|
data: Mapping[str, JsonValue],
|
|
377
|
+
*,
|
|
378
|
+
meta: Meta[DataTableData] | None = None,
|
|
458
379
|
) -> bool:
|
|
459
380
|
"""按 ID 列表批量更新多维表格记录.
|
|
460
381
|
|
|
461
382
|
Args:
|
|
462
383
|
code: 数据表编码
|
|
463
|
-
|
|
384
|
+
ids: 主键 ID 列表
|
|
464
385
|
data: 要更新的字段数据
|
|
386
|
+
meta: 多维表格元数据对象(可选,用于获取 subSystem)
|
|
465
387
|
|
|
466
388
|
Returns:
|
|
467
389
|
更新是否成功
|
|
@@ -470,19 +392,27 @@ def service_update_data_table_record_by_id_list(
|
|
|
470
392
|
DataOpsError: API 返回错误时
|
|
471
393
|
AuthenticationError: 未认证或认证失败时
|
|
472
394
|
"""
|
|
473
|
-
|
|
395
|
+
if meta is None:
|
|
396
|
+
meta = service_get_data_table_by_code(code)
|
|
397
|
+
body = {"idList": ids, "data": data}
|
|
398
|
+
with get_session(sub_system=meta.subSystem) as session:
|
|
399
|
+
resp = session.post(f"/data/table/updateByIdList/{code}", content=to_json(encrypt_body(dict(body))))
|
|
400
|
+
body = vaild_respone(resp, True)
|
|
401
|
+
return cast(bool, body.data)
|
|
474
402
|
|
|
475
403
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
404
|
+
def service_delete_data_table_record_by_id(
|
|
405
|
+
code: str,
|
|
406
|
+
id: str,
|
|
407
|
+
*,
|
|
408
|
+
meta: Meta[DataTableData] | None = None,
|
|
409
|
+
) -> bool:
|
|
481
410
|
"""按 ID 删除多维表格单条记录.
|
|
482
411
|
|
|
483
412
|
Args:
|
|
484
413
|
code: 数据表编码
|
|
485
414
|
id: 主键 ID
|
|
415
|
+
meta: 多维表格元数据对象(可选,用于获取 subSystem)
|
|
486
416
|
|
|
487
417
|
Returns:
|
|
488
418
|
删除是否成功
|
|
@@ -491,22 +421,26 @@ def service_delete_data_table_record_by_id(code: str, id: str) -> bool:
|
|
|
491
421
|
DataOpsError: API 返回错误时
|
|
492
422
|
AuthenticationError: 未认证或认证失败时
|
|
493
423
|
"""
|
|
494
|
-
|
|
424
|
+
if meta is None:
|
|
425
|
+
meta = service_get_data_table_by_code(code)
|
|
426
|
+
with get_session(sub_system=meta.subSystem) as session:
|
|
427
|
+
resp = session.post(f"/data/table/deleteById/{code}/{id}")
|
|
428
|
+
body = vaild_respone(resp, True)
|
|
429
|
+
return cast(bool, body.data)
|
|
495
430
|
|
|
496
431
|
|
|
497
|
-
@warnings.deprecated(
|
|
498
|
-
"Use dataops_sdk.services.table.service_delete_table_record_by_id_list instead.",
|
|
499
|
-
stacklevel=2,
|
|
500
|
-
)
|
|
501
432
|
def service_delete_data_table_record_by_id_list(
|
|
502
433
|
code: str,
|
|
503
434
|
id_list: Sequence[str],
|
|
435
|
+
*,
|
|
436
|
+
meta: Meta[DataTableData] | None = None,
|
|
504
437
|
) -> bool:
|
|
505
438
|
"""按 ID 列表批量删除多维表格记录.
|
|
506
439
|
|
|
507
440
|
Args:
|
|
508
441
|
code: 数据表编码
|
|
509
442
|
id_list: 主键 ID 列表
|
|
443
|
+
meta: 多维表格元数据对象(可选,用于获取 subSystem)
|
|
510
444
|
|
|
511
445
|
Returns:
|
|
512
446
|
删除是否成功
|
|
@@ -515,4 +449,10 @@ def service_delete_data_table_record_by_id_list(
|
|
|
515
449
|
DataOpsError: API 返回错误时
|
|
516
450
|
AuthenticationError: 未认证或认证失败时
|
|
517
451
|
"""
|
|
518
|
-
|
|
452
|
+
if meta is None:
|
|
453
|
+
meta = service_get_data_table_by_code(code)
|
|
454
|
+
body = dict(idList=id_list)
|
|
455
|
+
with get_session(sub_system=meta.subSystem) as session:
|
|
456
|
+
resp = session.post(f"/data/table/deleteByIdList/{code}", content=to_json(encrypt_body(body)))
|
|
457
|
+
body = vaild_respone(resp, True)
|
|
458
|
+
return cast(bool, body.data)
|
|
@@ -30,9 +30,7 @@ def service_list_dicts(datasource: str) -> list[MetaBase]:
|
|
|
30
30
|
DataOpsError: API 请求失败时
|
|
31
31
|
AuthenticationError: 未认证时
|
|
32
32
|
"""
|
|
33
|
-
|
|
34
|
-
filters = (SqlQueryParam().add_eq("sub_system", datasource, "mrl"),)
|
|
35
|
-
return release_list_list(MetaType.DICT, filters=filters, headers=headers)
|
|
33
|
+
return release_list_list(MetaType.DICT, datasource=datasource)
|
|
36
34
|
|
|
37
35
|
|
|
38
36
|
def service_get_dict_detail_by_name(datasource: str, name: str) -> Meta[DataDict]:
|