dataops-sdk 0.4.3__tar.gz → 0.4.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.
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/PKG-INFO +1 -1
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/__init__.py +4 -1
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/__init__.py +12 -9
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/data_table.py +85 -9
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/enums.py +3 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/group.py +20 -7
- dataops_sdk-0.4.5/src/dataops_sdk/schemas/ontology.py +146 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/__init__.py +19 -9
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/data_table.py +105 -14
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/dict_.py +0 -15
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/group.py +30 -11
- dataops_sdk-0.4.5/src/dataops_sdk/services/ontology.py +581 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/report.py +6 -6
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/skill.py +76 -4
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/workflow.py +4 -6
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/SOURCES.txt +2 -3
- dataops_sdk-0.4.3/src/dataops_sdk/schemas/sql_query_ast.py +0 -628
- dataops_sdk-0.4.3/src/dataops_sdk/schemas/wiki.py +0 -120
- dataops_sdk-0.4.3/src/dataops_sdk/services/wiki.py +0 -194
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/README.md +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/pyproject.toml +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/setup.cfg +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/constants.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/exceptions.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/__init__.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/datasource_factory.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/__init__.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/common.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/nacos.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/websocket_client.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/alarm.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/api.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/common.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/datasource.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/dict_.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/hazard.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/meta.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/query.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/report.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/skill.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/table.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/tag.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/user.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/widget.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/workflow.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/alarm.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/api.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/auth.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/dataset.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/datasource.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/hazard.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/meta.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/metrics.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/ref.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/table.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/tag.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/widget.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/session.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/__init__.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/builder.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/constants.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/models.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/render_utils.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/renderers.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/tool.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/__init__.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/common.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/log.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/utils.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/requires.txt +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/top_level.txt +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_constants.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_exceptions.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_session.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_utils.py +0 -0
- {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_websocket_client.py +0 -0
|
@@ -44,7 +44,9 @@ from .services import ( # noqa: F401
|
|
|
44
44
|
service_get_data_table_by_code,
|
|
45
45
|
service_get_data_table_by_name,
|
|
46
46
|
service_get_data_table_data_by_code,
|
|
47
|
+
service_get_data_table_data_ext_by_code,
|
|
47
48
|
service_get_data_table_data_by_name,
|
|
49
|
+
service_get_data_table_data_ext_by_name,
|
|
48
50
|
service_get_data_table_record_by_id,
|
|
49
51
|
service_get_data_table_reference_list,
|
|
50
52
|
service_get_data_table_total,
|
|
@@ -95,6 +97,7 @@ from .services import ( # noqa: F401
|
|
|
95
97
|
service_ref_forward,
|
|
96
98
|
service_set_application,
|
|
97
99
|
service_skill_call_by_code,
|
|
100
|
+
service_skill_download,
|
|
98
101
|
service_skill_update,
|
|
99
102
|
service_skill_upload,
|
|
100
103
|
service_skill_upload_sub_file,
|
|
@@ -108,4 +111,4 @@ from .services import ( # noqa: F401
|
|
|
108
111
|
)
|
|
109
112
|
from .session import dataops_base_url_context, request_context
|
|
110
113
|
|
|
111
|
-
__version__ = "0.4.
|
|
114
|
+
__version__ = "0.4.5"
|
|
@@ -40,10 +40,20 @@ from .meta import (
|
|
|
40
40
|
MetaRef,
|
|
41
41
|
MetaUpdate,
|
|
42
42
|
)
|
|
43
|
+
from .ontology import (
|
|
44
|
+
OntologyConstraint,
|
|
45
|
+
OntologyMeta,
|
|
46
|
+
OntologyMetaData,
|
|
47
|
+
OntologyOnCondition,
|
|
48
|
+
OntologyOnOperand,
|
|
49
|
+
OntologyRef,
|
|
50
|
+
OntologyRelation,
|
|
51
|
+
OntologyRelationJoin,
|
|
52
|
+
OntologyScenario,
|
|
53
|
+
)
|
|
43
54
|
from .query import PageParam, SqlCondition, SqlFilter, SqlQueryParam, SqlSort
|
|
44
55
|
from .report import ReportMeta, ReportMetaData
|
|
45
56
|
from .skill import DataSkill, DataSkillSubFile, MetaSkill, SkillCallResult
|
|
46
|
-
from .tag import TagBrief, TagEntityType, TagTreeNode
|
|
47
57
|
from .table import (
|
|
48
58
|
ColumnItem,
|
|
49
59
|
DataBaseColumnDictExternal,
|
|
@@ -52,14 +62,7 @@ from .table import (
|
|
|
52
62
|
DataBaseColumnTableExternal,
|
|
53
63
|
DataDataBase,
|
|
54
64
|
)
|
|
65
|
+
from .tag import TagBrief, TagEntityType, TagTreeNode
|
|
55
66
|
from .user import Application, UserInfo
|
|
56
67
|
from .widget import WidgetMeta, WidgetMetaData
|
|
57
|
-
from .wiki import (
|
|
58
|
-
KbType,
|
|
59
|
-
KnowledgeBase,
|
|
60
|
-
KnowledgeDocument,
|
|
61
|
-
KnowledgeSearchResult,
|
|
62
|
-
WikiPage,
|
|
63
|
-
WikiPageResult,
|
|
64
|
-
)
|
|
65
68
|
from .workflow import DataWorkflow, MetaWorkflow
|
|
@@ -387,11 +387,14 @@ class DataTableField(BaseModel):
|
|
|
387
387
|
|
|
388
388
|
Attributes:
|
|
389
389
|
id: 字段唯一标识 (UUID)。
|
|
390
|
-
dbName:
|
|
391
|
-
dbType:
|
|
390
|
+
dbName: 存储在数据库中的字段/列名(主表物理列)。
|
|
391
|
+
dbType: 数据库列类型(虚拟列 lookup/rollup 可为空)。
|
|
392
392
|
title: 前端显示标题。
|
|
393
393
|
name: 前端显示的字段/列名。
|
|
394
394
|
type: 字段类型。
|
|
395
|
+
source: 字段来源(main/aux)。
|
|
396
|
+
table_alias: 附属表别名(source=aux)。
|
|
397
|
+
column_name: 附属表物理列名(source=aux,替代 dbName)。
|
|
395
398
|
pk: 是否主键。
|
|
396
399
|
label: 是否标签字段(用于卡片/记录展示)。
|
|
397
400
|
visible: 是否在表格中可见。
|
|
@@ -401,17 +404,45 @@ class DataTableField(BaseModel):
|
|
|
401
404
|
align: 文本对齐方式。
|
|
402
405
|
default_value: 新增记录时的默认值。
|
|
403
406
|
type_ext: 类型扩展配置。
|
|
407
|
+
readonly: 是否只读。
|
|
408
|
+
join_key: 是否为附属表关联键。
|
|
409
|
+
maintain_permission: 维护权限。
|
|
404
410
|
"""
|
|
405
411
|
|
|
406
412
|
id: Annotated[str | None, Field(description="字段唯一标识 (UUID)", exclude=True)] = None
|
|
407
413
|
|
|
408
|
-
dbName: Annotated[
|
|
409
|
-
|
|
414
|
+
dbName: Annotated[
|
|
415
|
+
str | None,
|
|
416
|
+
Field(description="字段名称/列名 (存储在数据库中的名称)", default=None),
|
|
417
|
+
] = None
|
|
418
|
+
dbType: Annotated[
|
|
419
|
+
ColumnType | str | None,
|
|
420
|
+
Field(description="字段类型", default=None),
|
|
421
|
+
] = None
|
|
410
422
|
|
|
411
423
|
title: Annotated[str | None, Field(description="显示标题")]
|
|
412
424
|
name: Annotated[str, Field(description="字段名称/列名 (前端显示的名称)")]
|
|
413
425
|
type: Annotated[str | None, Field(description="字段类型")] = None
|
|
414
426
|
|
|
427
|
+
source: Annotated[
|
|
428
|
+
Literal["main", "aux"] | None,
|
|
429
|
+
Field(description="字段来源"),
|
|
430
|
+
] = None
|
|
431
|
+
table_alias: Annotated[
|
|
432
|
+
str | None,
|
|
433
|
+
Field(
|
|
434
|
+
description="附属表别名",
|
|
435
|
+
validation_alias=AliasChoices("tableAlias", "table_alias"),
|
|
436
|
+
),
|
|
437
|
+
] = None
|
|
438
|
+
column_name: Annotated[
|
|
439
|
+
str | None,
|
|
440
|
+
Field(
|
|
441
|
+
description="附属表物理列名",
|
|
442
|
+
validation_alias=AliasChoices("columnName", "column_name"),
|
|
443
|
+
),
|
|
444
|
+
] = None
|
|
445
|
+
|
|
415
446
|
# 数据属性
|
|
416
447
|
pk: Annotated[bool, Field(description="是否主键")] = False
|
|
417
448
|
label: Annotated[bool, Field(description="是否标签字段 (用于卡片/记录展示)")] = False
|
|
@@ -435,7 +466,20 @@ class DataTableField(BaseModel):
|
|
|
435
466
|
Field(description="类型扩展配置", validation_alias=AliasChoices("typeExt", "type_ext")),
|
|
436
467
|
] = None
|
|
437
468
|
|
|
438
|
-
|
|
469
|
+
readonly: Annotated[bool | None, Field(description="是否只读")] = None
|
|
470
|
+
join_key: Annotated[
|
|
471
|
+
bool | None,
|
|
472
|
+
Field(description="是否为附属表关联键", validation_alias=AliasChoices("joinKey", "join_key")),
|
|
473
|
+
] = None
|
|
474
|
+
maintain_permission: Annotated[
|
|
475
|
+
str | None,
|
|
476
|
+
Field(
|
|
477
|
+
description="维护权限",
|
|
478
|
+
validation_alias=AliasChoices("maintainPermission", "maintain_permission"),
|
|
479
|
+
),
|
|
480
|
+
] = None
|
|
481
|
+
|
|
482
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
439
483
|
|
|
440
484
|
|
|
441
485
|
# ---------------------------------------------------------------------------
|
|
@@ -525,6 +569,28 @@ class CustomButton(BaseModel):
|
|
|
525
569
|
# ---------------------------------------------------------------------------
|
|
526
570
|
|
|
527
571
|
|
|
572
|
+
class QueryPlugin(BaseModel):
|
|
573
|
+
"""查询组件插件配置.
|
|
574
|
+
|
|
575
|
+
Attributes:
|
|
576
|
+
type: 插件类型,如 ``field``。
|
|
577
|
+
"""
|
|
578
|
+
|
|
579
|
+
type: Annotated[str, Field(description="插件类型")] = "field"
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
class QueryConditionExpression(BaseModel):
|
|
583
|
+
"""查询条件表达式配置.
|
|
584
|
+
|
|
585
|
+
Attributes:
|
|
586
|
+
expression: 条件表达式。
|
|
587
|
+
"""
|
|
588
|
+
|
|
589
|
+
expression: Annotated[SqlExpression | None, Field(description="条件表达式")] = None
|
|
590
|
+
|
|
591
|
+
model_config = ConfigDict(extra="allow")
|
|
592
|
+
|
|
593
|
+
|
|
528
594
|
class QueryCondition(BaseModel):
|
|
529
595
|
"""查询条件 (公开级别).
|
|
530
596
|
|
|
@@ -532,15 +598,25 @@ class QueryCondition(BaseModel):
|
|
|
532
598
|
id: 条件 ID。
|
|
533
599
|
name: 字段名。
|
|
534
600
|
title: 显示标题。
|
|
535
|
-
condition:
|
|
601
|
+
condition: 条件表达式配置。
|
|
602
|
+
plugin: 查询组件插件。
|
|
603
|
+
db_type: 字段数据库类型。
|
|
536
604
|
"""
|
|
537
605
|
|
|
538
606
|
id: Annotated[str | None, Field(description="条件ID")] = None
|
|
539
607
|
name: Annotated[str, Field(description="字段名")]
|
|
540
608
|
title: Annotated[str | None, Field(description="显示标题")]
|
|
541
|
-
condition: Annotated[
|
|
542
|
-
|
|
543
|
-
|
|
609
|
+
condition: Annotated[
|
|
610
|
+
QueryConditionExpression | None,
|
|
611
|
+
Field(description="条件表达式配置"),
|
|
612
|
+
] = None
|
|
613
|
+
plugin: Annotated[QueryPlugin | None, Field(description="查询组件插件")] = None
|
|
614
|
+
db_type: Annotated[
|
|
615
|
+
ColumnType | str | None,
|
|
616
|
+
Field(description="字段数据库类型", validation_alias=AliasChoices("dbType", "db_type")),
|
|
617
|
+
] = None
|
|
618
|
+
|
|
619
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
544
620
|
|
|
545
621
|
|
|
546
622
|
class QueryFormParams(BaseModel):
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
|
-
from pydantic import AliasChoices, BaseModel, Field, JsonValue
|
|
9
|
+
from pydantic import AliasChoices, BaseModel, ConfigDict, Field, JsonValue
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class GroupTree(BaseModel):
|
|
@@ -31,16 +31,24 @@ class GroupTree(BaseModel):
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class GroupNode(BaseModel):
|
|
34
|
+
"""分组树节点.
|
|
35
|
+
|
|
36
|
+
与前端 ``addGroupNode`` 请求体对齐:``pid`` / ``parentId`` / ``digest`` 等字段可选;
|
|
37
|
+
展示名称通过 ``label`` 传入,模型内部字段名为 ``title``。
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
41
|
+
|
|
34
42
|
id: Annotated[
|
|
35
43
|
str, Field(description="元数据ID", validation_alias=AliasChoices("id", "cuid", "CUID"))
|
|
36
44
|
]
|
|
37
|
-
pid: Annotated[str | None, Field(description="父ID")]
|
|
45
|
+
pid: Annotated[str | None, Field(description="父ID")] = None
|
|
38
46
|
parentId: Annotated[
|
|
39
47
|
str | None,
|
|
40
48
|
Field(
|
|
41
49
|
description="父ID", validation_alias=AliasChoices("parentId", "parent_id", "PARENT_ID")
|
|
42
50
|
),
|
|
43
|
-
]
|
|
51
|
+
] = None
|
|
44
52
|
|
|
45
53
|
type: Annotated[str, Field(description="类型", validation_alias=AliasChoices("type", "TYPE"))]
|
|
46
54
|
subType: Annotated[
|
|
@@ -48,18 +56,23 @@ class GroupNode(BaseModel):
|
|
|
48
56
|
Field(
|
|
49
57
|
description="子类型", validation_alias=AliasChoices("subType", "sub_type", "SUB_TYPE")
|
|
50
58
|
),
|
|
51
|
-
]
|
|
59
|
+
] = None
|
|
52
60
|
|
|
53
61
|
name: Annotated[str, Field(description="名称", validation_alias=AliasChoices("name", "NAME"))]
|
|
54
62
|
title: Annotated[
|
|
55
|
-
str,
|
|
63
|
+
str,
|
|
64
|
+
Field(
|
|
65
|
+
description="中文名称",
|
|
66
|
+
validation_alias=AliasChoices("label", "title", "TITLE"),
|
|
67
|
+
serialization_alias="label",
|
|
68
|
+
),
|
|
56
69
|
]
|
|
57
70
|
digest: Annotated[
|
|
58
71
|
str | None, Field(description="摘要", validation_alias=AliasChoices("digest", "DIGEST"))
|
|
59
|
-
]
|
|
72
|
+
] = None
|
|
60
73
|
remark: Annotated[
|
|
61
74
|
str | None, Field(description="备注", validation_alias=AliasChoices("remark", "REMARK"))
|
|
62
|
-
]
|
|
75
|
+
] = None
|
|
63
76
|
|
|
64
77
|
attrs: Annotated[dict[str, JsonValue] | None, Field(description="扩展属性")] = None
|
|
65
78
|
params: Annotated[dict[str, JsonValue] | None, Field(description="参数")] = None
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""本体 (Ontology) Meta Schema 定义.
|
|
2
|
+
|
|
3
|
+
对应前端 ``pages/ontology/constants.js`` 中 rawData 结构:
|
|
4
|
+
``data_table`` / ``scenarios`` / ``constraints`` / ``relations`` / ``notes``。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Annotated, Literal
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from .meta import Meta
|
|
14
|
+
|
|
15
|
+
RELATION_REF_TYPE_ONTOLOGY = "ontology"
|
|
16
|
+
ON_OPERAND_FIELD = "field"
|
|
17
|
+
ON_OPERAND_CONST = "const"
|
|
18
|
+
ON_TABLE_SOURCE = "source"
|
|
19
|
+
ON_TABLE_TARGET = "target"
|
|
20
|
+
JOIN_TABLE_MAIN = "main"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class OntologyRef(BaseModel):
|
|
24
|
+
"""关联对象引用."""
|
|
25
|
+
|
|
26
|
+
model_config = ConfigDict(extra="allow")
|
|
27
|
+
|
|
28
|
+
type: Annotated[str, Field(description="引用类型,固定 ontology")] = RELATION_REF_TYPE_ONTOLOGY
|
|
29
|
+
code: Annotated[str, Field(description="关联本体编码", default="")]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class OntologyOnOperand(BaseModel):
|
|
33
|
+
"""ON 条件操作数.
|
|
34
|
+
|
|
35
|
+
``table`` 仅 type=field 时有意义;缺失时按位置解析(左 source / 右 target),
|
|
36
|
+
等于位置默认值时不落库。
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
model_config = ConfigDict(extra="allow")
|
|
40
|
+
|
|
41
|
+
type: Annotated[
|
|
42
|
+
Literal["field", "const"],
|
|
43
|
+
Field(description="操作数类型:field / const"),
|
|
44
|
+
] = ON_OPERAND_FIELD
|
|
45
|
+
table: Annotated[
|
|
46
|
+
Literal["source", "target"] | None,
|
|
47
|
+
Field(description="表侧:source=本表 / target=目标表(默认不落库)"),
|
|
48
|
+
] = None
|
|
49
|
+
field: Annotated[str | None, Field(description="字段名(type=field)")] = None
|
|
50
|
+
value: Annotated[str | None, Field(description="常量值(type=const)")] = None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class OntologyOnCondition(BaseModel):
|
|
54
|
+
"""关系 ON 条件."""
|
|
55
|
+
|
|
56
|
+
model_config = ConfigDict(extra="allow")
|
|
57
|
+
|
|
58
|
+
op: Annotated[str, Field(description="运算符", default="eq")]
|
|
59
|
+
left: Annotated[OntologyOnOperand, Field(description="左操作数")]
|
|
60
|
+
right: Annotated[OntologyOnOperand, Field(description="右操作数")]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class OntologyRelationJoin(BaseModel):
|
|
64
|
+
"""关系 JOIN 物理表.
|
|
65
|
+
|
|
66
|
+
两侧均为 ``main`` 时不落库整个 join 对象。
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
model_config = ConfigDict(extra="allow")
|
|
70
|
+
|
|
71
|
+
sourceTable: Annotated[
|
|
72
|
+
str, Field(description="本侧物理表:main 或附属表 alias", default=JOIN_TABLE_MAIN)
|
|
73
|
+
] = JOIN_TABLE_MAIN
|
|
74
|
+
targetTable: Annotated[
|
|
75
|
+
str, Field(description="目标侧物理表:main 或附属表 alias", default=JOIN_TABLE_MAIN)
|
|
76
|
+
] = JOIN_TABLE_MAIN
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class OntologyRelation(BaseModel):
|
|
80
|
+
"""本体关联关系."""
|
|
81
|
+
|
|
82
|
+
model_config = ConfigDict(extra="allow")
|
|
83
|
+
|
|
84
|
+
id: Annotated[str, Field(description="关系项 ID")]
|
|
85
|
+
name: Annotated[str, Field(description="关系名称", default="")]
|
|
86
|
+
ref: Annotated[OntologyRef, Field(description="关联目标本体")]
|
|
87
|
+
type: Annotated[str, Field(description="关系类型", default="")]
|
|
88
|
+
cardinality: Annotated[str, Field(description="基数(1-1 / 1-N / N-1)", default="")]
|
|
89
|
+
remark: Annotated[str, Field(description="备注", default="")]
|
|
90
|
+
join: Annotated[
|
|
91
|
+
OntologyRelationJoin | None,
|
|
92
|
+
Field(description="JOIN 物理表;两侧 main 时 omit"),
|
|
93
|
+
] = None
|
|
94
|
+
on: Annotated[
|
|
95
|
+
list[OntologyOnCondition], Field(description="JOIN ON 条件", default_factory=list)
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class OntologyScenario(BaseModel):
|
|
100
|
+
"""本体场景(绑定技能)."""
|
|
101
|
+
|
|
102
|
+
model_config = ConfigDict(extra="allow")
|
|
103
|
+
|
|
104
|
+
id: Annotated[str, Field(description="场景项 ID")]
|
|
105
|
+
name: Annotated[str, Field(description="场景名称", default="")]
|
|
106
|
+
skill: Annotated[str, Field(description="绑定技能编码", default="")]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class OntologyConstraint(BaseModel):
|
|
110
|
+
"""本体约束."""
|
|
111
|
+
|
|
112
|
+
model_config = ConfigDict(extra="allow")
|
|
113
|
+
|
|
114
|
+
id: Annotated[str, Field(description="约束项 ID")]
|
|
115
|
+
type: Annotated[str, Field(description="约束类型", default="")]
|
|
116
|
+
rule: Annotated[str, Field(description="约束规则", default="")]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class OntologyMetaData(BaseModel):
|
|
120
|
+
"""本体 rawData 配置.
|
|
121
|
+
|
|
122
|
+
Attributes:
|
|
123
|
+
data_table: 绑定的多维表格编码。
|
|
124
|
+
scenarios: 场景列表。
|
|
125
|
+
constraints: 约束列表。
|
|
126
|
+
relations: 关联关系列表。
|
|
127
|
+
notes: 其他说明。
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
model_config = ConfigDict(extra="allow")
|
|
131
|
+
|
|
132
|
+
data_table: Annotated[str, Field(description="绑定的多维表格编码", default="")]
|
|
133
|
+
scenarios: Annotated[
|
|
134
|
+
list[OntologyScenario], Field(description="场景列表", default_factory=list)
|
|
135
|
+
]
|
|
136
|
+
constraints: Annotated[
|
|
137
|
+
list[OntologyConstraint], Field(description="约束列表", default_factory=list)
|
|
138
|
+
]
|
|
139
|
+
relations: Annotated[
|
|
140
|
+
list[OntologyRelation], Field(description="关联关系列表", default_factory=list)
|
|
141
|
+
]
|
|
142
|
+
notes: Annotated[str, Field(description="其他说明", default="")]
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class OntologyMeta(Meta[OntologyMetaData]):
|
|
146
|
+
"""本体详情 Meta."""
|
|
@@ -37,7 +37,9 @@ from .data_table import (
|
|
|
37
37
|
service_get_data_table_by_code,
|
|
38
38
|
service_get_data_table_by_name,
|
|
39
39
|
service_get_data_table_data_by_code,
|
|
40
|
+
service_get_data_table_data_ext_by_code,
|
|
40
41
|
service_get_data_table_data_by_name,
|
|
42
|
+
service_get_data_table_data_ext_by_name,
|
|
41
43
|
service_get_data_table_record_by_id,
|
|
42
44
|
service_get_data_table_reference_list,
|
|
43
45
|
service_get_data_table_total,
|
|
@@ -93,6 +95,21 @@ from .metrics import (
|
|
|
93
95
|
service_get_metrics_data_by_code,
|
|
94
96
|
service_list_metrics,
|
|
95
97
|
)
|
|
98
|
+
from .ontology import (
|
|
99
|
+
normalize_ontology_meta,
|
|
100
|
+
service_get_ontology_by_code,
|
|
101
|
+
service_get_ontology_by_name,
|
|
102
|
+
service_list_ontologies,
|
|
103
|
+
service_resolve_ontology,
|
|
104
|
+
service_tree_ontology,
|
|
105
|
+
service_update_ontology,
|
|
106
|
+
service_update_ontology_basic,
|
|
107
|
+
service_update_ontology_constraints,
|
|
108
|
+
service_update_ontology_notes,
|
|
109
|
+
service_update_ontology_relations,
|
|
110
|
+
validate_ontology_name,
|
|
111
|
+
validate_ontology_relations,
|
|
112
|
+
)
|
|
96
113
|
from .ref import service_ref_backward, service_ref_forward
|
|
97
114
|
from .report import service_get_report, service_list_reports, servive_tree_report
|
|
98
115
|
from .skill import (
|
|
@@ -106,9 +123,10 @@ from .skill import (
|
|
|
106
123
|
service_skill_call_by_code,
|
|
107
124
|
service_skill_call_by_name,
|
|
108
125
|
service_skill_delete_sub_file,
|
|
126
|
+
service_skill_download,
|
|
127
|
+
service_skill_update,
|
|
109
128
|
service_skill_get_subfile_by_code,
|
|
110
129
|
service_skill_get_subfile_by_name,
|
|
111
|
-
service_skill_update,
|
|
112
130
|
service_skill_upload,
|
|
113
131
|
service_skill_upload_sub_file,
|
|
114
132
|
)
|
|
@@ -149,14 +167,6 @@ from .widget import (
|
|
|
149
167
|
service_update_widget,
|
|
150
168
|
servive_tree_widget,
|
|
151
169
|
)
|
|
152
|
-
from .wiki import (
|
|
153
|
-
service_get_knowledge_base,
|
|
154
|
-
service_list_knowledge_bases,
|
|
155
|
-
service_list_knowledge_documents,
|
|
156
|
-
service_search_knowledge,
|
|
157
|
-
service_search_wiki_pages,
|
|
158
|
-
service_upload_knowledge_file,
|
|
159
|
-
)
|
|
160
170
|
from .workflow import (
|
|
161
171
|
service_get_workflow_by_code,
|
|
162
172
|
service_get_workflow_by_name,
|