data-ops-cli 0.2.0__py3-none-any.whl → 0.2.1__py3-none-any.whl
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.
- {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/METADATA +1 -4
- {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/RECORD +30 -18
- dataops_cli/__init__.py +1 -1
- dataops_cli/cli/__init__.py +2 -27
- dataops_cli/cli/auth.py +2 -0
- dataops_cli/cli/datasource.py +11 -0
- dataops_cli/cli/factory.py +58 -0
- dataops_cli/cli/ref.py +1 -1
- dataops_cli/cli/table.py +1 -1
- dataops_cli/cli/widget.py +59 -0
- dataops_cli/runner/__init__.py +4 -3
- dataops_cli/runner/schemas/nacos/__init__.py +5 -0
- dataops_cli/runner/schemas/nacos/config.py +40 -0
- dataops_cli/runner/schemas/nacos/constants.py +235 -0
- dataops_cli/runner/schemas/nacos/instance.py +103 -0
- dataops_cli/runner/schemas/nacos/nacos_exception.py +44 -0
- dataops_cli/runner/schemas/nacos/naming_param.py +61 -0
- dataops_cli/runner/schemas/nacos/naming_request.py +84 -0
- dataops_cli/runner/schemas/nacos/naming_response.py +51 -0
- dataops_cli/runner/schemas/nacos/preserved_metadata_key.py +10 -0
- dataops_cli/runner/schemas/nacos/service.py +119 -0
- dataops_cli/runner/utils/__init__.py +2 -2
- dataops_cli/runner/utils/nacos.py +35 -38
- dataops_cli/schems/__init__.py +1 -0
- dataops_cli/schems/widget.py +538 -0
- dataops_cli/sdk/ref.py +2 -2
- dataops_cli/sdk/table.py +2 -2
- dataops_cli/runner/schemas/nacos.py +0 -89
- {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/WHEEL +0 -0
- {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/entry_points.txt +0 -0
- {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-ops-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Requires-Python: <3.14,>=3.11
|
|
5
5
|
Requires-Dist: requests
|
|
6
6
|
Requires-Dist: pydantic-core
|
|
@@ -13,9 +13,6 @@ Requires-Dist: doris-python>=1.0.3
|
|
|
13
13
|
Requires-Dist: pymysql
|
|
14
14
|
Requires-Dist: sqlalchemy
|
|
15
15
|
Requires-Dist: pydantic-settings>=2.14.2
|
|
16
|
-
Requires-Dist: duckdb>=1.5.4
|
|
17
|
-
Requires-Dist: pandas>=3.0.3
|
|
18
|
-
Requires-Dist: nacos-sdk-python>=3.2.0
|
|
19
16
|
Provides-Extra: dev
|
|
20
17
|
Requires-Dist: pytest; extra == "dev"
|
|
21
18
|
Requires-Dist: ruff; extra == "dev"
|
|
@@ -1,30 +1,41 @@
|
|
|
1
|
-
dataops_cli/__init__.py,sha256=
|
|
1
|
+
dataops_cli/__init__.py,sha256=HfjVOrpTnmZ-xVFCYSVmX50EXaBQeJteUHG-PD6iQs8,22
|
|
2
2
|
dataops_cli/constants.py,sha256=Nc0ZofLF_sX_wDyVDvvrZPKOj6c_jahEOXmhy5phvF8,293
|
|
3
3
|
dataops_cli/exceptions.py,sha256=16orv-vSvIai9Fi-q8iSV9C5lLKPimMmjBRYDTD0fCc,405
|
|
4
4
|
dataops_cli/session.py,sha256=6agqEwJSL024vf2OHg8CiucmFGmQT1yEY4mao-NQp9E,5344
|
|
5
5
|
dataops_cli/utils.py,sha256=qeO06dqy_aWLdX9kN8tyXyFU5N-GRhzefpIRRqz-eOc,3335
|
|
6
|
-
dataops_cli/cli/__init__.py,sha256=
|
|
7
|
-
dataops_cli/cli/auth.py,sha256=
|
|
6
|
+
dataops_cli/cli/__init__.py,sha256=TvJw3xrE81YSwUrauHaJwQsRNf-YAlxLnadce1KYo4c,67
|
|
7
|
+
dataops_cli/cli/auth.py,sha256=yEN2cFMRT45KxHMSYGWQAvUqkdx5mWzjuIAkAFeJQMs,5625
|
|
8
8
|
dataops_cli/cli/data_table.py,sha256=eoqnXxFGq6u9se7VpYHXlxMeFKomJzsFrKTquiYyYSM,1460
|
|
9
9
|
dataops_cli/cli/dataset.py,sha256=vUWOqo59P6ss7OU8035DjzqO_eFwSOd-sncbWpq3XqE,3442
|
|
10
|
-
dataops_cli/cli/datasource.py,sha256=
|
|
10
|
+
dataops_cli/cli/datasource.py,sha256=EvUaIDRV6WIK-X20zGlJkhD9XTIc4sT-E_8HiUByYEI,3481
|
|
11
|
+
dataops_cli/cli/factory.py,sha256=Miib8v8iTylw7pUfvp4NV19bTKwpEQGTg1l8Lhj4uGA,1553
|
|
11
12
|
dataops_cli/cli/metrics.py,sha256=CioC_l2DHlg3s97_-kAfLihdz7tLgOwb9lo2AIngb5I,6195
|
|
12
|
-
dataops_cli/cli/ref.py,sha256=
|
|
13
|
+
dataops_cli/cli/ref.py,sha256=jfc5EhkXrhqUwu4IuftEjUepPB3d6SK4ZDhrh40YGOE,4765
|
|
13
14
|
dataops_cli/cli/report.py,sha256=-qo5Nz31bCI_y8dvPoBnpn4-ggQ0Leo5mUsmiWBzNJ8,2437
|
|
14
|
-
dataops_cli/cli/table.py,sha256=
|
|
15
|
+
dataops_cli/cli/table.py,sha256=iHDUHvjp1dZFJEe7cDplp3Phx4hAz1L0O8p-qfzTNWs,7488
|
|
15
16
|
dataops_cli/cli/utils.py,sha256=Qi3BGmZgIapasHAGCYVdOS8deYz5GmZIqKd289HYgeE,529
|
|
17
|
+
dataops_cli/cli/widget.py,sha256=7rvBR4RS1zAg9j48yzLjWQvDF9vBN3H7TYRFjkpGOqU,1744
|
|
16
18
|
dataops_cli/cli/workflow.py,sha256=HxZcR71ykPkLI5QoF9IutwLrmaPbTvxHxgnd9aHnMIU,4802
|
|
17
|
-
dataops_cli/runner/__init__.py,sha256=
|
|
18
|
-
dataops_cli/runner/schemas/nacos.py,sha256=
|
|
19
|
-
dataops_cli/runner/
|
|
19
|
+
dataops_cli/runner/__init__.py,sha256=BursdHKoU_4Bq-BhrYxNCJ88SpUajeMzVrnLMpbC4fc,767
|
|
20
|
+
dataops_cli/runner/schemas/nacos/__init__.py,sha256=E_E8GI3ijWIRwXob34Oy6JaQaIir3qbF32aslmNrrVQ,147
|
|
21
|
+
dataops_cli/runner/schemas/nacos/config.py,sha256=pHrwJRoDGQNuqMVoQnkmNF0ENqUqcmUvp-j3Q_YgTx0,1326
|
|
22
|
+
dataops_cli/runner/schemas/nacos/constants.py,sha256=034uKkGHqlfcOzk1CvG92OhBZM_5oBx1WHfZGzOuE7g,4262
|
|
23
|
+
dataops_cli/runner/schemas/nacos/instance.py,sha256=jRHSYLcOLSdVEzS6ol7z1Ta7kK7E5pSu199eMSV1kMo,3974
|
|
24
|
+
dataops_cli/runner/schemas/nacos/nacos_exception.py,sha256=gNYYNe8jD6rJKBM6g_FdgqhB3XiJEQLA4P-AeIKgSa0,714
|
|
25
|
+
dataops_cli/runner/schemas/nacos/naming_param.py,sha256=4GtancH118ZcffShdsACkCtS7IzuxYyFEPCA2BYz4NA,3224
|
|
26
|
+
dataops_cli/runner/schemas/nacos/naming_request.py,sha256=VrBYPOGS8IgwiVKFYH1f_uMNUUAifzwQ3nYZWwBr24k,2886
|
|
27
|
+
dataops_cli/runner/schemas/nacos/naming_response.py,sha256=bYWqBlAgM30NPRyGh9_HFo_eUGhFIJHwUIsWZte_9Og,1412
|
|
28
|
+
dataops_cli/runner/schemas/nacos/preserved_metadata_key.py,sha256=-fieuddYrc-A3T5jcgbmUpFAHWKlwbPXzXI4i8lgfsE,313
|
|
29
|
+
dataops_cli/runner/schemas/nacos/service.py,sha256=C-27WmWW-ziZuplMTp2-xcIIPONVmNEMlpUnmU7uz0g,3906
|
|
30
|
+
dataops_cli/runner/utils/__init__.py,sha256=C0e_iiM80fScn_FGL4-HIRwmsHADiyN5TQ08a75FgQk,880
|
|
20
31
|
dataops_cli/runner/utils/common.py,sha256=fz7uUjVRluZUUUaIhw2b9OXvs5k9M_W0l4TH6oxGilg,6282
|
|
21
32
|
dataops_cli/runner/utils/dbConn_base.py,sha256=3reXPJ9uAcOVhl3sRNe4MPplYpKfG5DTfW0ETaqXeEo,8239
|
|
22
33
|
dataops_cli/runner/utils/dbConn_sync.py,sha256=C8l1zzbDMeGryt-mPStVbTc7Q16dVLMt6cfJ7WjdfI8,12938
|
|
23
34
|
dataops_cli/runner/utils/duckdb_manager.py,sha256=xIREgkx6hcAbt6cYSTEHfGPGu7QgZsCwQrU4u2Vb1ng,6902
|
|
24
35
|
dataops_cli/runner/utils/log.py,sha256=EwctSAohPIP1wo2FtUTjv5kswyoGHK70-2CFlyQ9yN4,1438
|
|
25
|
-
dataops_cli/runner/utils/nacos.py,sha256=
|
|
36
|
+
dataops_cli/runner/utils/nacos.py,sha256=HSJyjswRk1ohzzUEjn4yRDtWKPjgsU_yYoS1nh5TWss,2994
|
|
26
37
|
dataops_cli/runner/utils/neo4j_sync.py,sha256=cbpb4K5QUHcD1DuJg7_KeoBi8N1DLwru2sbiDMq779M,6603
|
|
27
|
-
dataops_cli/schems/__init__.py,sha256
|
|
38
|
+
dataops_cli/schems/__init__.py,sha256=-bOjpAo_FfR7FnnyGJOLgmoOoHVOXvpmZ0zlGSURHCA,373
|
|
28
39
|
dataops_cli/schems/datasource.py,sha256=2b0dUf0xdO0J9fV5V1eCEM9Hj6ERButULuChl34i0Ik,2287
|
|
29
40
|
dataops_cli/schems/enums.py,sha256=3lCxF5E4Jo1LUw9ZbA2-PiIbSGaYLBmrwQdlwdcmh-k,1438
|
|
30
41
|
dataops_cli/schems/group.py,sha256=TvH0nsrGz1DpftrLAPpHqQuhMNgu0e5gu_Og3PiVnBc,1306
|
|
@@ -32,15 +43,16 @@ dataops_cli/schems/meta.py,sha256=_tNcSm_s7OIJbx6kQaJ0CB7_oc0Wlym3Ac9uERjBZaM,44
|
|
|
32
43
|
dataops_cli/schems/query.py,sha256=AWH0P51lkBQEKhotIOoqJaOEIEoaWaiT_r7hSXlzK2Q,6455
|
|
33
44
|
dataops_cli/schems/report.py,sha256=Eklh1gMaRoPDvgrWZIBrLkQXhB0KuuAteJUzOzZngb8,493
|
|
34
45
|
dataops_cli/schems/user.py,sha256=mAPgLCCKeoC7qvOj6TOSC2xI3OrL7P5eNOGy4R3RVyw,2522
|
|
46
|
+
dataops_cli/schems/widget.py,sha256=bzxkzh2ATGawjznZgLf7F_7nYrNkfddAnpRuC8ptX5k,21572
|
|
35
47
|
dataops_cli/schems/workflow.py,sha256=KQr7bAlJtuUUxeVUVPrN7x4DL_iKHhNR3OuxVnYnsAc,1805
|
|
36
48
|
dataops_cli/sdk/__init__.py,sha256=8e2ItcT178lDGO1OisQJdNr-pkC-SAf5HGbtercdkiY,335
|
|
37
49
|
dataops_cli/sdk/auth.py,sha256=lqbG5WfGI_ylFCog5_lAWd43VuT25YbzLifggKeDO8Q,3936
|
|
38
50
|
dataops_cli/sdk/data_table.py,sha256=rLPUK8Dk8ih_DSbFweL5B-fHtBhFMec1o9lFT-VbFTU,2083
|
|
39
51
|
dataops_cli/sdk/datasource.py,sha256=Nsj1uqksigUG4f9U9i8Oc1J_jZhzcd9c6WqmdJUOmNs,1276
|
|
40
52
|
dataops_cli/sdk/meta.py,sha256=V4lXHAvK0mRC3VBXacZPwdQk8OQ4bMGgjbGg3LRkExE,8628
|
|
41
|
-
dataops_cli/sdk/ref.py,sha256=
|
|
53
|
+
dataops_cli/sdk/ref.py,sha256=BPttMiqaW7z1nuCvgY0nV6d-u1O1i_EbEJ7ZrL0KhFY,1925
|
|
42
54
|
dataops_cli/sdk/report.py,sha256=3WQrNluI8sH80Pm_30bjtTuDhu0H-JZtuOpw0HmX22s,418
|
|
43
|
-
dataops_cli/sdk/table.py,sha256=
|
|
55
|
+
dataops_cli/sdk/table.py,sha256=PbFI5MatzYMtvsQpZEKyVHNQ-LwUuCHWwyoaJzKtxSw,5730
|
|
44
56
|
dataops_cli/sdk/workflow.py,sha256=uTlqzZVZUgQExTQ3N0b_bokqMcp-rCENV9H7D9OfyZA,508
|
|
45
57
|
dataops_cli/tiptap/__init__.py,sha256=UaHc1Q0T6OtmN02WNxTY1tp1-Iw8wzZjIyZE6rlMBgQ,612
|
|
46
58
|
dataops_cli/tiptap/builder.py,sha256=w8lzbCcRo-AOFRvOoN3b_JV4hNLch_iSPbcYIcSqelk,2245
|
|
@@ -50,8 +62,8 @@ dataops_cli/tiptap/parse_utils.py,sha256=iJ4_gean-tkPXks4UShXuyPAkUwwFh41WL6cS7G
|
|
|
50
62
|
dataops_cli/tiptap/render_utils.py,sha256=f5CDNLm0Y3uPXD0oPEjq4cKw1hDvWviY3IVlfS05vzE,21021
|
|
51
63
|
dataops_cli/tiptap/renderers.py,sha256=qHAeYZeJf1Wip0svKtmy-28uFSeoTELzh3iE8bAQwaw,1235
|
|
52
64
|
dataops_cli/tiptap/tool.py,sha256=7Uxoq-Kv_3XzU5ZW0k16wzwz79nhQf8D6qq7ygxERLw,27902
|
|
53
|
-
data_ops_cli-0.2.
|
|
54
|
-
data_ops_cli-0.2.
|
|
55
|
-
data_ops_cli-0.2.
|
|
56
|
-
data_ops_cli-0.2.
|
|
57
|
-
data_ops_cli-0.2.
|
|
65
|
+
data_ops_cli-0.2.1.dist-info/METADATA,sha256=33xzlMcc6PPkzL5ddA_zRina1_iKucLb5Z72hN8CvQ0,503
|
|
66
|
+
data_ops_cli-0.2.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
67
|
+
data_ops_cli-0.2.1.dist-info/entry_points.txt,sha256=vc_2b5byVdLofaQ2ppuPM484AcaZnGsaHdcMKmtcSkU,53
|
|
68
|
+
data_ops_cli-0.2.1.dist-info/top_level.txt,sha256=KFHplpKxwE9_wWypzVLESa4eLkOBsk-iUD_Qbld2IcY,12
|
|
69
|
+
data_ops_cli-0.2.1.dist-info/RECORD,,
|
dataops_cli/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.2.
|
|
1
|
+
__version__ = "0.2.1"
|
dataops_cli/cli/__init__.py
CHANGED
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
from
|
|
1
|
+
from dataops_cli.cli.factory import create_app
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from dataops_cli.cli.auth import auth_typer
|
|
6
|
-
from dataops_cli.cli.data_table import data_table_typer
|
|
7
|
-
from dataops_cli.cli.dataset import dataset_typer
|
|
8
|
-
from dataops_cli.cli.datasource import datasource_typer
|
|
9
|
-
from dataops_cli.cli.metrics import metrics_typer
|
|
10
|
-
from dataops_cli.cli.ref import ref_typer
|
|
11
|
-
from dataops_cli.cli.report import report_typer
|
|
12
|
-
from dataops_cli.cli.table import table_typer
|
|
13
|
-
from dataops_cli.cli.workflow import workflow_typer
|
|
14
|
-
|
|
15
|
-
app = typer.Typer(
|
|
16
|
-
name="data-ops-cli",
|
|
17
|
-
help="DataOps command-line tool.",
|
|
18
|
-
no_args_is_help=True,
|
|
19
|
-
)
|
|
20
|
-
app.add_typer(auth_typer)
|
|
21
|
-
app.add_typer(datasource_typer)
|
|
22
|
-
app.add_typer(dataset_typer)
|
|
23
|
-
app.add_typer(table_typer)
|
|
24
|
-
app.add_typer(ref_typer)
|
|
25
|
-
app.add_typer(workflow_typer)
|
|
26
|
-
app.add_typer(report_typer)
|
|
27
|
-
app.add_typer(metrics_typer)
|
|
28
|
-
app.add_typer(data_table_typer)
|
|
3
|
+
app = create_app()
|
dataops_cli/cli/auth.py
CHANGED
|
@@ -12,6 +12,7 @@ import typer
|
|
|
12
12
|
from rich.console import Console
|
|
13
13
|
from rich.table import Table
|
|
14
14
|
|
|
15
|
+
from dataops_cli.cli.datasource import get_datasource_config
|
|
15
16
|
from dataops_cli.constants import USER_INFO_FILE
|
|
16
17
|
from dataops_cli.exceptions import AuthenticationError
|
|
17
18
|
from dataops_cli.schems import UserInfo
|
|
@@ -49,6 +50,7 @@ def auth_status() -> None:
|
|
|
49
50
|
print(f"用户 `{user_info.user_name}` 已登录, 应用未设置")
|
|
50
51
|
else:
|
|
51
52
|
print(f"用户 `{user_info.user_name}` 已登录, 应用设置为 `{application.CODE}`")
|
|
53
|
+
get_datasource_config()
|
|
52
54
|
|
|
53
55
|
|
|
54
56
|
@auth_typer.command("login", no_args_is_help=True)
|
dataops_cli/cli/datasource.py
CHANGED
|
@@ -35,6 +35,17 @@ datasource_typer = typer.Typer(name="datasource", help="Manage data sources.", n
|
|
|
35
35
|
|
|
36
36
|
@datasource_typer.command("config")
|
|
37
37
|
def get_datasource_config() -> None:
|
|
38
|
+
"""显示当前应用的数据库源配置信息.
|
|
39
|
+
|
|
40
|
+
展示应用关联的三个核心数据源:
|
|
41
|
+
- 主数据源: 默认读写数据源
|
|
42
|
+
- 隐患读数据源: 隐患业务只读数据源
|
|
43
|
+
- 隐患写数据源: 隐患业务只写数据源
|
|
44
|
+
|
|
45
|
+
示例:
|
|
46
|
+
# 显示当前应用的数据源配置
|
|
47
|
+
>>> data-ops-cli datasource config
|
|
48
|
+
"""
|
|
38
49
|
application = get_application()
|
|
39
50
|
# 主数据源
|
|
40
51
|
datasource_main = get_datasource()
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Annotated
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
from typer.models import TyperInfo
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def version_callback(
|
|
10
|
+
version: Annotated[bool | None, typer.Option("-v", "--version")] = None,
|
|
11
|
+
):
|
|
12
|
+
if version:
|
|
13
|
+
from dataops_cli import __version__
|
|
14
|
+
|
|
15
|
+
print(__version__)
|
|
16
|
+
raise typer.Exit()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def main(
|
|
20
|
+
version: Annotated[
|
|
21
|
+
bool | None, typer.Option("-v", "--version", callback=version_callback)
|
|
22
|
+
] = None,
|
|
23
|
+
):
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def create_app():
|
|
28
|
+
from dataops_cli.cli.auth import auth_typer
|
|
29
|
+
from dataops_cli.cli.data_table import data_table_typer
|
|
30
|
+
from dataops_cli.cli.dataset import dataset_typer
|
|
31
|
+
from dataops_cli.cli.datasource import datasource_typer
|
|
32
|
+
from dataops_cli.cli.metrics import metrics_typer
|
|
33
|
+
from dataops_cli.cli.ref import ref_typer
|
|
34
|
+
from dataops_cli.cli.report import report_typer
|
|
35
|
+
from dataops_cli.cli.table import table_typer
|
|
36
|
+
from dataops_cli.cli.widget import widget_typer
|
|
37
|
+
from dataops_cli.cli.workflow import workflow_typer
|
|
38
|
+
|
|
39
|
+
app = typer.Typer(
|
|
40
|
+
name="data-ops-cli",
|
|
41
|
+
help="DataOps command-line tool.",
|
|
42
|
+
no_args_is_help=True,
|
|
43
|
+
short_help=True,
|
|
44
|
+
)
|
|
45
|
+
app.add_typer(auth_typer)
|
|
46
|
+
app.add_typer(datasource_typer)
|
|
47
|
+
app.add_typer(dataset_typer)
|
|
48
|
+
app.add_typer(table_typer)
|
|
49
|
+
app.add_typer(ref_typer)
|
|
50
|
+
app.add_typer(workflow_typer)
|
|
51
|
+
app.add_typer(report_typer)
|
|
52
|
+
app.add_typer(metrics_typer)
|
|
53
|
+
app.add_typer(data_table_typer)
|
|
54
|
+
app.add_typer(widget_typer)
|
|
55
|
+
|
|
56
|
+
app.command()(main)
|
|
57
|
+
|
|
58
|
+
return app
|
dataops_cli/cli/ref.py
CHANGED
|
@@ -28,7 +28,7 @@ def ref_forward(
|
|
|
28
28
|
type: Annotated[MetaType, typer.Argument(help="类型")],
|
|
29
29
|
code: Annotated[str, typer.Argument(help="编码")],
|
|
30
30
|
ref_types: Annotated[
|
|
31
|
-
|
|
31
|
+
str, typer.Option(help="允许的被引用类型,使用 , 分割(e.g. table,dict,dataset)")
|
|
32
32
|
] = "",
|
|
33
33
|
full: Annotated[bool, typer.Option(help="是否显示更多内容")] = False,
|
|
34
34
|
) -> None:
|
dataops_cli/cli/table.py
CHANGED
|
@@ -41,7 +41,7 @@ def list_table(
|
|
|
41
41
|
>>> data-ops-cli table list mydatasource "^user_.*"
|
|
42
42
|
"""
|
|
43
43
|
try:
|
|
44
|
-
group_nodes = service_list_tables(datasource
|
|
44
|
+
group_nodes = service_list_tables(datasource)
|
|
45
45
|
except DataOpsError as e:
|
|
46
46
|
typer.echo(f"错误: {e.message}")
|
|
47
47
|
raise typer.Exit(code=1) from None
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.table import Table
|
|
6
|
+
|
|
7
|
+
from dataops_cli.exceptions import DataOpsError
|
|
8
|
+
from dataops_cli.schems import MetaType
|
|
9
|
+
from dataops_cli.sdk.meta import (
|
|
10
|
+
release_list_get_by_code,
|
|
11
|
+
release_list_list,
|
|
12
|
+
)
|
|
13
|
+
from dataops_cli.utils import filter_nodes_by_pattern
|
|
14
|
+
|
|
15
|
+
# ---------------------------------------------------------------------------
|
|
16
|
+
# CLI 命令
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
widget_typer = typer.Typer(name="widget", help="卡片", no_args_is_help=True)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@widget_typer.command("list")
|
|
23
|
+
def list_widget(
|
|
24
|
+
query: Annotated[str | None, typer.Option("-q", "--query", help="正则表达式")] = None,
|
|
25
|
+
) -> None:
|
|
26
|
+
"""查询卡片列表."""
|
|
27
|
+
try:
|
|
28
|
+
group_nodes = release_list_list(MetaType.WIDGET)
|
|
29
|
+
except DataOpsError as e:
|
|
30
|
+
typer.echo(f"错误: {e.message}")
|
|
31
|
+
raise typer.Exit(code=1) from None
|
|
32
|
+
|
|
33
|
+
if query:
|
|
34
|
+
group_nodes = filter_nodes_by_pattern(group_nodes, query, include_digest=True)
|
|
35
|
+
|
|
36
|
+
table = Table("code", "title", "remark")
|
|
37
|
+
console = Console(no_color=True)
|
|
38
|
+
for column in group_nodes:
|
|
39
|
+
table.add_row(column.CODE, column.TITLE, column.REMARK or "")
|
|
40
|
+
console.print(table)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@widget_typer.command("detail")
|
|
44
|
+
def detail_widget(
|
|
45
|
+
code: Annotated[str, typer.Argument(help="编码")],
|
|
46
|
+
) -> None:
|
|
47
|
+
"""查询卡片详情."""
|
|
48
|
+
try:
|
|
49
|
+
meta = release_list_get_by_code(MetaType.WIDGET.value, code)
|
|
50
|
+
except DataOpsError as e:
|
|
51
|
+
typer.echo(f"错误: {e.message}")
|
|
52
|
+
raise typer.Exit(code=1) from None
|
|
53
|
+
|
|
54
|
+
import json
|
|
55
|
+
|
|
56
|
+
typer.echo(json.dumps(meta.data, indent=2, ensure_ascii=False))
|
|
57
|
+
|
|
58
|
+
if __name__ == "__main__":
|
|
59
|
+
list_widget()
|
dataops_cli/runner/__init__.py
CHANGED
|
@@ -11,13 +11,13 @@ Example:
|
|
|
11
11
|
>>> from runner.utils import DatabaseConn, DuckDBManager
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
from .schemas.nacos import NacosSettings
|
|
15
15
|
from .utils import (
|
|
16
16
|
DatabaseConn,
|
|
17
|
-
DuckDBManager,
|
|
18
17
|
Neo4jConn,
|
|
19
18
|
decrypt_body,
|
|
20
19
|
encrypt_body,
|
|
20
|
+
get_service_instance,
|
|
21
21
|
getLogger,
|
|
22
22
|
parse_args,
|
|
23
23
|
print_json,
|
|
@@ -25,11 +25,12 @@ from .utils import (
|
|
|
25
25
|
|
|
26
26
|
__all__ = [
|
|
27
27
|
"DatabaseConn",
|
|
28
|
-
"DuckDBManager",
|
|
29
28
|
"Neo4jConn",
|
|
30
29
|
"decrypt_body",
|
|
31
30
|
"encrypt_body",
|
|
32
31
|
"getLogger",
|
|
33
32
|
"print_json",
|
|
34
33
|
"parse_args",
|
|
34
|
+
"NacosSettings",
|
|
35
|
+
"get_service_instance",
|
|
35
36
|
]
|
|
@@ -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"
|