Merge pull request #2924 from markparonyan/mypy-api-plus

fix(typing): resolve mypy errors in api + compute.dynamips + compute.iou + compute.vpcs + controller
This commit is contained in:
Jeremy Grossmann 2026-09-29 13:29:08 +02:00 committed by GitHub
commit 76411f1eb0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 37 additions and 42 deletions

View File

@ -19,6 +19,8 @@
FastAPI app FastAPI app
""" """
from typing import cast
from fastapi import FastAPI, Request, HTTPException, status from fastapi import FastAPI, Request, HTTPException, status
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
@ -118,7 +120,7 @@ def handle_exit(*args, **kwargs):
unicorn_exit_handler(*args, **kwargs) unicorn_exit_handler(*args, **kwargs)
UvicornServer.handle_exit = handle_exit UvicornServer.handle_exit = handle_exit # type: ignore[method-assign]
# Configure self-hosting JavaScript and CSS for docs # Configure self-hosting JavaScript and CSS for docs
@ -134,7 +136,7 @@ async def custom_swagger_ui_html():
) )
@app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False) @app.get(cast(str, app.swagger_ui_oauth2_redirect_url), include_in_schema=False)
async def swagger_ui_redirect(): async def swagger_ui_redirect():
return get_swagger_ui_oauth2_redirect_html() return get_swagger_ui_oauth2_redirect_html()

View File

@ -1645,7 +1645,7 @@ class Router(BaseNode):
await nio.start_packet_capture(output_file, data_link_type) await nio.start_packet_capture(output_file, data_link_type)
log.debug( log.debug(
'Router "{name}" [{id}]: starting packet capture on port {slot_number}/{port_number}'.format( 'Router "{name}" [{id}]: starting packet capture on port {slot_number}/{port_number}'.format(
name=self._name, id=self._id, nio_name=nio.name, slot_number=slot_number, port_number=port_number name=self._name, id=self._id, slot_number=slot_number, port_number=port_number
) )
) )
@ -1685,7 +1685,7 @@ class Router(BaseNode):
log.debug( log.debug(
'Router "{name}" [{id}]: stopping packet capture on port {slot_number}/{port_number}'.format( 'Router "{name}" [{id}]: stopping packet capture on port {slot_number}/{port_number}'.format(
name=self._name, id=self._id, nio_name=nio.name, slot_number=slot_number, port_number=port_number name=self._name, id=self._id, slot_number=slot_number, port_number=port_number
) )
) )

View File

@ -204,9 +204,8 @@ if __name__ == "__main__":
args = parser.parse_args() args = parser.parse_args()
try: try:
fd = open(args.nvram, "rb") with open(args.nvram, "rb") as fd:
nvram = fd.read() nvram = fd.read()
fd.close()
except OSError as err: except OSError as err:
sys.stderr.write(f"Error reading file: {err}\n") sys.stderr.write(f"Error reading file: {err}\n")
sys.exit(1) sys.exit(1)
@ -218,16 +217,14 @@ if __name__ == "__main__":
sys.exit(3) sys.exit(3)
try: try:
fd = open(args.startup, "wb") with open(args.startup, "wb") as out:
fd.write(startup) out.write(startup)
fd.close()
if args.private is not None: if args.private is not None:
if private is None: if private is None:
sys.stderr.write("Warning: No private config\n") sys.stderr.write("Warning: No private config\n")
else: else:
fd = open(args.private, "wb") with open(args.private, "wb") as out:
fd.write(private) out.write(private)
fd.close()
except OSError as err: except OSError as err:
sys.stderr.write(f"Error writing file: {err}\n") sys.stderr.write(f"Error writing file: {err}\n")
sys.exit(1) sys.exit(1)

View File

