From b8ae84031eee359aac0ba03c5d6e68ad3a1cb1d1 Mon Sep 17 00:00:00 2001 From: Mark Paronyan Date: Mon, 28 Sep 2026 04:45:19 +0000 Subject: [PATCH] fix(typing): resolve mypy errors in compute.docker vm modules --- gns3server/compute/docker/docker_vm.py | 20 +++++++++++++------- gns3server/compute/docker/iol_docker_vm.py | 20 +++++++++++++++----- pyproject.toml | 2 -- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/gns3server/compute/docker/docker_vm.py b/gns3server/compute/docker/docker_vm.py index 7d557dff2..08559b990 100644 --- a/gns3server/compute/docker/docker_vm.py +++ b/gns3server/compute/docker/docker_vm.py @@ -227,7 +227,11 @@ class DockerVM(BaseNode): return display display += 1 - @BaseNode.name.setter + @property + def name(self): + return self._name + + @name.setter def name(self, new_name): """ Sets the name of this Qemu VM. @@ -737,13 +741,15 @@ class DockerVM(BaseNode): params["Env"].append("{}={}".format(var_name, formatted)) if self._environment: - for e in self._environment.strip().split("\n"): - e = e.strip() - if e.split("=")[0] == "": - self.project.emit("log.warning", {"message": f"{self.name} has invalid environment variable: {e}"}) + for env in self._environment.strip().split("\n"): + env = env.strip() + if env.split("=")[0] == "": + self.project.emit( + "log.warning", {"message": f"{self.name} has invalid environment variable: {env}"} + ) continue - if not e.startswith("GNS3_"): - formatted = self._format_env(variables, e) + if not env.startswith("GNS3_"): + formatted = self._format_env(variables, env) vm_name = self._name.replace(",", ",,") project_path = self.project.path.replace(",", ",,") formatted = formatted.replace("%vm-name%", '"' + vm_name.replace('"', '\\"') + '"') diff --git a/gns3server/compute/docker/iol_docker_vm.py b/gns3server/compute/docker/iol_docker_vm.py index ff0ab2b00..070195e6b 100644 --- a/gns3server/compute/docker/iol_docker_vm.py +++ b/gns3server/compute/docker/iol_docker_vm.py @@ -92,8 +92,8 @@ class IOLDockerVM(VendorDockerVM): # controller-allocated application id (MACs would flip to the fallback # hash, colliding with the allocation pool) and any pending # startup-config delivered by a PUT. - _application_id = None - _startup_config_content = None + _application_id: int | None = None + _startup_config_content: str | None = None _startup_config_dirty = False def _parse_vendor_environment(self): @@ -119,7 +119,7 @@ class IOLDockerVM(VendorDockerVM): pass @property - def application_id(self) -> int: + def application_id(self) -> int | None: """ IOL application ID: drives interface MACs (aabb.cc{app}{iface}) and the NVRAM file name. Allocated by the controller from the IOL Docker @@ -178,6 +178,8 @@ class IOLDockerVM(VendorDockerVM): initial configuration dialog. """ + if self._startup_config_content is None: + return content = self._startup_config_content.replace("%h", self._name) nvram_file = self._iol_nvram_file() os.makedirs(os.path.dirname(nvram_file), exist_ok=True) @@ -189,7 +191,11 @@ class IOLDockerVM(VendorDockerVM): raise DockerError(f"Could not write IOL startup-config to NVRAM of container '{self._name}': {e}") log.debug("IOL container '%s': startup-config written to %s", self._name, nvram_file) - @DockerVM.name.setter + @property + def name(self): + return self._name + + @name.setter def name(self, new_name): """ Override: keep the hostname line inside the NVRAM in sync with the @@ -228,7 +234,11 @@ class IOLDockerVM(VendorDockerVM): result["startup_config_content"] = self._startup_config_content return result - @DockerVM.adapters.setter + @property + def adapters(self): + return len(self._ethernet_adapters) + + @adapters.setter def adapters(self, adapters): """ Override: one IOL adapter is a 4-port unit — the IOU model. The diff --git a/pyproject.toml b/pyproject.toml index 21c8a9ba6..4b0d7a76c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -361,8 +361,6 @@ module = [ "gns3server.api.routes.controller.users", # 14 "gns3server.api.routes.index", # 1 "gns3server.api.server", # 2 - "gns3server.compute.docker.docker_vm", # 3 - "gns3server.compute.docker.iol_docker_vm", # 3 "gns3server.compute.dynamips.nodes.router", # 2 "gns3server.compute.iou.iou_vm", # 4 "gns3server.compute.iou.utils.iou_export", # 2