dataops-sdk 0.3.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.3.0/PKG-INFO +25 -0
- dataops_sdk-0.3.0/pyproject.toml +49 -0
- dataops_sdk-0.3.0/setup.cfg +4 -0
- dataops_sdk-0.3.0/src/dataops_sdk/__init__.py +84 -0
- dataops_sdk-0.3.0/src/dataops_sdk/constants.py +6 -0
- dataops_sdk-0.3.0/src/dataops_sdk/exceptions.py +31 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/__init__.py +46 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/datasource_factory.py +83 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/__init__.py +5 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/config.py +40 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/constants.py +235 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/instance.py +103 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/nacos_exception.py +44 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/naming_param.py +62 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/naming_request.py +84 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/naming_response.py +50 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/preserved_metadata_key.py +10 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/schemas/nacos/service.py +119 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/__init__.py +42 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/common.py +209 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/dbConn_base.py +256 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/dbConn_sync.py +485 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/duckdb_manager.py +203 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/file_transfer_base.py +307 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/ftp_file_transfer.py +242 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/log.py +50 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/nacos.py +96 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/neo4j_sync.py +236 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/queue_base.py +224 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/queue_kafka.py +150 -0
- dataops_sdk-0.3.0/src/dataops_sdk/runner/utils/sftp_file_transfer.py +243 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/__init__.py +32 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/alarm.py +38 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/api.py +37 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/data_table.py +437 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/datasource.py +26 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/dict_.py +13 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/enums.py +120 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/group.py +40 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/hazard.py +151 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/meta.py +175 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/query.py +175 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/report.py +22 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/skill.py +70 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/table.py +65 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/user.py +52 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/widget.py +651 -0
- dataops_sdk-0.3.0/src/dataops_sdk/schemas/workflow.py +63 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/__init__.py +110 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/alarm.py +324 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/api.py +28 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/auth.py +120 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/data_table.py +485 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/dataset.py +127 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/datasource.py +57 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/dict_.py +69 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/hazard.py +260 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/meta.py +523 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/metrics.py +42 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/ref.py +66 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/report.py +36 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/skill.py +276 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/table.py +340 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/widget.py +143 -0
- dataops_sdk-0.3.0/src/dataops_sdk/services/workflow.py +102 -0
- dataops_sdk-0.3.0/src/dataops_sdk/session.py +292 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/__init__.py +30 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/builder.py +75 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/constants.py +133 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/markdown_parser.py +294 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/models.py +43 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/parse_utils.py +889 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/render_utils.py +846 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/renderers.py +51 -0
- dataops_sdk-0.3.0/src/dataops_sdk/tiptap/tool.py +629 -0
- dataops_sdk-0.3.0/src/dataops_sdk/utils/__init__.py +15 -0
- dataops_sdk-0.3.0/src/dataops_sdk/utils/common.py +211 -0
- dataops_sdk-0.3.0/src/dataops_sdk/utils/utils.py +120 -0
- dataops_sdk-0.3.0/src/dataops_sdk.egg-info/PKG-INFO +25 -0
- dataops_sdk-0.3.0/src/dataops_sdk.egg-info/SOURCES.txt +85 -0
- dataops_sdk-0.3.0/src/dataops_sdk.egg-info/dependency_links.txt +1 -0
- dataops_sdk-0.3.0/src/dataops_sdk.egg-info/requires.txt +22 -0
- dataops_sdk-0.3.0/src/dataops_sdk.egg-info/top_level.txt +1 -0
- dataops_sdk-0.3.0/tests/test_constants.py +30 -0
- dataops_sdk-0.3.0/tests/test_exceptions.py +91 -0
- dataops_sdk-0.3.0/tests/test_session.py +466 -0
- dataops_sdk-0.3.0/tests/test_utils.py +317 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dataops-sdk
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Python SDK for the DataOps platform.
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Requires-Dist: pydantic<3,>=2
|
|
7
|
+
Requires-Dist: pydantic-core
|
|
8
|
+
Requires-Dist: pydantic-settings>=2.14.2
|
|
9
|
+
Requires-Dist: httpx2>=2.5.0
|
|
10
|
+
Requires-Dist: jinja2>=3.1.6
|
|
11
|
+
Requires-Dist: markdown-it-py<4,>=3
|
|
12
|
+
Requires-Dist: cryptography>=49.0.0
|
|
13
|
+
Provides-Extra: runner
|
|
14
|
+
Requires-Dist: paramiko>4; extra == "runner"
|
|
15
|
+
Requires-Dist: pandas; extra == "runner"
|
|
16
|
+
Requires-Dist: sqlalchemy; extra == "runner"
|
|
17
|
+
Requires-Dist: pymysql; extra == "runner"
|
|
18
|
+
Requires-Dist: doris-python>=1.0.3; extra == "runner"
|
|
19
|
+
Requires-Dist: oracledb~=4.0.1; extra == "runner"
|
|
20
|
+
Requires-Dist: neo4j; extra == "runner"
|
|
21
|
+
Requires-Dist: kafka-python>3; extra == "runner"
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
25
|
+
Requires-Dist: ruff; extra == "dev"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "dataops-sdk"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "Python SDK for the DataOps platform."
|
|
9
|
+
requires-python = ">=3.11"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"pydantic>=2,<3",
|
|
12
|
+
"pydantic-core",
|
|
13
|
+
"pydantic-settings>=2.14.2",
|
|
14
|
+
"httpx2>=2.5.0",
|
|
15
|
+
"jinja2>=3.1.6",
|
|
16
|
+
"markdown-it-py>=3,<4",
|
|
17
|
+
"cryptography>=49.0.0",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
runner = [
|
|
22
|
+
# 文件传输
|
|
23
|
+
"paramiko>4",
|
|
24
|
+
# 数据分析
|
|
25
|
+
"pandas",
|
|
26
|
+
# 关系数据库
|
|
27
|
+
"sqlalchemy",
|
|
28
|
+
"pymysql",
|
|
29
|
+
"doris-python>=1.0.3",
|
|
30
|
+
"oracledb~=4.0.1",
|
|
31
|
+
# 图数据库
|
|
32
|
+
"neo4j",
|
|
33
|
+
# 队列驱动
|
|
34
|
+
"kafka-python>3",
|
|
35
|
+
]
|
|
36
|
+
dev = ["pytest", "pytest-mock", "ruff"]
|
|
37
|
+
|
|
38
|
+
[tool.setuptools]
|
|
39
|
+
package-dir = {"" = "src"}
|
|
40
|
+
include-package-data = true
|
|
41
|
+
|
|
42
|
+
[tool.setuptools.dynamic]
|
|
43
|
+
version = {attr = "dataops_sdk.__version__"}
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.packages.find]
|
|
46
|
+
where = ["src"]
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.package-data]
|
|
49
|
+
dataops_sdk = ["py.typed"]
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
from . import runner, schemas, utils
|
|
2
|
+
from .services import ( # noqa: F401
|
|
3
|
+
release_list_create,
|
|
4
|
+
release_list_get_by_code,
|
|
5
|
+
release_list_get_by_name,
|
|
6
|
+
release_list_list,
|
|
7
|
+
release_list_page,
|
|
8
|
+
release_list_total,
|
|
9
|
+
release_list_update,
|
|
10
|
+
release_ref_list,
|
|
11
|
+
release_ref_list_by_ref,
|
|
12
|
+
service_clear_hazard_history_records,
|
|
13
|
+
service_count_alarm_action,
|
|
14
|
+
service_count_alarm_rule_matches,
|
|
15
|
+
service_count_alarm_rules,
|
|
16
|
+
service_count_alarm_specs,
|
|
17
|
+
service_count_table_by_code,
|
|
18
|
+
service_count_table_by_name,
|
|
19
|
+
service_count_widget_by_code,
|
|
20
|
+
service_create_data_table,
|
|
21
|
+
service_create_data_table_record,
|
|
22
|
+
service_delete_data_table_record_by_id,
|
|
23
|
+
service_delete_data_table_record_by_id_list,
|
|
24
|
+
service_exec_sql_by_datasource,
|
|
25
|
+
service_find_alarm_table_data,
|
|
26
|
+
service_find_meta_by_codes,
|
|
27
|
+
service_get_alarm_rule_enums,
|
|
28
|
+
service_get_alarm_table_columns,
|
|
29
|
+
service_get_api_by_code,
|
|
30
|
+
service_get_api_by_name,
|
|
31
|
+
service_get_current_application,
|
|
32
|
+
service_get_data_table_by_code,
|
|
33
|
+
service_get_data_table_by_name,
|
|
34
|
+
service_get_data_table_data_by_code,
|
|
35
|
+
service_get_data_table_data_by_name,
|
|
36
|
+
service_get_data_table_record_by_id,
|
|
37
|
+
service_get_data_table_reference_list,
|
|
38
|
+
service_get_data_table_total,
|
|
39
|
+
service_get_dataset_data_by_code,
|
|
40
|
+
service_get_dataset_detail_by_code,
|
|
41
|
+
service_get_datasource_by_name,
|
|
42
|
+
service_get_datasource_config_by_application_id,
|
|
43
|
+
service_get_dict_detail_by_code,
|
|
44
|
+
service_get_dict_detail_by_name,
|
|
45
|
+
service_get_hazard_task_log_records,
|
|
46
|
+
service_get_hazard_task_logs,
|
|
47
|
+
service_get_main_datasource_config_by_application,
|
|
48
|
+
service_get_metrics,
|
|
49
|
+
service_get_rel_table_columns,
|
|
50
|
+
service_get_report,
|
|
51
|
+
service_get_table_data_by_code,
|
|
52
|
+
service_get_table_data_by_name,
|
|
53
|
+
service_get_table_detail_by_code,
|
|
54
|
+
service_get_table_detail_by_name,
|
|
55
|
+
service_get_widget_data_by_code,
|
|
56
|
+
service_get_widget_detail_by_code,
|
|
57
|
+
service_get_workflow_by_code,
|
|
58
|
+
service_get_workflow_by_name,
|
|
59
|
+
service_list_alarm_rule_matches,
|
|
60
|
+
service_list_alarm_rules,
|
|
61
|
+
service_list_alarm_specs,
|
|
62
|
+
service_list_applications,
|
|
63
|
+
service_list_datasets,
|
|
64
|
+
service_list_dicts,
|
|
65
|
+
service_list_hazard_history_records,
|
|
66
|
+
service_list_hazard_records,
|
|
67
|
+
service_list_metrics,
|
|
68
|
+
service_list_reports,
|
|
69
|
+
service_list_tables,
|
|
70
|
+
service_list_widgets,
|
|
71
|
+
service_list_workflows,
|
|
72
|
+
service_login,
|
|
73
|
+
service_logout,
|
|
74
|
+
service_ref_backward,
|
|
75
|
+
service_ref_forward,
|
|
76
|
+
service_set_application,
|
|
77
|
+
service_start_workflow,
|
|
78
|
+
service_start_workflow_async,
|
|
79
|
+
service_trigger_hazard_task,
|
|
80
|
+
service_update_data_table_record_by_id,
|
|
81
|
+
service_update_data_table_record_by_id_list,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
__version__ = "0.3.0"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class DataOpsError(Exception):
|
|
2
|
+
"""DataOps API 错误基类。"""
|
|
3
|
+
|
|
4
|
+
def __init__(self, message: str, status_code: int | None = None):
|
|
5
|
+
self.message = message
|
|
6
|
+
self.status_code = status_code
|
|
7
|
+
super().__init__(message)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class NotFoundError(DataOpsError):
|
|
11
|
+
"""资源未找到。"""
|
|
12
|
+
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AuthenticationError(DataOpsError):
|
|
17
|
+
"""认证失败异常。"""
|
|
18
|
+
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FailedToCreateError(DataOpsError):
|
|
23
|
+
"""创建失败异常。"""
|
|
24
|
+
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FailedToUpdateError(DataOpsError):
|
|
29
|
+
"""更新失败异常。"""
|
|
30
|
+
|
|
31
|
+
pass
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Runner 包 - 独立的脚本执行工具集。
|
|
2
|
+
|
|
3
|
+
提供脚本执行所需的数据库连接、DuckDB 管理、Neo4j 连接等工具。
|
|
4
|
+
可作为独立模块被导入使用。
|
|
5
|
+
|
|
6
|
+
Modules:
|
|
7
|
+
schemas: Nacos 配置数据模型
|
|
8
|
+
utils: 通用工具(数据库连接、加密、日志等)
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
>>> from runner.utils import DatabaseConn, DuckDBManager
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from .datasource_factory import get_datasource_instent
|
|
15
|
+
from .schemas.nacos import NacosSettings
|
|
16
|
+
from .utils import (
|
|
17
|
+
DatabaseConn,
|
|
18
|
+
FTPFileTransfer,
|
|
19
|
+
KafkaQueue,
|
|
20
|
+
Neo4jConn,
|
|
21
|
+
SFTPFileTransfer,
|
|
22
|
+
decrypt_body,
|
|
23
|
+
encrypt_body,
|
|
24
|
+
generate_uuid,
|
|
25
|
+
get_service_instance,
|
|
26
|
+
getLogger,
|
|
27
|
+
parse_args,
|
|
28
|
+
print_json,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"DatabaseConn",
|
|
33
|
+
"FTPFileTransfer",
|
|
34
|
+
"KafkaQueue",
|
|
35
|
+
"SFTPFileTransfer",
|
|
36
|
+
"Neo4jConn",
|
|
37
|
+
"decrypt_body",
|
|
38
|
+
"encrypt_body",
|
|
39
|
+
"getLogger",
|
|
40
|
+
"print_json",
|
|
41
|
+
"generate_uuid",
|
|
42
|
+
"parse_args",
|
|
43
|
+
"NacosSettings",
|
|
44
|
+
"get_service_instance",
|
|
45
|
+
"get_datasource_instent",
|
|
46
|
+
]
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""
|
|
2
|
+
数据源实例工厂模块。
|
|
3
|
+
|
|
4
|
+
根据数据源元数据动态创建对应的连接实例(数据库或消息队列)。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataops_sdk.services.datasource import service_get_datasource_by_name
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_datasource_instent(datasource: str, log_sql: bool | None = None):
|
|
11
|
+
"""
|
|
12
|
+
根据数据源名称获取对应的连接实例。
|
|
13
|
+
|
|
14
|
+
通过数据源名称从平台查询元数据,根据数据源的 category(数据库/消息队列)
|
|
15
|
+
和 type(具体类型)动态创建并返回相应的连接实例。
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
datasource: 数据源名称,用于从平台查询数据源元数据。
|
|
19
|
+
log_sql: 是否记录 SQL 执行日志,传递给数据库连接实例。
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
DatabaseConn: 通用数据库连接实例(MySQL、PostgreSQL 等)。
|
|
23
|
+
Neo4jConn: Neo4j 图数据库连接实例。
|
|
24
|
+
KafkaQueue: Kafka 消息队列连接实例。
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
NotImplementedError: 当数据源类型未被支持时抛出。
|
|
28
|
+
|
|
29
|
+
Note:
|
|
30
|
+
当前支持的 category:
|
|
31
|
+
- database: 关系型/图数据库(Neo4j、MySQL、PostgreSQL 等)
|
|
32
|
+
- queue: 消息队列(Kafka)
|
|
33
|
+
"""
|
|
34
|
+
# 从平台查询数据源元数据
|
|
35
|
+
meta = service_get_datasource_by_name(datasource)
|
|
36
|
+
|
|
37
|
+
# 根据数据源类别分发处理
|
|
38
|
+
if meta.data.category == "queue":
|
|
39
|
+
# 消息队列类型处理
|
|
40
|
+
if meta.data.type == "kafka":
|
|
41
|
+
# Kafka 连接需要 bootstrap_servers
|
|
42
|
+
assert meta.data.bootstrap_servers, "bootstrap_servers is required, but not provided"
|
|
43
|
+
from dataops_sdk.runner import KafkaQueue
|
|
44
|
+
|
|
45
|
+
return KafkaQueue(meta.data.bootstrap_servers)
|
|
46
|
+
else:
|
|
47
|
+
raise NotImplementedError(f"Queue type {meta.data.type} is not supported")
|
|
48
|
+
|
|
49
|
+
elif meta.data.category == "database":
|
|
50
|
+
# 数据库类型处理,验证必要的连接参数
|
|
51
|
+
assert meta.data.ip, "host is required, but not provided"
|
|
52
|
+
assert meta.data.port, "port is required, but not provided"
|
|
53
|
+
assert meta.data.username, "user is required, but not provided"
|
|
54
|
+
assert meta.data.password, "password is required, but not provided"
|
|
55
|
+
assert meta.data.database, "database is required, but not provided"
|
|
56
|
+
|
|
57
|
+
if meta.data.type == "neo4j":
|
|
58
|
+
# Neo4j 图数据库使用专用连接类
|
|
59
|
+
from dataops_sdk.runner import Neo4jConn
|
|
60
|
+
|
|
61
|
+
return Neo4jConn(
|
|
62
|
+
host=meta.data.ip,
|
|
63
|
+
port=meta.data.port,
|
|
64
|
+
user=meta.data.username,
|
|
65
|
+
password=meta.data.password,
|
|
66
|
+
db=meta.data.database,
|
|
67
|
+
log_sql=log_sql,
|
|
68
|
+
name=meta.title,
|
|
69
|
+
)
|
|
70
|
+
else:
|
|
71
|
+
# 通用数据库连接,支持 MySQL、PostgreSQL 等
|
|
72
|
+
from dataops_sdk.runner import DatabaseConn
|
|
73
|
+
|
|
74
|
+
return DatabaseConn(
|
|
75
|
+
host=meta.data.ip,
|
|
76
|
+
port=meta.data.port,
|
|
77
|
+
user=meta.data.username,
|
|
78
|
+
password=meta.data.password,
|
|
79
|
+
db=meta.data.database,
|
|
80
|
+
db_type=meta.data.type,
|
|
81
|
+
log_sql=log_sql,
|
|
82
|
+
name=meta.title,
|
|
83
|
+
)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Nacos 配置模块。
|
|
2
|
+
|
|
3
|
+
定义 Nacos 相关的配置数据模型,与主应用中的 Settings 类似,
|
|
4
|
+
但用于 runner 子包独立运行时。
|
|
5
|
+
|
|
6
|
+
Classes:
|
|
7
|
+
NacosSettings: Nacos 配置类
|
|
8
|
+
|
|
9
|
+
Example:
|
|
10
|
+
>>> from runner.schemas.nacos import NacosSettings
|
|
11
|
+
>>> config = NacosSettings()
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from typing import Annotated
|
|
15
|
+
|
|
16
|
+
from pydantic import Field
|
|
17
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class NacosSettings(BaseSettings):
|
|
21
|
+
"""Nacos 配置类。
|
|
22
|
+
|
|
23
|
+
从 .env 文件和环境变量加载配置。配置项包括后端监听、
|
|
24
|
+
子系统连接和 Nacos 服务发现参数。
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
nacos_addrs: NACOS服务地址
|
|
28
|
+
nacos_user: NACOS用户名
|
|
29
|
+
nacos_password: NACOS密码
|
|
30
|
+
nacos_discovery_namespace: NACOS服务发现命名空间
|
|
31
|
+
nacos_group_name: NACOS服务发现组名
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
nacos_addrs: Annotated[str, Field(description="NACOS服务地址")]
|
|
35
|
+
nacos_user: Annotated[str, Field(description="NACOS用户名")]
|
|
36
|
+
nacos_password: Annotated[str, Field(description="NACOS密码")]
|
|
37
|
+
nacos_discovery_namespace: Annotated[str, Field(description="NACOS服务发现命名空间")]
|
|
38
|
+
nacos_group_name: Annotated[str, Field(description="NACOS服务发现组名")] = "DEFAULT_GROUP"
|
|
39
|
+
|
|
40
|
+
model_config = SettingsConfigDict(extra="ignore")
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
class Constants:
|
|
2
|
+
NAMING_MODULE = "naming"
|
|
3
|
+
|
|
4
|
+
CONFIG_MODULE = "config"
|
|
5
|
+
|
|
6
|
+
AI_MODULE = "ai"
|
|
7
|
+
|
|
8
|
+
LABEL_SOURCE = "source"
|
|
9
|
+
|
|
10
|
+
LABEL_SOURCE_SDK = "sdk"
|
|
11
|
+
|
|
12
|
+
LABEL_SOURCE_CLUSTER = "cluster"
|
|
13
|
+
|
|
14
|
+
LABEL_MODULE = "module"
|
|
15
|
+
|
|
16
|
+
CLIENT_VERSION = "Nacos-Python-Client:v3.2.0"
|
|
17
|
+
|
|
18
|
+
DATA_IN_BODY_VERSION = 204
|
|
19
|
+
|
|
20
|
+
DEFAULT_GROUP = "DEFAULT_GROUP"
|
|
21
|
+
|
|
22
|
+
WEB_CONTEXT = "/nacos"
|
|
23
|
+
|
|
24
|
+
APPNAME = "AppName"
|
|
25
|
+
|
|
26
|
+
UNKNOWN_APP = "UnknownApp"
|
|
27
|
+
|
|
28
|
+
DEFAULT_DOMAINNAME = "commonconfig.config-host.taobao.com"
|
|
29
|
+
|
|
30
|
+
DAILY_DOMAINNAME = "commonconfig.taobao.net"
|
|
31
|
+
|
|
32
|
+
NULL = ""
|
|
33
|
+
|
|
34
|
+
DATAID = "dataId"
|
|
35
|
+
|
|
36
|
+
GROUP = "group"
|
|
37
|
+
|
|
38
|
+
DEFAULT_HEARTBEAT_INTERVAL = 5
|
|
39
|
+
|
|
40
|
+
LAST_MODIFIED = "Last-Modified"
|
|
41
|
+
|
|
42
|
+
ACCEPT_ENCODING = "Accept-Encoding"
|
|
43
|
+
|
|
44
|
+
CONTENT_ENCODING = "Content-Encoding"
|
|
45
|
+
|
|
46
|
+
PROBE_MODIFY_REQUEST = "Listening-Configs"
|
|
47
|
+
|
|
48
|
+
PROBE_MODIFY_RESPONSE = "Probe-Modify-Response"
|
|
49
|
+
|
|
50
|
+
PROBE_MODIFY_RESPONSE_NEW = "Probe-Modify-Response-New"
|
|
51
|
+
|
|
52
|
+
USE_ZIP = "true"
|
|
53
|
+
|
|
54
|
+
CONTENT_MD5 = "Content-MD5"
|
|
55
|
+
|
|
56
|
+
CONFIG_VERSION = "Config-Version"
|
|
57
|
+
|
|
58
|
+
CONFIG_TYPE = "Config-Type"
|
|
59
|
+
|
|
60
|
+
ENCRYPTED_DATA_KEY = "Encrypted-Data-Key"
|
|
61
|
+
|
|
62
|
+
IF_MODIFIED_SINCE = "If-Modified-Since"
|
|
63
|
+
|
|
64
|
+
SPACING_INTERVAL = "client-spacing-interval"
|
|
65
|
+
|
|
66
|
+
BASE_PATH = "/v1/cs"
|
|
67
|
+
|
|
68
|
+
SERVICE_BASE_PATH = "/v1/ns"
|
|
69
|
+
|
|
70
|
+
CONFIG_CONTROLLER_PATH = BASE_PATH + "/configs"
|
|
71
|
+
|
|
72
|
+
TOKEN = "token"
|
|
73
|
+
|
|
74
|
+
ACCESS_TOKEN = "accessToken"
|
|
75
|
+
|
|
76
|
+
TOKEN_TTL = "tokenTtl"
|
|
77
|
+
|
|
78
|
+
GLOBAL_ADMIN = "globalAdmin"
|
|
79
|
+
|
|
80
|
+
USERNAME = "username"
|
|
81
|
+
|
|
82
|
+
TOKEN_REFRESH_WINDOW = "tokenRefreshWindow"
|
|
83
|
+
|
|
84
|
+
# second.
|
|
85
|
+
ASYNC_UPDATE_ADDRESS_INTERVAL = 300
|
|
86
|
+
|
|
87
|
+
# second.
|
|
88
|
+
POLLING_INTERVAL_TIME = 15
|
|
89
|
+
|
|
90
|
+
# millisecond.
|
|
91
|
+
ONCE_TIMEOUT = 2000
|
|
92
|
+
|
|
93
|
+
# millisecond.
|
|
94
|
+
SO_TIMEOUT = 60000
|
|
95
|
+
|
|
96
|
+
# millisecond.
|
|
97
|
+
CONFIG_LONG_POLL_TIMEOUT = 30000
|
|
98
|
+
|
|
99
|
+
# millisecond.
|
|
100
|
+
MIN_CONFIG_LONG_POLL_TIMEOUT = 10000
|
|
101
|
+
|
|
102
|
+
# millisecond.
|
|
103
|
+
CONFIG_RETRY_TIME = 2000
|
|
104
|
+
|
|
105
|
+
# Maximum number of retries.
|
|
106
|
+
MAX_RETRY = 3
|
|
107
|
+
|
|
108
|
+
# millisecond.
|
|
109
|
+
RECV_WAIT_TIMEOUT = ONCE_TIMEOUT * 5
|
|
110
|
+
|
|
111
|
+
ENCODE = "UTF-8"
|
|
112
|
+
|
|
113
|
+
MAP_FILE = "map-file.js"
|
|
114
|
+
|
|
115
|
+
FLOW_CONTROL_THRESHOLD = 20
|
|
116
|
+
|
|
117
|
+
FLOW_CONTROL_SLOT = 10
|
|
118
|
+
|
|
119
|
+
FLOW_CONTROL_INTERVAL = 1000
|
|
120
|
+
|
|
121
|
+
DEFAULT_PROTECT_THRESHOLD = 0.0
|
|
122
|
+
|
|
123
|
+
LINE_SEPARATOR = chr(1)
|
|
124
|
+
|
|
125
|
+
WORD_SEPARATOR = chr(2)
|
|
126
|
+
|
|
127
|
+
LONGPOLLING_LINE_SEPARATOR = "\r\n"
|
|
128
|
+
|
|
129
|
+
CLIENT_APPNAME_HEADER = "Client-AppName"
|
|
130
|
+
|
|
131
|
+
APP_NAME_HEADER = "AppName"
|
|
132
|
+
|
|
133
|
+
CLIENT_REQUEST_TS_HEADER = "Client-RequestTS"
|
|
134
|
+
|
|
135
|
+
CLIENT_REQUEST_TOKEN_HEADER = "Client-RequestToken"
|
|
136
|
+
|
|
137
|
+
ATOMIC_MAX_SIZE = 1000
|
|
138
|
+
|
|
139
|
+
NAMING_INSTANCE_ID_SPLITTER = "#"
|
|
140
|
+
|
|
141
|
+
NAMING_INSTANCE_ID_SEG_COUNT = 4
|
|
142
|
+
|
|
143
|
+
NAMING_HTTP_HEADER_SPLITTER = "\\|"
|
|
144
|
+
|
|
145
|
+
DEFAULT_CLUSTER_NAME = "DEFAULT"
|
|
146
|
+
|
|
147
|
+
DEFAULT_HEART_BEAT_TIMEOUT = 15000
|
|
148
|
+
|
|
149
|
+
DEFAULT_IP_DELETE_TIMEOUT = 30000
|
|
150
|
+
|
|
151
|
+
DEFAULT_HEART_BEAT_INTERVAL = 5000
|
|
152
|
+
|
|
153
|
+
DEFAULT_NAMESPACE_ID = ""
|
|
154
|
+
|
|
155
|
+
NAMING_DEFAULT_NAMESPACE_ID = "public"
|
|
156
|
+
|
|
157
|
+
DEFAULT_USE_CLOUD_NAMESPACE_PARSING = True
|
|
158
|
+
|
|
159
|
+
WRITE_REDIRECT_CODE = 307
|
|
160
|
+
|
|
161
|
+
RESPONSE_SUCCESS_CODE = 200
|
|
162
|
+
|
|
163
|
+
REQUEST_DOMAIN_RETRY_TIME = 3
|
|
164
|
+
|
|
165
|
+
SERVICE_INFO_SPLITER = "@@"
|
|
166
|
+
|
|
167
|
+
CONFIG_INFO_SPLITER = "@@"
|
|
168
|
+
|
|
169
|
+
SERVICE_INFO_SPLIT_COUNT = 2
|
|
170
|
+
|
|
171
|
+
NULL_STRING = "null"
|
|
172
|
+
|
|
173
|
+
NUMBER_PATTERN = "^\\d+$"
|
|
174
|
+
|
|
175
|
+
ANY_PATTERN = ".*"
|
|
176
|
+
|
|
177
|
+
DEFAULT_INSTANCE_ID_GENERATOR = "simple"
|
|
178
|
+
|
|
179
|
+
SNOWFLAKE_INSTANCE_ID_GENERATOR = "snowflake"
|
|
180
|
+
|
|
181
|
+
HTTP_PREFIX = "http"
|
|
182
|
+
|
|
183
|
+
ALL_PATTERN = "*"
|
|
184
|
+
|
|
185
|
+
COLON = ":"
|
|
186
|
+
|
|
187
|
+
LINE_BREAK = "\n"
|
|
188
|
+
|
|
189
|
+
POUND = "#"
|
|
190
|
+
|
|
191
|
+
VIPSERVER_TAG = "Vipserver-Tag"
|
|
192
|
+
|
|
193
|
+
AMORY_TAG = "Amory-Tag"
|
|
194
|
+
|
|
195
|
+
LOCATION_TAG = "Location-Tag"
|
|
196
|
+
|
|
197
|
+
CHARSET_KEY = "charset"
|
|
198
|
+
|
|
199
|
+
EX_CONFIG_INFO = "exConfigInfo"
|
|
200
|
+
|
|
201
|
+
GROUP_NAME_KEY = "groupName"
|
|
202
|
+
|
|
203
|
+
SERVICE_NAME_KEY = "serviceName"
|
|
204
|
+
|
|
205
|
+
CIPHER_PRE_FIX = "cipher-"
|
|
206
|
+
|
|
207
|
+
DEFAULT_PORT = 8848
|
|
208
|
+
|
|
209
|
+
GRPC_MAX_RECEIVE_MESSAGE_LENGTH = 100 * 1024 * 1024
|
|
210
|
+
|
|
211
|
+
GRPC_KEEPALIVE_TIME_MILLS = 60 * 1000
|
|
212
|
+
|
|
213
|
+
GRPC_INITIAL_WINDOW_SIZE = 10 * 1024 * 1024
|
|
214
|
+
|
|
215
|
+
GRPC_INITIAL_CONN_WINDOW_SIZE = 10 * 1024 * 1024
|
|
216
|
+
|
|
217
|
+
KEEP_ALIVE_TIME_MILLS = 5000
|
|
218
|
+
|
|
219
|
+
INTERNAL_TIME_MILLS = 3000
|
|
220
|
+
|
|
221
|
+
DEFAULT_GRPC_TIMEOUT_MILLS = 3000
|
|
222
|
+
|
|
223
|
+
GRPC_CAPABILITY_NEGOTIATION_TIMEOUT = 5000
|
|
224
|
+
|
|
225
|
+
GRPC_PORT_OFFSET = 1000 # gRPC port = HTTP port + offset
|
|
226
|
+
|
|
227
|
+
DEFAULT_TIMEOUT_MILLS = 10000
|
|
228
|
+
|
|
229
|
+
PER_TASK_CONFIG_SIZE = 3000
|
|
230
|
+
|
|
231
|
+
MSE_KMS_V1_DEFAULT_KEY_ID = "alias/acs/mse"
|
|
232
|
+
|
|
233
|
+
KMS_AES_128_ALGORITHM_NAME = "AES_128"
|
|
234
|
+
|
|
235
|
+
KMS_AES_256_ALGORITHM_NAME = "AES_256"
|