diff --git a/gns3server/compute/qemu/qemu_vm.py b/gns3server/compute/qemu/qemu_vm.py
index f12b10f81..8b97b0c14 100644
--- a/gns3server/compute/qemu/qemu_vm.py
+++ b/gns3server/compute/qemu/qemu_vm.py
@@ -618,7 +618,7 @@ class QemuVM(KernelDatapathMixin, BaseNode):
else:
await command(f"eject -f {device}")
log.debug('QEMU VM "%s" has changed %s to %s', self._name, name, image)
- except (asyncio.TimeoutError, asyncio.IncompleteReadError, OSError) as e:
+ except (TimeoutError, asyncio.IncompleteReadError, OSError) as e:
raise QemuError(f"Could not change CD/DVD media: {e}") from e
finally:
writer.close()
diff --git a/gns3server/compute/ubridge/tc_probe.py b/gns3server/compute/ubridge/tc_probe.py
index 008919fcd..3da66c42e 100644
--- a/gns3server/compute/ubridge/tc_probe.py
+++ b/gns3server/compute/ubridge/tc_probe.py
@@ -363,7 +363,7 @@ async def _probe_bridge_tap(path, config, timeout): # noqa: ASYNC109 - operatio
shutil.rmtree(working_dir, ignore_errors=True)
-async def probe_vxlan_support(timeout: float = 15.0):
+async def probe_vxlan_support(timeout: float = 15.0): # noqa: ASYNC109 - operation-specific timeout is intentional
"""
Whether this host's uBridge can create a VXLAN device (the ``vxlan``
module) — the carrier a cross-compute kernel link tunnels through.
@@ -395,7 +395,7 @@ async def probe_vxlan_support(timeout: float = 15.0):
return supported
-async def _probe_vxlan(path, config, timeout):
+async def _probe_vxlan(path, config, timeout): # noqa: ASYNC109 - operation-specific timeout is intentional
"""
Spawn a throwaway uBridge and run one ``vxlan create``/``delete`` cycle.
The scratch name (uuid suffix) cannot collide with a real link's
@@ -442,7 +442,7 @@ async def _probe_vxlan(path, config, timeout):
try:
return await asyncio.wait_for(ask(), timeout=timeout)
- except (UbridgeError, OSError, asyncio.TimeoutError, ValueError) as e:
+ except (TimeoutError, UbridgeError, OSError, ValueError) as e:
# Old build ("Unknown command"), missing module, or no
# CAP_NET_ADMIN: unknown.
log.debug("uBridge vxlan-module probe failed: %s", e)
diff --git a/gns3server/controller/node.py b/gns3server/controller/node.py
index e656f2e62..419950839 100644
--- a/gns3server/controller/node.py
+++ b/gns3server/controller/node.py
@@ -976,7 +976,7 @@ class Node:
try:
await self._start_on_compute(data)
break
- except asyncio.TimeoutError:
+ except TimeoutError:
raise ControllerTimeoutError(f"Timeout when starting {self._name}")
except ComputeError as e:
conflicted = self._vxlan_conflicted_link(e)
diff --git a/gns3server/db/repositories/rbac.py b/gns3server/db/repositories/rbac.py
index 2afb6b073..93cdbe32a 100644
--- a/gns3server/db/repositories/rbac.py
+++ b/gns3server/db/repositories/rbac.py
@@ -331,7 +331,7 @@ class RbacRepository(BaseRepository):
Retrieve all user ACEs matching the user_id and privilege name.
"""
- query: Select[tuple[Any, Any, Any, Any]] = (
+ query: Select[Any, Any, Any, Any] = (
select(models.ACE.path, models.ACE.propagate, models.ACE.allowed, models.Privilege.name)
.join(models.Privilege.roles)
.join(models.Role.acl_entries)
@@ -349,7 +349,7 @@ class RbacRepository(BaseRepository):
Retrieve all group ACEs matching the user_id and privilege name.
"""
- query: Select[tuple[Any, Any, Any, Any]] = (
+ query: Select[Any, Any, Any, Any] = (
select(models.ACE.path, models.ACE.propagate, models.ACE.allowed, models.Privilege.name)
.join(models.Privilege.roles)
.join(models.Role.acl_entries)
diff --git a/gns3server/schemas/compute/cloud_nodes.py b/gns3server/schemas/compute/cloud_nodes.py
index a0d36afec..4adfbee35 100644
--- a/gns3server/schemas/compute/cloud_nodes.py
+++ b/gns3server/schemas/compute/cloud_nodes.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
import re
-from enum import Enum
+from enum import StrEnum
from typing import List, Optional, Union
from uuid import UUID
diff --git a/gns3server/schemas/compute/qemu_nodes.py b/gns3server/schemas/compute/qemu_nodes.py
index 33561df0a..0fef97597 100644
--- a/gns3server/schemas/compute/qemu_nodes.py
+++ b/gns3server/schemas/compute/qemu_nodes.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from enum import Enum
+from enum import StrEnum
from typing import List, Literal, Optional
from uuid import UUID