From 21977359be1242db6c37b5a9b7b30ab6910130a1 Mon Sep 17 00:00:00 2001 From: Andrey Tikhonov Date: Wed, 23 Jul 2025 15:24:57 +0200 Subject: [PATCH] Return exception group in case of errors --- pyproject.toml | 1 + src/gnetcli_adapter/gnetcli_adapter.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c495e09..b8aa1b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,7 @@ build-backend = "flit_core.buildapi" [project] name = "gnetcli_adapter" dependencies = [ + "exceptiongroup>=1.1.3; python_version<'3.11'", "annet>=3.2.0", "gnetclisdk>=1.0.90", "pydantic_settings", diff --git a/src/gnetcli_adapter/gnetcli_adapter.py b/src/gnetcli_adapter/gnetcli_adapter.py index e98e139..e90f380 100644 --- a/src/gnetcli_adapter/gnetcli_adapter.py +++ b/src/gnetcli_adapter/gnetcli_adapter.py @@ -32,6 +32,14 @@ import atexit import shutil import os.path +try: + from builtins import ( # type: ignore[attr-defined, unused-ignore] + ExceptionGroup, + ) +except ImportError: + from exceptiongroup import ( # type: ignore[no-redef, import-not-found, unused-ignore] + ExceptionGroup, + ) breed_to_device = { "routeros": "ros", @@ -467,7 +475,7 @@ async def deploy( cmds: CommandList, args: DeployOptions, progress_bar: ProgressBar | None = None, - ) -> tuple[list[Exception], list[pb.CMDResult]]: + ) -> Exception | None: gnetcli_device = breed_to_device.get(device.breed, device.breed) ip = get_device_ip(device) host_params = HostParams( @@ -506,7 +514,10 @@ async def deploy( tracker.finish_err(f"Seen {len(seen_exc)} exceptions") else: tracker.finish_ok("All done") - return seen_exc, results + + if seen_exc: + return ExceptionGroup("Deploy failed with exceptions", seen_exc) + return None async def _deploy( self,