From 83e7fbe63b584b967ba4cd61dc95399c2c34f2c2 Mon Sep 17 00:00:00 2001 From: Mark Paronyan Date: Wed, 30 Sep 2026 20:51:25 +0300 Subject: [PATCH] style: sort imports in remaining tests and scripts --- scripts/extract_mermaid.py | 8 ++-- scripts/publish_api_documentation.py | 2 +- scripts/welcome.py | 9 +++-- tests/agent/mcp/test_device_tools.py | 2 +- tests/agent/mcp/test_handlers.py | 5 ++- tests/agent/test_gns3_client.py | 7 ++-- tests/agent/test_skills_device_topics.py | 2 +- tests/conftest.py | 42 ++++++++++---------- tests/stress/benchmark_running_server.py | 4 +- tests/stress/telnet_race_condition_test.py | 4 +- tests/test_config.py | 7 ++-- tests/test_server.py | 5 ++- tests/test_topologies.py | 6 +-- tests/utils.py | 2 +- tests/utils/asyncio/test_ssh_server.py | 1 - tests/utils/test_asyncio.py | 3 +- tests/utils/test_file_watcher.py | 2 +- tests/utils/test_images.py | 4 +- tests/utils/test_interfaces.py | 7 ++-- tests/utils/test_notification_queue.py | 2 +- tests/utils/test_packet_filter_validation.py | 7 ++-- tests/utils/test_path.py | 2 +- 22 files changed, 68 insertions(+), 65 deletions(-) diff --git a/scripts/extract_mermaid.py b/scripts/extract_mermaid.py index a134e3eed..82b47da11 100755 --- a/scripts/extract_mermaid.py +++ b/scripts/extract_mermaid.py @@ -27,11 +27,11 @@ Usage: python3 scripts/extract_mermaid.py docs/implemented/ my_svgs/ """ -import re -import os -import sys -import subprocess import argparse +import os +import re +import subprocess +import sys # Chrome binary path discovery PUPPETEER_CACHE = os.environ.get( diff --git a/scripts/publish_api_documentation.py b/scripts/publish_api_documentation.py index ab2e15704..1754d63bf 100644 --- a/scripts/publish_api_documentation.py +++ b/scripts/publish_api_documentation.py @@ -20,8 +20,8 @@ import json from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html -from gns3server.api.server import app +from gns3server.api.server import app if __name__ == "__main__": with open("../docs/openapi.json", "w") as fd: diff --git a/scripts/welcome.py b/scripts/welcome.py index 277a35138..9e9dc4c84 100644 --- a/scripts/welcome.py +++ b/scripts/welcome.py @@ -15,15 +15,16 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import configparser import locale -import re import os +import re +import subprocess import sys import time -import subprocess -import configparser -from json import loads as convert import urllib.request +from json import loads as convert + from dialog import Dialog, PythonDialogBug diff --git a/tests/agent/mcp/test_device_tools.py b/tests/agent/mcp/test_device_tools.py index 6a7c04169..07339cb5b 100644 --- a/tests/agent/mcp/test_device_tools.py +++ b/tests/agent/mcp/test_device_tools.py @@ -6,9 +6,9 @@ device_config_send / device_show_run / vpcs_config_set. """ import json +from unittest.mock import MagicMock, patch import pytest -from unittest.mock import MagicMock, patch VPCS_MOD = "gns3server.agent.gns3_copilot.tools_v2.vpcs_tools_netmiko" diff --git a/tests/agent/mcp/test_handlers.py b/tests/agent/mcp/test_handlers.py index 97938a35d..9752c4422 100644 --- a/tests/agent/mcp/test_handlers.py +++ b/tests/agent/mcp/test_handlers.py @@ -5,9 +5,9 @@ Tests that handlers correctly transform tool parameters into HTTP calls. """ import json +from unittest.mock import MagicMock, patch import pytest -from unittest.mock import MagicMock, patch def _mock_conn(json_result=None): @@ -222,6 +222,7 @@ class TestNode: def test_create_batch_preserves_submission_order(self, ctx): import time + from gns3server.agent.gns3_copilot.gns3_client.api_handlers import create_node_handler with patch(f"{AH}._get_connector") as m: @@ -249,6 +250,7 @@ class TestNode: def test_create_batch_default_names_created_sequentially(self, ctx): import threading import time + from gns3server.agent.gns3_copilot.gns3_client.api_handlers import create_node_handler def _run(nodes_param): @@ -502,6 +504,7 @@ class TestLink: def test_create_batch_preserves_submission_order(self, ctx): import time + from gns3server.agent.gns3_copilot.gns3_client.api_handlers import create_link_handler with patch(f"{AH}._get_connector") as m: diff --git a/tests/agent/test_gns3_client.py b/tests/agent/test_gns3_client.py index 36e57fd72..d04dc49a7 100644 --- a/tests/agent/test_gns3_client.py +++ b/tests/agent/test_gns3_client.py @@ -27,7 +27,6 @@ Tests for the shared GNS3 REST client layer (gns3_copilot.gns3_client): import pytest - # ── project_inventory ──────────────────────────────────────────────────── @@ -131,8 +130,8 @@ def test_device_ports_prefer_netmiko_field_over_tag(monkeypatch): the tag stays as fallback when the field is missing. """ pytest.importorskip("jwt", reason="ai-features extras not installed") - from gns3server.agent.gns3_copilot.utils import get_gns3_device_port from gns3server.agent.gns3_copilot import gns3_client + from gns3server.agent.gns3_copilot.utils import get_gns3_device_port class _FakeTopology: def _run(self, project_id=None, jwt_token=None, url=None): @@ -164,8 +163,8 @@ def test_device_ports_prefer_netmiko_field_over_tag(monkeypatch): def test_device_ports_error_without_any_device_type(monkeypatch): pytest.importorskip("jwt", reason="ai-features extras not installed") - from gns3server.agent.gns3_copilot.utils import get_gns3_device_port from gns3server.agent.gns3_copilot import gns3_client + from gns3server.agent.gns3_copilot.utils import get_gns3_device_port class _FakeTopology: def _run(self, project_id=None, jwt_token=None, url=None): @@ -193,8 +192,8 @@ def test_device_ports_inject_default_credentials(monkeypatch): keep inheriting from the group. """ pytest.importorskip("jwt", reason="ai-features extras not installed") - from gns3server.agent.gns3_copilot.utils import get_gns3_device_port from gns3server.agent.gns3_copilot import gns3_client + from gns3server.agent.gns3_copilot.utils import get_gns3_device_port class _FakeTopology: def _run(self, project_id=None, jwt_token=None, url=None): diff --git a/tests/agent/test_skills_device_topics.py b/tests/agent/test_skills_device_topics.py index 68d8371c5..6a1ca7acb 100644 --- a/tests/agent/test_skills_device_topics.py +++ b/tests/agent/test_skills_device_topics.py @@ -301,9 +301,9 @@ class TestReloadSkillsValidation: """ def test_invalid_injection_skill_is_dropped(self, tmp_path, monkeypatch): - from gns3server.config import Config from gns3server.agent.gns3_copilot.skills import registry from gns3server.agent.gns3_copilot.skills.manager import SkillsManager + from gns3server.config import Config # SkillsManager derives its local path from /skills injection_dir = tmp_path / "skills" / "injection" diff --git a/tests/conftest.py b/tests/conftest.py index bc9f7c823..8e6e67103 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,35 +1,35 @@ +import base64 +import configparser +import os +import platform +import resource +import shutil +import stat +import sys +import tempfile +import uuid +from pathlib import Path +from typing import Any, AsyncGenerator +from unittest.mock import MagicMock, patch + import pytest import asyncio import pytest_asyncio -import tempfile -import shutil -import sys -import os -import uuid -import configparser -import base64 -import stat -import resource -import platform - from fastapi import FastAPI -from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from httpx import AsyncClient from httpx_ws.transport import ASGIWebSocketTransport -from unittest.mock import MagicMock, patch -from pathlib import Path -from typing import AsyncGenerator, Any +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine -from gns3server.controller import Controller -from gns3server.config import Config +from gns3server import schemas +from gns3server.api.routes.controller.dependencies.database import get_db_session from gns3server.compute import MODULES from gns3server.compute.port_manager import PortManager from gns3server.compute.project_manager import ProjectManager -from gns3server.db.models import Base, User, Compute -from gns3server.db.repositories.users import UsersRepository +from gns3server.config import Config +from gns3server.controller import Controller +from gns3server.db.models import Base, Compute, User from gns3server.db.repositories.computes import ComputesRepository -from gns3server.api.routes.controller.dependencies.database import get_db_session -from gns3server import schemas +from gns3server.db.repositories.users import UsersRepository from gns3server.schemas.controller.computes import Protocol from gns3server.services import auth_service from gns3server.services.authentication import DEFAULT_JWT_SECRET_KEY diff --git a/tests/stress/benchmark_running_server.py b/tests/stress/benchmark_running_server.py index fcc5e7640..c19187a7e 100644 --- a/tests/stress/benchmark_running_server.py +++ b/tests/stress/benchmark_running_server.py @@ -6,10 +6,10 @@ This test connects to an already running GNS3 server and measures the response time of the GET /projects endpoint. """ -import asyncio -import time import argparse +import asyncio import sys +import time import uuid from pathlib import Path diff --git a/tests/stress/telnet_race_condition_test.py b/tests/stress/telnet_race_condition_test.py index e808d319f..be996cc4b 100644 --- a/tests/stress/telnet_race_condition_test.py +++ b/tests/stress/telnet_race_condition_test.py @@ -10,12 +10,12 @@ Usage: python telnet_race_condition_test.py --host 127.0.0.1 --port 2000 --connections 10 """ -import asyncio import argparse +import asyncio import logging +import sys import time from typing import List, Optional -import sys # Configure logging logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") diff --git a/tests/test_config.py b/tests/test_config.py index fb2b08dc0..50e9318d2 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -17,13 +17,12 @@ import configparser import os -import pytest -from gns3server.config import Config -from gns3server.config import ConfigConflictError -from gns3server.config import ServerConfig +import pytest from pydantic import ValidationError +from gns3server.config import Config, ConfigConflictError, ServerConfig + def load_config(tmpdir, settings): """ diff --git a/tests/test_server.py b/tests/test_server.py index 7cdb2cb12..95f644503 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -16,13 +16,14 @@ # along with this program. If not, see . -import pytest import locale import tempfile +import pytest + +from gns3server.config import Config from gns3server.main import parse_arguments as parse from gns3server.server import Server -from gns3server.config import Config def test_locale_check(): diff --git a/tests/test_topologies.py b/tests/test_topologies.py index e763d47b9..c4320658f 100644 --- a/tests/test_topologies.py +++ b/tests/test_topologies.py @@ -21,13 +21,13 @@ # # Read tests/topologies/README.rst for documentation -import os import json -import pytest +import os import shutil +import pytest -from gns3server.controller.topology import load_topology, GNS3_FILE_FORMAT_REVISION +from gns3server.controller.topology import GNS3_FILE_FORMAT_REVISION, load_topology from gns3server.version import __version__ topologies_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)), "topologies") diff --git a/tests/utils.py b/tests/utils.py index d7212a666..a2fb8e48c 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -14,9 +14,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import asyncio import io import types -import asyncio import unittest.mock diff --git a/tests/utils/asyncio/test_ssh_server.py b/tests/utils/asyncio/test_ssh_server.py index 7f6d094a9..694bfd20c 100644 --- a/tests/utils/asyncio/test_ssh_server.py +++ b/tests/utils/asyncio/test_ssh_server.py @@ -6,7 +6,6 @@ import pytest from gns3server.utils.asyncio.ssh_server import AsyncioSSHServer - # --------------------------------------------------------------------------- # Helpers # --------------------------------------------------------------------------- diff --git a/tests/utils/test_asyncio.py b/tests/utils/test_asyncio.py index 87def33c4..04a9e3c1c 100644 --- a/tests/utils/test_asyncio.py +++ b/tests/utils/test_asyncio.py @@ -16,9 +16,10 @@ import asyncio + import pytest -from gns3server.utils.asyncio import wait_run_in_executor, subprocess_check_output, locking +from gns3server.utils.asyncio import locking, subprocess_check_output, wait_run_in_executor @pytest.mark.asyncio diff --git a/tests/utils/test_file_watcher.py b/tests/utils/test_file_watcher.py index 83b9761ec..80911276b 100644 --- a/tests/utils/test_file_watcher.py +++ b/tests/utils/test_file_watcher.py @@ -15,10 +15,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import pytest import asyncio from unittest.mock import MagicMock +import pytest from gns3server.utils.file_watcher import FileWatcher diff --git a/tests/utils/test_images.py b/tests/utils/test_images.py index e7d8248b0..404540337 100644 --- a/tests/utils/test_images.py +++ b/tests/utils/test_images.py @@ -17,12 +17,12 @@ import os import sys import threading -import pytest from unittest.mock import patch +import pytest from gns3server.utils import force_unix_path -from gns3server.utils.images import md5sum, remove_checksum, images_directories, list_images +from gns3server.utils.images import images_directories, list_images, md5sum, remove_checksum def test_images_directories(tmpdir, config): diff --git a/tests/utils/test_interfaces.py b/tests/utils/test_interfaces.py index 84ac5f7c3..9c6c340c8 100644 --- a/tests/utils/test_interfaces.py +++ b/tests/utils/test_interfaces.py @@ -14,15 +14,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import sys -import socket import collections +import socket +import sys from unittest.mock import patch import psutil -from gns3server.utils.interfaces import interfaces, is_interface_up, has_netmask - +from gns3server.utils.interfaces import has_netmask, interfaces, is_interface_up # psutil returns snicaddr namedtuples; mirror that shape for the mocks below. snicaddr = collections.namedtuple("snicaddr", ["family", "address", "netmask", "broadcast", "ptp"]) diff --git a/tests/utils/test_notification_queue.py b/tests/utils/test_notification_queue.py index 769a93e98..79e293fa5 100644 --- a/tests/utils/test_notification_queue.py +++ b/tests/utils/test_notification_queue.py @@ -14,8 +14,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import time import asyncio +import time import pytest diff --git a/tests/utils/test_packet_filter_validation.py b/tests/utils/test_packet_filter_validation.py index a5ba0cbe8..462e23a4d 100644 --- a/tests/utils/test_packet_filter_validation.py +++ b/tests/utils/test_packet_filter_validation.py @@ -3,11 +3,12 @@ Unit tests for packet filter validation. """ import pytest + from gns3server.utils.packet_filter_validation import ( - validate_filter_parameters, - validate_all_filters, - filter_inactive_filters, FilterValidationError, + filter_inactive_filters, + validate_all_filters, + validate_filter_parameters, ) diff --git a/tests/utils/test_path.py b/tests/utils/test_path.py index b31aeb968..454871826 100644 --- a/tests/utils/test_path.py +++ b/tests/utils/test_path.py @@ -16,8 +16,8 @@ # along with this program. If not, see . import os -import pytest +import pytest from fastapi import HTTPException from gns3server.utils.path import check_path_allowed, get_default_project_directory