diff --git a/gns3server/api/routes/controller/__init__.py b/gns3server/api/routes/controller/__init__.py
index 9236e17c0..e22d3d507 100644
--- a/gns3server/api/routes/controller/__init__.py
+++ b/gns3server/api/routes/controller/__init__.py
@@ -21,9 +21,7 @@ from gns3server.agent import AI_COPILOT_AVAILABLE
# Conditionally import AI-dependent routes
if AI_COPILOT_AVAILABLE:
- from . import chat
- from . import copilot
- from . import llm_model_configs
+ from . import chat, copilot, llm_model_configs
_chat_router = chat.router
_copilot_router = copilot.router
@@ -44,28 +42,29 @@ else:
)
-from . import controller
-from . import appliances
-from . import computes
-from . import drawings
-from . import gns3vm
-from . import links
-from . import nodes
-from . import projects
-from . import snapshots
-from . import symbols
-from . import templates
-from . import images
-from . import users
-from . import groups
-from . import roles
-from . import acl
-from . import pools
-from . import privileges
-from . import api_keys
-from . import netmiko
-from . import settings
-
+from . import (
+ acl,
+ api_keys,
+ appliances,
+ computes,
+ controller,
+ drawings,
+ gns3vm,
+ groups,
+ images,
+ links,
+ netmiko,
+ nodes,
+ pools,
+ privileges,
+ projects,
+ roles,
+ settings,
+ snapshots,
+ symbols,
+ templates,
+ users,
+)
from .dependencies.authentication import get_current_active_user
router = APIRouter()
diff --git a/gns3server/api/routes/controller/acl.py b/gns3server/api/routes/controller/acl.py
index ccc6b7a1d..7febf226b 100644
--- a/gns3server/api/routes/controller/acl.py
+++ b/gns3server/api/routes/controller/acl.py
@@ -19,29 +19,27 @@
API routes for ACL.
"""
+import logging
import re
+from typing import Iterator, List, Optional, Sequence
+from uuid import UUID
from fastapi import APIRouter, Depends, Request, status
from fastapi.routing import APIRoute, _IncludedRouter
from starlette.routing import BaseRoute, Mount
-from uuid import UUID
-from typing import Iterator, List, Optional, Sequence
-
-from gns3server import schemas
-from gns3server.controller.controller_error import ControllerBadRequestError, ControllerNotFoundError
-
-from gns3server.controller import Controller
import gns3server.db.models as models
-from gns3server.db.repositories.users import UsersRepository
-from gns3server.db.repositories.rbac import RbacRepository
+from gns3server import schemas
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerNotFoundError
from gns3server.db.repositories.images import ImagesRepository
+from gns3server.db.repositories.rbac import RbacRepository
from gns3server.db.repositories.templates import TemplatesRepository
+from gns3server.db.repositories.users import UsersRepository
+
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/api_keys.py b/gns3server/api/routes/controller/api_keys.py
index a3bfa4b14..42f1d66c2 100644
--- a/gns3server/api/routes/controller/api_keys.py
+++ b/gns3server/api/routes/controller/api_keys.py
@@ -18,18 +18,18 @@
API routes for API key management.
"""
+import logging
import secrets
-import bcrypt
-from uuid import uuid4, UUID
+from uuid import UUID, uuid4
-from fastapi import APIRouter, Depends, status, HTTPException
+import bcrypt
+from fastapi import APIRouter, Depends, HTTPException, status
from gns3server import schemas
from gns3server.db.repositories.api_keys import ApiKeysRepository
-from .dependencies.database import get_repository
-from .dependencies.authentication import get_current_active_user
-import logging
+from .dependencies.authentication import get_current_active_user
+from .dependencies.database import get_repository
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/appliances.py b/gns3server/api/routes/controller/appliances.py
index 46c187940..ad8645554 100644
--- a/gns3server/api/routes/controller/appliances.py
+++ b/gns3server/api/routes/controller/appliances.py
@@ -19,24 +19,22 @@ API routes for appliances.
"""
import logging
+from typing import List, Optional, Union
+from uuid import UUID
from fastapi import APIRouter, Depends, status
-from typing import Optional, List, Union
-from uuid import UUID
from gns3server import schemas
from gns3server.controller import Controller
-from gns3server.controller.controller_error import ControllerError, ControllerBadRequestError, ControllerNotFoundError
-
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerError, ControllerNotFoundError
from gns3server.db.repositories.images import ImagesRepository
-from gns3server.db.repositories.templates import TemplatesRepository
from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.templates import TemplatesRepository
from .dependencies.authentication import get_current_active_user
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/chat.py b/gns3server/api/routes/controller/chat.py
index e55e722f7..3573b5e1e 100644
--- a/gns3server/api/routes/controller/chat.py
+++ b/gns3server/api/routes/controller/chat.py
@@ -24,16 +24,16 @@ import json
import logging
import uuid
from typing import Any, List, Optional
+from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import StreamingResponse
-from uuid import UUID
from gns3server import schemas
-from gns3server.controller import Controller
-from gns3server.controller.project import Project
-from gns3server.controller.controller_error import ControllerNotFoundError
from gns3server.agent.gns3_copilot.project_agent_manager import get_project_agent_manager
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerNotFoundError
+from gns3server.controller.project import Project
from gns3server.db.tasks import get_user_llm_config_full
from .dependencies.authentication import get_current_active_user
diff --git a/gns3server/api/routes/controller/computes.py b/gns3server/api/routes/controller/computes.py
index c62c859ac..6dbaa30cd 100644
--- a/gns3server/api/routes/controller/computes.py
+++ b/gns3server/api/routes/controller/computes.py
@@ -18,16 +18,17 @@
API routes for computes.
"""
-from fastapi import APIRouter, Body, Depends, status
-from typing import Any, List, Union, Optional
+from typing import Any, List, Optional, Union
from uuid import UUID
-from gns3server.controller import Controller
+from fastapi import APIRouter, Body, Depends, status
+
import gns3server.db.models as models
+from gns3server import schemas
+from gns3server.controller import Controller
from gns3server.db.repositories.computes import ComputesRepository
from gns3server.db.repositories.rbac import RbacRepository
from gns3server.services.computes import ComputesService
-from gns3server import schemas
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
diff --git a/gns3server/api/routes/controller/controller.py b/gns3server/api/routes/controller/controller.py
index bd6502135..25999bdd9 100644
--- a/gns3server/api/routes/controller/controller.py
+++ b/gns3server/api/routes/controller/controller.py
@@ -15,30 +15,28 @@
# along with this program. If not, see .
import asyncio
-import signal
+import logging
import os
+import signal
import time
-import psutil
+from typing import Dict, List
-from fastapi import APIRouter, FastAPI, Request, Depends, WebSocket, WebSocketDisconnect, status
-from fastapi.responses import StreamingResponse
+import psutil
+from fastapi import APIRouter, Depends, FastAPI, Request, WebSocket, WebSocketDisconnect, status
from fastapi.encoders import jsonable_encoder
+from fastapi.responses import StreamingResponse
from fastapi.routing import Mount
from websockets.exceptions import ConnectionClosed, WebSocketException
-from typing import List, Dict
-
+from gns3server import schemas
+from gns3server.agent.web_wireshark.stats import collect_webwireshark_stats
from gns3server.config import Config
from gns3server.controller import Controller
-from gns3server.agent.web_wireshark.stats import collect_webwireshark_stats
-from gns3server.version import __version__
from gns3server.controller.controller_error import ControllerError, ControllerForbiddenError
-from gns3server import schemas
+from gns3server.version import __version__
from .dependencies.authentication import get_current_active_user, get_current_active_user_from_websocket
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/copilot.py b/gns3server/api/routes/controller/copilot.py
index 050792392..489d96cb3 100644
--- a/gns3server/api/routes/controller/copilot.py
+++ b/gns3server/api/routes/controller/copilot.py
@@ -21,7 +21,9 @@ API routes for GNS3 Copilot global operations (non-project).
import logging
from fastapi import APIRouter, Depends, HTTPException, status
+
from gns3server import schemas
+
from .dependencies.authentication import get_current_active_user
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/dependencies/authentication.py b/gns3server/api/routes/controller/dependencies/authentication.py
index 1517e0572..b5689ade8 100644
--- a/gns3server/api/routes/controller/dependencies/authentication.py
+++ b/gns3server/api/routes/controller/dependencies/authentication.py
@@ -17,21 +17,22 @@
import asyncio
import hashlib
import logging
-import bcrypt
-
-from fastapi import Request, Query, Depends, HTTPException, WebSocket, status
-from fastapi.security import OAuth2PasswordBearer
from typing import Optional
from uuid import UUID
-from gns3server import schemas
+import bcrypt
+from fastapi import Depends, HTTPException, Query, Request, WebSocket, status
+from fastapi.security import OAuth2PasswordBearer
+
import gns3server.db.models as models
+from gns3server import schemas
from gns3server.db.repositories.api_keys import ApiKeysRepository
-from gns3server.db.repositories.users import UsersRepository
from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.users import UsersRepository
from gns3server.schemas.controller.tokens import TokenData
-from gns3server.services import auth_service, access_ticket_service
+from gns3server.services import access_ticket_service, auth_service
from gns3server.services.access_tickets import TICKET_PREFIX
+
from .database import get_repository
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/dependencies/database.py b/gns3server/api/routes/controller/dependencies/database.py
index 86375507d..e9a3001ea 100644
--- a/gns3server/api/routes/controller/dependencies/database.py
+++ b/gns3server/api/routes/controller/dependencies/database.py
@@ -15,9 +15,10 @@
# along with this program. If not, see .
from typing import AsyncGenerator, Callable, Type
+
from fastapi import Depends
-from starlette.requests import HTTPConnection
from sqlalchemy.ext.asyncio import AsyncSession
+from starlette.requests import HTTPConnection
from gns3server.db.repositories.base import BaseRepository
diff --git a/gns3server/api/routes/controller/dependencies/rbac.py b/gns3server/api/routes/controller/dependencies/rbac.py
index 995055e1d..447e6b0b6 100644
--- a/gns3server/api/routes/controller/dependencies/rbac.py
+++ b/gns3server/api/routes/controller/dependencies/rbac.py
@@ -14,16 +14,17 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+import logging
import re
-from fastapi import Request, WebSocket, Depends, HTTPException
+from fastapi import Depends, HTTPException, Request, WebSocket
+
from gns3server import schemas
from gns3server.db.repositories.rbac import RbacRepository
+
from .authentication import get_current_active_user, get_current_active_user_from_websocket
from .database import get_repository
-import logging
-
log = logging.getLogger()
diff --git a/gns3server/api/routes/controller/drawings.py b/gns3server/api/routes/controller/drawings.py
index 6df9ddd91..6b9cb3553 100644
--- a/gns3server/api/routes/controller/drawings.py
+++ b/gns3server/api/routes/controller/drawings.py
@@ -18,14 +18,15 @@
API routes for drawings.
"""
-from fastapi import APIRouter, Depends, status
-from fastapi.encoders import jsonable_encoder
from typing import Any, List
from uuid import UUID
+from fastapi import APIRouter, Depends, status
+from fastapi.encoders import jsonable_encoder
+
+from gns3server import schemas
from gns3server.controller import Controller
from gns3server.db.repositories.rbac import RbacRepository
-from gns3server import schemas
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
diff --git a/gns3server/api/routes/controller/gns3vm.py b/gns3server/api/routes/controller/gns3vm.py
index d019189bd..e0ae90eba 100644
--- a/gns3server/api/routes/controller/gns3vm.py
+++ b/gns3server/api/routes/controller/gns3vm.py
@@ -19,12 +19,13 @@
API routes for managing the GNS3 VM.
"""
-from fastapi import APIRouter
-from fastapi.encoders import jsonable_encoder
from typing import List
-from gns3server.controller import Controller
+from fastapi import APIRouter
+from fastapi.encoders import jsonable_encoder
+
from gns3server import schemas
+from gns3server.controller import Controller
router = APIRouter()
diff --git a/gns3server/api/routes/controller/groups.py b/gns3server/api/routes/controller/groups.py
index 1b5de02d2..4022a6053 100644
--- a/gns3server/api/routes/controller/groups.py
+++ b/gns3server/api/routes/controller/groups.py
@@ -19,26 +19,25 @@
API routes for user groups.
"""
-from fastapi import APIRouter, Depends, status
-from uuid import UUID
+import logging
from typing import List, Optional
+from uuid import UUID
-from gns3server import schemas
-from gns3server.controller.controller_error import (
- ControllerError,
- ControllerBadRequestError,
- ControllerNotFoundError,
- ControllerForbiddenError,
-)
+from fastapi import APIRouter, Depends, status
import gns3server.db.models as models
-from gns3server.db.repositories.users import UsersRepository
+from gns3server import schemas
+from gns3server.controller.controller_error import (
+ ControllerBadRequestError,
+ ControllerError,
+ ControllerForbiddenError,
+ ControllerNotFoundError,
+)
from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.users import UsersRepository
-from .dependencies.rbac import has_privilege
from .dependencies.database import get_repository
-
-import logging
+from .dependencies.rbac import has_privilege
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/images.py b/gns3server/api/routes/controller/images.py
index 0496e29ee..981774419 100644
--- a/gns3server/api/routes/controller/images.py
+++ b/gns3server/api/routes/controller/images.py
@@ -18,40 +18,40 @@
API routes for images.
"""
-import os
import logging
-import urllib.parse
+import os
import tempfile
+import urllib.parse
+from typing import List, Literal, Optional
-from fastapi import APIRouter, Request, Response, Depends, Query, status
+from fastapi import APIRouter, Depends, Query, Request, Response, status
from fastapi.encoders import jsonable_encoder
-from starlette.requests import ClientDisconnect
-from sqlalchemy.orm.exc import MultipleResultsFound
from sqlalchemy.exc import SQLAlchemyError
-from typing import List, Optional, Literal
+from sqlalchemy.orm.exc import MultipleResultsFound
+from starlette.requests import ClientDisconnect
+import gns3server.db.models as models
from gns3server import schemas
-from gns3server.config import Config
from gns3server.compute.qemu import Qemu
+from gns3server.config import Config
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import (
+ ControllerBadRequestError,
+ ControllerError,
+ ControllerForbiddenError,
+ ControllerNotFoundError,
+)
+from gns3server.db.repositories.images import ImagesRepository
+from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.templates import TemplatesRepository
+from gns3server.services.image_reconciliation import get_image_reconciliation_service
+from gns3server.utils.image_inventory import ImageLockBusy, contained_path, fingerprint, image_lock, publish_image
from gns3server.utils.images import (
InvalidImageError,
- write_image,
- read_image_info,
default_images_directory,
get_builtin_disks,
-)
-import gns3server.db.models as models
-from gns3server.db.repositories.images import ImagesRepository
-from gns3server.db.repositories.templates import TemplatesRepository
-from gns3server.db.repositories.rbac import RbacRepository
-from gns3server.controller import Controller
-from gns3server.services.image_reconciliation import get_image_reconciliation_service
-from gns3server.utils.image_inventory import contained_path, image_lock, publish_image, fingerprint, ImageLockBusy
-from gns3server.controller.controller_error import (
- ControllerError,
- ControllerNotFoundError,
- ControllerForbiddenError,
- ControllerBadRequestError,
+ read_image_info,
+ write_image,
)
from .dependencies.authentication import get_current_active_user
diff --git a/gns3server/api/routes/controller/links.py b/gns3server/api/routes/controller/links.py
index 2f5eddee3..6d805d4ae 100644
--- a/gns3server/api/routes/controller/links.py
+++ b/gns3server/api/routes/controller/links.py
@@ -19,31 +19,30 @@ API routes for links.
"""
import asyncio
+import logging
import os
-import multidict
-import aiohttp
-
-from fastapi import APIRouter, Depends, Request, status, WebSocket
-from fastapi.responses import FileResponse, StreamingResponse
-from fastapi.encoders import jsonable_encoder
from typing import Any, List, Union
from uuid import UUID, uuid4
+import aiohttp
+import multidict
+from fastapi import APIRouter, Depends, Request, WebSocket, status
+from fastapi.encoders import jsonable_encoder
+from fastapi.responses import FileResponse, StreamingResponse
+
+from gns3server import schemas
+from gns3server.agent.web_wireshark.manager import WebWiresharkManager
from gns3server.controller import Controller
from gns3server.controller.controller_error import ControllerError
+from gns3server.controller.link import _UNSET, Link
from gns3server.db.repositories.rbac import RbacRepository
-from gns3server.controller.link import Link, _UNSET
from gns3server.utils.http_client import HTTPClient
from gns3server.utils.port_allocator import link_id_to_port
from gns3server.utils.websocket_to_websocket import websocket_proxy
-from gns3server import schemas
-from gns3server.agent.web_wireshark.manager import WebWiresharkManager
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege, has_privilege_on_websocket
-import logging
-
log = logging.getLogger(__name__)
responses: dict[int | str, dict[str, Any]] = {
diff --git a/gns3server/api/routes/controller/llm_model_configs.py b/gns3server/api/routes/controller/llm_model_configs.py
index c36912a02..b7675bf6d 100644
--- a/gns3server/api/routes/controller/llm_model_configs.py
+++ b/gns3server/api/routes/controller/llm_model_configs.py
@@ -19,24 +19,23 @@
API routes for LLM model configurations.
"""
-from fastapi import APIRouter, Depends, HTTPException, status
-from uuid import UUID
+import logging
from typing import List
+from uuid import UUID
+
+from fastapi import APIRouter, Depends, HTTPException, status
from gns3server import schemas
from gns3server.controller.controller_error import (
ControllerBadRequestError,
ControllerNotFoundError,
)
-
from gns3server.db.repositories.llm_model_configs import LLMModelConfigsRepository
from gns3server.db.repositories.users import UsersRepository
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/netmiko.py b/gns3server/api/routes/controller/netmiko.py
index 44c9c9f42..3e71d67c8 100644
--- a/gns3server/api/routes/controller/netmiko.py
+++ b/gns3server/api/routes/controller/netmiko.py
@@ -19,6 +19,7 @@
API routes for Netmiko metadata.
"""
+import logging
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, status
@@ -27,8 +28,6 @@ from gns3server import schemas
from .dependencies.authentication import get_current_active_user
-import logging
-
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/nodes.py b/gns3server/api/routes/controller/nodes.py
index 2b691e098..1395a60ea 100644
--- a/gns3server/api/routes/controller/nodes.py
+++ b/gns3server/api/routes/controller/nodes.py
@@ -18,33 +18,32 @@
API routes for nodes.
"""
-import aiohttp
import asyncio
import contextlib
import ipaddress
+import logging
+from typing import Any, Callable, List, Optional
+from uuid import UUID
-from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect, Request, Response, status, Query, HTTPException
+import aiohttp
+from fastapi import APIRouter, Depends, HTTPException, Query, Request, Response, WebSocket, WebSocketDisconnect, status
from fastapi.encoders import jsonable_encoder
from fastapi.responses import StreamingResponse
from fastapi.routing import APIRoute
-from typing import Any, List, Callable, Optional
-from uuid import UUID
-from gns3server.controller import Controller
+from gns3server import schemas
from gns3server.config import Config
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerForbiddenError
from gns3server.controller.node import Node
from gns3server.controller.project import Project
+from gns3server.db.repositories.rbac import RbacRepository
from gns3server.utils import force_unix_path
from gns3server.utils.http_client import HTTPClient
-from gns3server.controller.controller_error import ControllerForbiddenError, ControllerBadRequestError
-from gns3server.db.repositories.rbac import RbacRepository
-from gns3server import schemas
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege, has_privilege_on_websocket
-import logging
-
log = logging.getLogger(__name__)
node_locks: dict[str, dict[str, Any]] = {}
diff --git a/gns3server/api/routes/controller/pools.py b/gns3server/api/routes/controller/pools.py
index 882c05264..71a01a2ce 100644
--- a/gns3server/api/routes/controller/pools.py
+++ b/gns3server/api/routes/controller/pools.py
@@ -19,22 +19,21 @@
API routes for resource pools.
"""
-from fastapi import APIRouter, Depends, status
-from uuid import UUID
-from typing import List, Optional
-
-from gns3server import schemas
-from gns3server.controller.controller_error import ControllerError, ControllerBadRequestError, ControllerNotFoundError
-
-from gns3server.controller import Controller
-import gns3server.db.models as models
-from gns3server.db.repositories.rbac import RbacRepository
-from gns3server.db.repositories.pools import ResourcePoolsRepository
-
-from .dependencies.rbac import has_privilege
-from .dependencies.database import get_repository
-
import logging
+from typing import List, Optional
+from uuid import UUID
+
+from fastapi import APIRouter, Depends, status
+
+import gns3server.db.models as models
+from gns3server import schemas
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerError, ControllerNotFoundError
+from gns3server.db.repositories.pools import ResourcePoolsRepository
+from gns3server.db.repositories.rbac import RbacRepository
+
+from .dependencies.database import get_repository
+from .dependencies.rbac import has_privilege
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/privileges.py b/gns3server/api/routes/controller/privileges.py
index 1f34ec1ff..88b7481b9 100644
--- a/gns3server/api/routes/controller/privileges.py
+++ b/gns3server/api/routes/controller/privileges.py
@@ -15,14 +15,16 @@
API route for privileges
"""
-from typing import List
-import gns3server.db.models as models
-from gns3server.db.repositories.rbac import RbacRepository
-from .dependencies.database import get_repository
-from fastapi import APIRouter, Depends
import logging
+from typing import List
+from fastapi import APIRouter, Depends
+
+import gns3server.db.models as models
from gns3server import schemas
+from gns3server.db.repositories.rbac import RbacRepository
+
+from .dependencies.database import get_repository
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/projects.py b/gns3server/api/routes/controller/projects.py
index 83dfcff8e..fab2691d2 100644
--- a/gns3server/api/routes/controller/projects.py
+++ b/gns3server/api/routes/controller/projects.py
@@ -18,44 +18,45 @@
API routes for projects.
"""
-import os
import asyncio
+import logging
+import os
import tempfile
-import aiofiles
import time
import urllib.parse
-import gns3server.utils.zipfile_zstd as zipfile
-import logging
+import aiofiles
+
+import gns3server.utils.zipfile_zstd as zipfile
log = logging.getLogger()
-from fastapi import APIRouter, Depends, Request, Body, HTTPException, status, WebSocket, WebSocketDisconnect
-from fastapi.encoders import jsonable_encoder
-from fastapi.responses import StreamingResponse, FileResponse
-from websockets.exceptions import ConnectionClosed, WebSocketException
from typing import Any, List, Optional
from uuid import UUID
+from fastapi import APIRouter, Body, Depends, HTTPException, Request, WebSocket, WebSocketDisconnect, status
+from fastapi.encoders import jsonable_encoder
+from fastapi.responses import FileResponse, StreamingResponse
+from websockets.exceptions import ConnectionClosed, WebSocketException
+
from gns3server import schemas
-from gns3server.controller import Controller
-from gns3server.controller.project import Project
-from gns3server.controller.link import _UNSET
-from gns3server.controller.controller_error import ControllerError, ControllerBadRequestError
-from gns3server.controller.import_project import import_project as import_controller_project
+from gns3server.controller import Controller, marker_replay
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerError
from gns3server.controller.export_project import export_project as export_controller_project
-from gns3server.controller import marker_replay
+from gns3server.controller.import_project import import_project as import_controller_project
+from gns3server.controller.link import _UNSET
from gns3server.controller.marker_replay import SharkdError, SharkdMissingError
+from gns3server.controller.project import Project
+from gns3server.db.repositories.pools import ResourcePoolsRepository
+from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.templates import TemplatesRepository
+from gns3server.services.templates import TemplatesService
from gns3server.utils.asyncio import aiozipstream
from gns3server.utils.path import is_safe_path
-from gns3server.db.repositories.templates import TemplatesRepository
-from gns3server.db.repositories.rbac import RbacRepository
-from gns3server.db.repositories.pools import ResourcePoolsRepository
-from gns3server.services.templates import TemplatesService
-from .dependencies.rbac import has_privilege, has_privilege_on_websocket
from .dependencies.authentication import get_current_active_user
from .dependencies.database import get_repository
+from .dependencies.rbac import has_privilege, has_privilege_on_websocket
responses: dict[int | str, dict[str, Any]] = {
404: {"model": schemas.ErrorMessage, "description": "Could not find project"}
diff --git a/gns3server/api/routes/controller/roles.py b/gns3server/api/routes/controller/roles.py
index 3f6e854a1..119738dd2 100644
--- a/gns3server/api/routes/controller/roles.py
+++ b/gns3server/api/routes/controller/roles.py
@@ -19,25 +19,25 @@
API routes for roles.
"""
-from fastapi import APIRouter, Depends, status
-from uuid import UUID
+import logging
from typing import List, Optional
+from uuid import UUID
-from gns3server import schemas
-from gns3server.controller.controller_error import (
- ControllerError,
- ControllerBadRequestError,
- ControllerNotFoundError,
- ControllerForbiddenError,
-)
+from fastapi import APIRouter, Depends, status
import gns3server.db.models as models
+from gns3server import schemas
+from gns3server.controller.controller_error import (
+ ControllerBadRequestError,
+ ControllerError,
+ ControllerForbiddenError,
+ ControllerNotFoundError,
+)
from gns3server.db.repositories.rbac import RbacRepository
+
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/settings.py b/gns3server/api/routes/controller/settings.py
index 466edc726..eaae57bd3 100644
--- a/gns3server/api/routes/controller/settings.py
+++ b/gns3server/api/routes/controller/settings.py
@@ -19,8 +19,9 @@
API routes for managing the server settings (gns3_server.conf).
"""
-from fastapi import APIRouter, Depends, HTTPException
+import logging
+from fastapi import APIRouter, Depends, HTTPException
from pydantic import ValidationError
from gns3server import schemas
@@ -31,8 +32,6 @@ from gns3server.schemas.controller.settings import SECRET_MASK
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()
diff --git a/gns3server/api/routes/controller/snapshots.py b/gns3server/api/routes/controller/snapshots.py
index 4ec8c467c..eddcd029e 100644
--- a/gns3server/api/routes/controller/snapshots.py
+++ b/gns3server/api/routes/controller/snapshots.py
@@ -23,14 +23,15 @@ import logging
log = logging.getLogger()
-from fastapi import APIRouter, Depends, status
from typing import Any, List
from uuid import UUID
-from gns3server.controller.project import Project
-from gns3server.db.repositories.rbac import RbacRepository
+from fastapi import APIRouter, Depends, status
+
from gns3server import schemas
from gns3server.controller import Controller
+from gns3server.controller.project import Project
+from gns3server.db.repositories.rbac import RbacRepository
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
diff --git a/gns3server/api/routes/controller/symbols.py b/gns3server/api/routes/controller/symbols.py
index 5f004ffa6..98d6a0c91 100644
--- a/gns3server/api/routes/controller/symbols.py
+++ b/gns3server/api/routes/controller/symbols.py
@@ -19,21 +19,20 @@
API routes for symbols.
"""
+import logging
import os
-
-from fastapi import APIRouter, Request, Depends, Response, status
-from fastapi.responses import FileResponse
from typing import List
-from gns3server.controller import Controller
+from fastapi import APIRouter, Depends, Request, Response, status
+from fastapi.responses import FileResponse
+
from gns3server import schemas
-from gns3server.controller.controller_error import ControllerError, ControllerNotFoundError, ControllerForbiddenError
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerError, ControllerForbiddenError, ControllerNotFoundError
from gns3server.utils.get_resource import get_resource
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
diff --git a/gns3server/api/routes/controller/templates.py b/gns3server/api/routes/controller/templates.py
index 3c35eea16..4263acede 100644
--- a/gns3server/api/routes/controller/templates.py
+++ b/gns3server/api/routes/controller/templates.py
@@ -18,30 +18,30 @@
API routes for templates.
"""
-import os
import hashlib
import json
-
import logging
+import os
log = logging.getLogger(__name__)
-from fastapi import APIRouter, Request, HTTPException, Depends, Response, status, Query
from typing import Any, List, Optional, Union
from uuid import UUID
+from fastapi import APIRouter, Depends, HTTPException, Query, Request, Response, status
+
from gns3server import schemas
+from gns3server.controller import Controller
+from gns3server.controller.controller_error import ControllerBadRequestError, ControllerError
+from gns3server.db.repositories.images import ImagesRepository
+from gns3server.db.repositories.rbac import RbacRepository
from gns3server.db.repositories.templates import TemplatesRepository
from gns3server.services.templates import TemplatesService
-from gns3server.db.repositories.rbac import RbacRepository
-from gns3server.db.repositories.images import ImagesRepository
-from gns3server.controller import Controller
-from gns3server.controller.controller_error import ControllerError, ControllerBadRequestError
from gns3server.utils.images import get_builtin_disks
from .dependencies.authentication import get_current_active_user
-from .dependencies.rbac import has_privilege
from .dependencies.database import get_repository
+from .dependencies.rbac import has_privilege
responses: dict[int | str, dict[str, Any]] = {
404: {"model": schemas.ErrorMessage, "description": "Could not find template"}
diff --git a/gns3server/api/routes/controller/users.py b/gns3server/api/routes/controller/users.py
index 673886195..1ba9a2eff 100644
--- a/gns3server/api/routes/controller/users.py
+++ b/gns3server/api/routes/controller/users.py
@@ -19,30 +19,29 @@
API routes for users.
"""
+import logging
+from typing import List, Optional
+from uuid import UUID
+
from fastapi import APIRouter, Depends, HTTPException, Response, status
from fastapi.security import OAuth2PasswordRequestForm
-from uuid import UUID
-from typing import List, Optional
-
-from gns3server import schemas
-from gns3server.controller.controller_error import (
- ControllerError,
- ControllerBadRequestError,
- ControllerNotFoundError,
- ControllerForbiddenError,
-)
import gns3server.db.models as models
-from gns3server.db.repositories.users import UsersRepository
+from gns3server import schemas
+from gns3server.controller.controller_error import (
+ ControllerBadRequestError,
+ ControllerError,
+ ControllerForbiddenError,
+ ControllerNotFoundError,
+)
from gns3server.db.repositories.rbac import RbacRepository
+from gns3server.db.repositories.users import UsersRepository
from gns3server.services import auth_service
from .dependencies.authentication import get_current_active_user
from .dependencies.database import get_repository
from .dependencies.rbac import has_privilege
-import logging
-
log = logging.getLogger(__name__)
router = APIRouter()