@ -197,22 +197,17 @@ if __name__ == "__main__":
parser.add_argument("private", metavar="private-config", nargs="?", help="private configuration") parser.add_argument("private", metavar="private-config", nargs="?", help="private configuration")
args = parser.parse_args() args = parser.parse_args()
nvram: bytes | None = None
private: bytes | None = None
try: try:
if args.create is None: if args.create is None:
fd = open(args.nvram, "rb") with open(args.nvram, "rb") as fd:
nvram = fd.read() nvram = fd.read()
fd.close() with open(args.startup, "rb") as fd:
else: startup = fd.read()
nvram = None if args.private is not None:
fd = open(args.startup, "rb") with open(args.private, "rb") as fd:
startup = fd.read() private = fd.read()
fd.close()
if args.private is None:
private = None
else:
fd = open(args.private, "rb")
private = fd.read()
fd.close()
except OSError as err: except OSError as err:
sys.stderr.write(f"Error reading file: {err}\n") sys.stderr.write(f"Error reading file: {err}\n")
sys.exit(1) sys.exit(1)
@ -224,9 +219,8 @@ if __name__ == "__main__":
sys.exit(3) sys.exit(3)
try: try:
fd = open(args.nvram, "wb") with open(args.nvram, "wb") as out:
fd.write(nvram) out.write(nvram)
fd.close()
except OSError as err: except OSError as err:
sys.stderr.write(f"Error writing file: {err}\n") sys.stderr.write(f"Error writing file: {err}\n")
sys.exit(1) sys.exit(1)

View File

@ -148,7 +148,11 @@ class VPCSVM(BaseNode):
vpcs_path = shutil.which(vpcs_path) vpcs_path = shutil.which(vpcs_path)
return vpcs_path return vpcs_path
@BaseNode.name.setter @property
def name(self):
return self._name
@name.setter
def name(self, new_name): def name(self, new_name):
""" """
Sets the name of this VPCS VM. Sets the name of this VPCS VM.
@ -358,7 +362,11 @@ class VPCSVM(BaseNode):
if self.is_running(): if self.is_running():
await self.reset_wrap_console() await self.reset_wrap_console()
@BaseNode.console_type.setter @property
def console_type(self):
return self._console_type
@console_type.setter
def console_type(self, new_console_type): def console_type(self, new_console_type):
""" """
Sets the console type for this VPCS VM. Sets the console type for this VPCS VM.

View File

@ -51,6 +51,10 @@ class Appliance:
def symbol(self): def symbol(self):
return self._data.get("symbol") return self._data.get("symbol")
@symbol.setter
def symbol(self, new_symbol):
self._data["symbol"] = new_symbol
@property @property
def name(self): def name(self):
return self._data.get("name") return self._data.get("name")
@ -63,10 +67,6 @@ class Appliance:
def versions(self): def versions(self):
return self._data.get("versions") return self._data.get("versions")
@symbol.setter
def symbol(self, new_symbol):
self._data["symbol"] = new_symbol
@property @property
def type(self): def type(self):

View File

@ -300,13 +300,7 @@ module = [
"gns3server.api.routes.controller.projects", # 16 "gns3server.api.routes.controller.projects", # 16
"gns3server.api.routes.controller.templates", # 10 "gns3server.api.routes.controller.templates", # 10
"gns3server.api.routes.controller.users", # 14 "gns3server.api.routes.controller.users", # 14
"gns3server.api.server", # 2
"gns3server.compute.dynamips.nodes.router", # 2
"gns3server.compute.iou.utils.iou_export", # 2
"gns3server.compute.iou.utils.iou_import", # 2
"gns3server.compute.virtualbox.virtualbox_vm", # 1 "gns3server.compute.virtualbox.virtualbox_vm", # 1
"gns3server.compute.vpcs.vpcs_vm", # 2
"gns3server.controller.appliance", # 2
"gns3server.controller.appliance_manager", # 5 "gns3server.controller.appliance_manager", # 5
"gns3server.controller.project", # 2 "gns3server.controller.project", # 2
"gns3server.db.repositories.api_keys", # 8 "gns3server.db.repositories.api_keys", # 8