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.
Files changed (31) hide show
  1. {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/METADATA +1 -4
  2. {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/RECORD +30 -18
  3. dataops_cli/__init__.py +1 -1
  4. dataops_cli/cli/__init__.py +2 -27
  5. dataops_cli/cli/auth.py +2 -0
  6. dataops_cli/cli/datasource.py +11 -0
  7. dataops_cli/cli/factory.py +58 -0
  8. dataops_cli/cli/ref.py +1 -1
  9. dataops_cli/cli/table.py +1 -1
  10. dataops_cli/cli/widget.py +59 -0
  11. dataops_cli/runner/__init__.py +4 -3
  12. dataops_cli/runner/schemas/nacos/__init__.py +5 -0
  13. dataops_cli/runner/schemas/nacos/config.py +40 -0
  14. dataops_cli/runner/schemas/nacos/constants.py +235 -0
  15. dataops_cli/runner/schemas/nacos/instance.py +103 -0
  16. dataops_cli/runner/schemas/nacos/nacos_exception.py +44 -0
  17. dataops_cli/runner/schemas/nacos/naming_param.py +61 -0
  18. dataops_cli/runner/schemas/nacos/naming_request.py +84 -0
  19. dataops_cli/runner/schemas/nacos/naming_response.py +51 -0
  20. dataops_cli/runner/schemas/nacos/preserved_metadata_key.py +10 -0
  21. dataops_cli/runner/schemas/nacos/service.py +119 -0
  22. dataops_cli/runner/utils/__init__.py +2 -2
  23. dataops_cli/runner/utils/nacos.py +35 -38
  24. dataops_cli/schems/__init__.py +1 -0
  25. dataops_cli/schems/widget.py +538 -0
  26. dataops_cli/sdk/ref.py +2 -2
  27. dataops_cli/sdk/table.py +2 -2
  28. dataops_cli/runner/schemas/nacos.py +0 -89
  29. {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/WHEEL +0 -0
  30. {data_ops_cli-0.2.0.dist-info → data_ops_cli-0.2.1.dist-info}/entry_points.txt +0 -0
  31. {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.0
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=Zn1KFblwuFHiDRdRAiRnDBRkbPttWh44jKa5zG2ov0E,22
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=VC05ewcqgrl4CEQB3lBJObedhXB2xNISMUIlaqL02eo,864
7
- dataops_cli/cli/auth.py,sha256=GL_rHimICEaVCNXCOuDEqWg2Ass1t9QzmRgzgFQwb8o,5532
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=bObkRXcH0qp3oFXMKSsQ2vQuKuEoB9oLg1Ip891atKc,3117
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=rdmD2qpReeNStjy_F4lIp86KVKmO4yAC4YXs2IN7m6w,4770
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=VTzZNPBaAkDhhyspsLb0_FxypTfb50ykbn0wE2-hKFM,7495
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=VeGCyjkoDgXTBhCi4bc3Kvocx6rwuzz7VPysy_LLL74,734
18
- dataops_cli/runner/schemas/nacos.py,sha256=Q8gGgeb7nf623HXPPHuLPidDvH2hdPSF0p13YEKnP98,3561
19
- dataops_cli/runner/utils/__init__.py,sha256=1RdiAnuiFAC4FW7pFJT0YSseOYRvW1iegeas4_dTXlo,875
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=c41nB23-nc40nK2kcLfu4AMjUB2HDqQ-aR31S1-KOhs,3252
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=sTD_M52uJ00z_9YGau6YiLWvQqTJbPzt5kZTq1y4hU8,342
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=BcDzxhFAcppaPrFtDJhvyf_fT8yb4HmpAjmKh4enx1w,1961
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=5YtPW9Ci7H30dBjprnfHoWDdofHTtnI3Sl-kfaVJmGI,5732
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.0.dist-info/METADATA,sha256=odgkM6RsAeQ5UFg-PEBJqBWouMMGY8gkEzk4Zk9_BrU,600
54
- data_ops_cli-0.2.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
55
- data_ops_cli-0.2.0.dist-info/entry_points.txt,sha256=vc_2b5byVdLofaQ2ppuPM484AcaZnGsaHdcMKmtcSkU,53
56
- data_ops_cli-0.2.0.dist-info/top_level.txt,sha256=KFHplpKxwE9_wWypzVLESa4eLkOBsk-iUD_Qbld2IcY,12
57
- data_ops_cli-0.2.0.dist-info/RECORD,,
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.0"
1
+ __version__ = "0.2.1"
@@ -1,28 +1,3 @@
1
- from __future__ import annotations
1
+ from dataops_cli.cli.factory import create_app
2
2
 
3
- import typer
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)
@@ -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
- MetaType, typer.Option(help="允许的被引用类型,使用 , 分割(e.g. table,dict,dataset)")
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, query)
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()
@@ -11,13 +11,13 @@ Example:
11
11
  >>> from runner.utils import DatabaseConn, DuckDBManager
12
12
  """
13
13
 
14
- # from .schemas.nacos import NacosSettings
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,5 @@
1
+ from .config import NacosSettings
2
+ from .instance import Instance
3
+ from .service import Service
4
+
5
+ __all__ = ['Service', 'Instance', 'NacosSettings']
@@ -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"