dataops-sdk 0.4.5__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/PKG-INFO +1 -1
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/__init__.py +1 -1
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/data_table.py +3 -1
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/data_table.py +1 -3
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/ontology.py +8 -10
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/workflow.py +12 -4
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/README.md +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/pyproject.toml +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/setup.cfg +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/constants.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/exceptions.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/datasource_factory.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/common.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/nacos.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/utils/websocket_client.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/alarm.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/api.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/common.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/datasource.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/dict_.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/enums.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/group.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/hazard.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/meta.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/ontology.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/query.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/report.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/skill.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/table.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/tag.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/user.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/widget.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/schemas/workflow.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/alarm.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/api.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/auth.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/dataset.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/datasource.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/dict_.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/group.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/hazard.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/meta.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/metrics.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/ref.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/report.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/skill.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/table.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/tag.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/services/widget.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/session.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/builder.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/constants.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/models.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/render_utils.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/renderers.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/tiptap/tool.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/utils/__init__.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/utils/common.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/utils/log.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/utils/utils.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk.egg-info/SOURCES.txt +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk.egg-info/requires.txt +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk.egg-info/top_level.txt +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/tests/test_constants.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/tests/test_exceptions.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/tests/test_session.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/tests/test_utils.py +0 -0
- {dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/tests/test_websocket_client.py +0 -0
|
@@ -469,7 +469,9 @@ class DataTableField(BaseModel):
|
|
|
469
469
|
readonly: Annotated[bool | None, Field(description="是否只读")] = None
|
|
470
470
|
join_key: Annotated[
|
|
471
471
|
bool | None,
|
|
472
|
-
Field(
|
|
472
|
+
Field(
|
|
473
|
+
description="是否为附属表关联键", validation_alias=AliasChoices("joinKey", "join_key")
|
|
474
|
+
),
|
|
473
475
|
] = None
|
|
474
476
|
maintain_permission: Annotated[
|
|
475
477
|
str | None,
|
|
@@ -204,9 +204,7 @@ def service_get_data_table_data_ext_by_code(
|
|
|
204
204
|
key = field.dbName or field.name
|
|
205
205
|
return key.lower() if key else None
|
|
206
206
|
|
|
207
|
-
field_name_map = {
|
|
208
|
-
key: f.title for f in show_fields if (key := _field_db_key(f)) is not None
|
|
209
|
-
}
|
|
207
|
+
field_name_map = {key: f.title for f in show_fields if (key := _field_db_key(f)) is not None}
|
|
210
208
|
show_db_names = frozenset(field_name_map.keys())
|
|
211
209
|
|
|
212
210
|
# 预处理字典字段映射(只执行一次过滤)
|
|
@@ -225,10 +225,7 @@ def strip_default_join(
|
|
|
225
225
|
) -> OntologyRelationJoin | None:
|
|
226
226
|
"""两侧均为 main 时返回 None(不落库)."""
|
|
227
227
|
resolved = resolve_relation_join({"join": join} if join is not None else {})
|
|
228
|
-
if
|
|
229
|
-
resolved["sourceTable"] == JOIN_TABLE_MAIN
|
|
230
|
-
and resolved["targetTable"] == JOIN_TABLE_MAIN
|
|
231
|
-
):
|
|
228
|
+
if resolved["sourceTable"] == JOIN_TABLE_MAIN and resolved["targetTable"] == JOIN_TABLE_MAIN:
|
|
232
229
|
return None
|
|
233
230
|
return OntologyRelationJoin(
|
|
234
231
|
sourceTable=resolved["sourceTable"],
|
|
@@ -348,8 +345,7 @@ def _normalize_relation(item: Any, index: int = 0) -> OntologyRelation:
|
|
|
348
345
|
if not data.get("id"):
|
|
349
346
|
data["id"] = _new_item_id(index)
|
|
350
347
|
data["on"] = [
|
|
351
|
-
_normalize_on_condition(c).model_dump(exclude_none=True)
|
|
352
|
-
for c in (data.get("on") or [])
|
|
348
|
+
_normalize_on_condition(c).model_dump(exclude_none=True) for c in (data.get("on") or [])
|
|
353
349
|
]
|
|
354
350
|
join = _normalize_join(data.get("join"))
|
|
355
351
|
if join is None:
|
|
@@ -424,7 +420,10 @@ def validate_ontology_relations(relations: Sequence[OntologyRelation | Mapping[s
|
|
|
424
420
|
# join 缺失不报错;存在时两侧须非空
|
|
425
421
|
if relation.join is not None:
|
|
426
422
|
resolved = resolve_relation_join(relation)
|
|
427
|
-
if
|
|
423
|
+
if (
|
|
424
|
+
not (resolved["sourceTable"] or "").strip()
|
|
425
|
+
or not (resolved["targetTable"] or "").strip()
|
|
426
|
+
):
|
|
428
427
|
raise DataOpsError(f"关系「{code}」:JOIN 物理表不能为空")
|
|
429
428
|
for cond in relation.on or []:
|
|
430
429
|
if not cond.op:
|
|
@@ -438,9 +437,8 @@ def validate_ontology_relations(relations: Sequence[OntologyRelation | Mapping[s
|
|
|
438
437
|
raise DataOpsError(f"关系「{code}」:ON 左操作数表侧不合法")
|
|
439
438
|
if cond.left.type == ON_OPERAND_FIELD and not (cond.left.field or "").strip():
|
|
440
439
|
raise DataOpsError(f"关系「{code}」:ON 左操作数字段不能为空")
|
|
441
|
-
if (
|
|
442
|
-
cond.left.
|
|
443
|
-
and (cond.left.value == "" or cond.left.value is None)
|
|
440
|
+
if cond.left.type == ON_OPERAND_CONST and (
|
|
441
|
+
cond.left.value == "" or cond.left.value is None
|
|
444
442
|
):
|
|
445
443
|
raise DataOpsError(f"关系「{code}」:ON 常量值不能为空")
|
|
446
444
|
if (
|
|
@@ -109,11 +109,12 @@ def _post_workflow(url: str, body: dict) -> dict:
|
|
|
109
109
|
raise AuthenticationError("认证失败,请先登录") from e
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
def service_start_workflow(code: str, params: dict | None = None) -> dict:
|
|
112
|
+
def service_start_workflow(code: str, start_node_id: str, params: dict | None = None) -> dict:
|
|
113
113
|
"""同步启动工作流实例.
|
|
114
114
|
|
|
115
115
|
Args:
|
|
116
116
|
code: 工作流编码
|
|
117
|
+
start_node_id: 启动节点 ID(手动触发一般为 ``manually-trigger``)
|
|
117
118
|
params: 启动参数(透传给流程节点的入参)
|
|
118
119
|
|
|
119
120
|
Returns:
|
|
@@ -123,14 +124,18 @@ def service_start_workflow(code: str, params: dict | None = None) -> dict:
|
|
|
123
124
|
DataOpsError: API 请求失败时
|
|
124
125
|
AuthenticationError: 未认证或认证失败时
|
|
125
126
|
"""
|
|
126
|
-
return _post_workflow(
|
|
127
|
+
return _post_workflow(
|
|
128
|
+
f"/workflow/start?flowCode={code}&startNodeId={start_node_id}",
|
|
129
|
+
params or {},
|
|
130
|
+
)
|
|
127
131
|
|
|
128
132
|
|
|
129
|
-
def service_start_workflow_async(code: str, params: dict | None = None) -> dict:
|
|
133
|
+
def service_start_workflow_async(code: str, start_node_id: str, params: dict | None = None) -> dict:
|
|
130
134
|
"""异步启动工作流实例.
|
|
131
135
|
|
|
132
136
|
Args:
|
|
133
137
|
code: 工作流编码
|
|
138
|
+
start_node_id: 启动节点 ID(手动触发一般为 ``manually-trigger``)
|
|
134
139
|
params: 启动参数(透传给流程节点的入参)
|
|
135
140
|
|
|
136
141
|
Returns:
|
|
@@ -140,4 +145,7 @@ def service_start_workflow_async(code: str, params: dict | None = None) -> dict:
|
|
|
140
145
|
DataOpsError: API 请求失败时
|
|
141
146
|
AuthenticationError: 未认证或认证失败时
|
|
142
147
|
"""
|
|
143
|
-
return _post_workflow(
|
|
148
|
+
return _post_workflow(
|
|
149
|
+
f"/workflow/startAsync?flowCode={code}&startNodeId={start_node_id}",
|
|
150
|
+
params or {},
|
|
151
|
+
)
|
|
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.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/naming_param.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/src/dataops_sdk/runner/schemas/nacos/naming_request.py
RENAMED
|
File without changes
|
{dataops_sdk-0.4.5 → dataops_sdk-0.5.0}/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
|
|
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
|