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.
Files changed (99) hide show
  1. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/PKG-INFO +1 -1
  2. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/__init__.py +4 -1
  3. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/__init__.py +12 -9
  4. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/data_table.py +85 -9
  5. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/enums.py +3 -0
  6. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/group.py +20 -7
  7. dataops_sdk-0.4.5/src/dataops_sdk/schemas/ontology.py +146 -0
  8. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/__init__.py +19 -9
  9. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/data_table.py +105 -14
  10. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/dict_.py +0 -15
  11. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/group.py +30 -11
  12. dataops_sdk-0.4.5/src/dataops_sdk/services/ontology.py +581 -0
  13. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/report.py +6 -6
  14. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/skill.py +76 -4
  15. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/workflow.py +4 -6
  16. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/PKG-INFO +1 -1
  17. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/SOURCES.txt +2 -3
  18. dataops_sdk-0.4.3/src/dataops_sdk/schemas/sql_query_ast.py +0 -628
  19. dataops_sdk-0.4.3/src/dataops_sdk/schemas/wiki.py +0 -120
  20. dataops_sdk-0.4.3/src/dataops_sdk/services/wiki.py +0 -194
  21. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/README.md +0 -0
  22. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/pyproject.toml +0 -0
  23. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/setup.cfg +0 -0
  24. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/constants.py +0 -0
  25. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/exceptions.py +0 -0
  26. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/__init__.py +0 -0
  27. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/datasource_factory.py +0 -0
  28. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/__init__.py +0 -0
  29. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/config.py +0 -0
  30. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/constants.py +0 -0
  31. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/instance.py +0 -0
  32. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +0 -0
  33. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_param.py +0 -0
  34. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_request.py +0 -0
  35. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/naming_response.py +0 -0
  36. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +0 -0
  37. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/schemas/nacos/service.py +0 -0
  38. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/__init__.py +0 -0
  39. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/common.py +0 -0
  40. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/dbConn_base.py +0 -0
  41. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/dbConn_sync.py +0 -0
  42. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/duckdb_manager.py +0 -0
  43. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/file_transfer_base.py +0 -0
  44. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/ftp_file_transfer.py +0 -0
  45. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/nacos.py +0 -0
  46. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/neo4j_sync.py +0 -0
  47. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/queue_base.py +0 -0
  48. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/queue_kafka.py +0 -0
  49. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/sftp_file_transfer.py +0 -0
  50. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/runner/utils/websocket_client.py +0 -0
  51. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/alarm.py +0 -0
  52. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/api.py +0 -0
  53. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/common.py +0 -0
  54. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/datasource.py +0 -0
  55. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/dict_.py +0 -0
  56. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/hazard.py +0 -0
  57. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/meta.py +0 -0
  58. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/query.py +0 -0
  59. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/report.py +0 -0
  60. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/skill.py +0 -0
  61. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/table.py +0 -0
  62. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/tag.py +0 -0
  63. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/user.py +0 -0
  64. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/widget.py +0 -0
  65. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/schemas/workflow.py +0 -0
  66. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/alarm.py +0 -0
  67. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/api.py +0 -0
  68. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/auth.py +0 -0
  69. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/dataset.py +0 -0
  70. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/datasource.py +0 -0
  71. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/hazard.py +0 -0
  72. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/meta.py +0 -0
  73. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/metrics.py +0 -0
  74. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/ref.py +0 -0
  75. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/table.py +0 -0
  76. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/tag.py +0 -0
  77. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/services/widget.py +0 -0
  78. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/session.py +0 -0
  79. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/__init__.py +0 -0
  80. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/builder.py +0 -0
  81. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/constants.py +0 -0
  82. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/markdown_parser.py +0 -0
  83. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/models.py +0 -0
  84. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/parse_utils.py +0 -0
  85. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/render_utils.py +0 -0
  86. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/renderers.py +0 -0
  87. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/tiptap/tool.py +0 -0
  88. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/__init__.py +0 -0
  89. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/common.py +0 -0
  90. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/log.py +0 -0
  91. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk/utils/utils.py +0 -0
  92. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/dependency_links.txt +0 -0
  93. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/requires.txt +0 -0
  94. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/src/dataops_sdk.egg-info/top_level.txt +0 -0
  95. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_constants.py +0 -0
  96. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_exceptions.py +0 -0
  97. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_session.py +0 -0
  98. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_utils.py +0 -0
  99. {dataops_sdk-0.4.3 → dataops_sdk-0.4.5}/tests/test_websocket_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataops-sdk
3
- Version: 0.4.3
3
+ Version: 0.4.5
4
4
  Summary: Python SDK for the DataOps platform.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -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.3"
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[str, Field(description="字段名称/列名 (存储在数据库中的名称)")]
409
- dbType: Annotated[ColumnType, Field(description="字段类型")]
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
- model_config = ConfigDict(extra="allow")
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[dict[SqlExpression, Any], Field(description="条件表达式和值")] = Field(
542
- default_factory=dict
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):
@@ -76,6 +76,9 @@ class MetaType(StrEnum):
76
76
  # 字典
77
77
  DICT = "dict"
78
78
  """字典。"""
79
+ # 本体
80
+ ONTOLOGY = "ontology"
81
+ """本体。"""
79
82
 
80
83
  def __repr__(self):
81
84
  return self.value
@@ -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, Field(description="中文名称", validation_alias=AliasChoices("label", "title", "TITLE"))
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,