From b78672a8ca231f5e0398bdd17283a76df6173e11 Mon Sep 17 00:00:00 2001 From: Mark Paronyan Date: Fri, 2 Oct 2026 12:15:52 +0300 Subject: [PATCH] style: sort imports in the new image management modules --- gns3server/db/repositories/templates.py | 2 +- ...a2b7c401_image_inventory_reconciliation.py | 2 +- gns3server/schemas/controller/images.py | 4 ++-- gns3server/services/image_reconciliation.py | 4 ++-- .../api/routes/controller/test_image_sync.py | 2 +- tests/conftest.py | 2 +- tests/services/test_image_reconciliation.py | 19 +++++++++++-------- 7 files changed, 19 insertions(+), 16 deletions(-) diff --git a/gns3server/db/repositories/templates.py b/gns3server/db/repositories/templates.py index 9369dc2cc..591a72be7 100644 --- a/gns3server/db/repositories/templates.py +++ b/gns3server/db/repositories/templates.py @@ -29,8 +29,8 @@ from sqlalchemy.orm.session import make_transient import gns3server.db.models as models from gns3server import schemas -from gns3server.utils.image_inventory import image_lock from gns3server.controller.controller_error import ControllerNotFoundError +from gns3server.utils.image_inventory import image_lock from .base import BaseRepository diff --git a/gns3server/db_migrations/versions/d9e8a2b7c401_image_inventory_reconciliation.py b/gns3server/db_migrations/versions/d9e8a2b7c401_image_inventory_reconciliation.py index bb2ae487b..59a98d502 100644 --- a/gns3server/db_migrations/versions/d9e8a2b7c401_image_inventory_reconciliation.py +++ b/gns3server/db_migrations/versions/d9e8a2b7c401_image_inventory_reconciliation.py @@ -4,8 +4,8 @@ Revision ID: d9e8a2b7c401 Revises: c7e4a9f1d2b6 """ -from alembic import op import sqlalchemy as sa +from alembic import op revision = "d9e8a2b7c401" down_revision = "c7e4a9f1d2b6" diff --git a/gns3server/schemas/controller/images.py b/gns3server/schemas/controller/images.py index a1d4d43a4..ed1e98ec9 100644 --- a/gns3server/schemas/controller/images.py +++ b/gns3server/schemas/controller/images.py @@ -14,9 +14,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from enum import Enum from datetime import datetime -from typing import Optional, Literal +from enum import Enum +from typing import Literal, Optional from pydantic import BaseModel, ConfigDict, Field diff --git a/gns3server/services/image_reconciliation.py b/gns3server/services/image_reconciliation.py index 2fa523872..6fac6bb3f 100644 --- a/gns3server/services/image_reconciliation.py +++ b/gns3server/services/image_reconciliation.py @@ -8,7 +8,7 @@ import threading import uuid from datetime import datetime, timezone -from sqlalchemy import select, update, delete +from sqlalchemy import delete, select, update from sqlalchemy.ext.asyncio import AsyncSession from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer @@ -24,7 +24,7 @@ from gns3server.utils.image_inventory import ( image_lock, normalized_path, ) -from gns3server.utils.images import inspect_image_file, InvalidImageError, ImageChangedError +from gns3server.utils.images import ImageChangedError, InvalidImageError, inspect_image_file log = logging.getLogger(__name__) COUNTERS = ( diff --git a/tests/api/routes/controller/test_image_sync.py b/tests/api/routes/controller/test_image_sync.py index 6e1a43d42..de658c204 100644 --- a/tests/api/routes/controller/test_image_sync.py +++ b/tests/api/routes/controller/test_image_sync.py @@ -6,9 +6,9 @@ import pytest import pytest_asyncio from gns3server.db.repositories.images import ImagesRepository -from gns3server.services.image_reconciliation import ImageReconciliationService from gns3server.services import auth_service from gns3server.services.authentication import DEFAULT_JWT_SECRET_KEY +from gns3server.services.image_reconciliation import ImageReconciliationService pytestmark = pytest.mark.asyncio QCOW = b"QFI\xfb\x00\x00\x00" diff --git a/tests/conftest.py b/tests/conftest.py index 8e6e67103..4868ff18e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,4 @@ +import asyncio import base64 import configparser import os @@ -13,7 +14,6 @@ from typing import Any, AsyncGenerator from unittest.mock import MagicMock, patch import pytest -import asyncio import pytest_asyncio from fastapi import FastAPI from httpx import AsyncClient diff --git a/tests/services/test_image_reconciliation.py b/tests/services/test_image_reconciliation.py index fa8e9beba..c0351ffe0 100644 --- a/tests/services/test_image_reconciliation.py +++ b/tests/services/test_image_reconciliation.py @@ -1,26 +1,26 @@ import asyncio import hashlib import os +import subprocess import sys import threading -import subprocess -from types import SimpleNamespace from pathlib import Path -from unittest.mock import patch, AsyncMock +from types import SimpleNamespace +from unittest.mock import AsyncMock, patch import pytest import pytest_asyncio -from sqlalchemy import select, text, event -from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine +from sqlalchemy import event, select, text from sqlalchemy.exc import SQLAlchemyError -from watchdog.events import FileMovedEvent, FileDeletedEvent, FileModifiedEvent +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine +from watchdog.events import FileDeletedEvent, FileModifiedEvent, FileMovedEvent from gns3server.db.models import Base, Image, ImageSyncJob, Template from gns3server.db.models.images import image_template_map from gns3server.db.repositories.images import ImagesRepository from gns3server.services.image_reconciliation import ImageReconciliationService, InventoryEvents, enumerate_root -from gns3server.utils.image_inventory import ImageLockBusy, image_lock, fingerprint -from gns3server.utils.images import write_image, inspect_image_file, md5sum, InvalidImageError +from gns3server.utils.image_inventory import ImageLockBusy, fingerprint, image_lock +from gns3server.utils.images import InvalidImageError, inspect_image_file, md5sum, write_image pytestmark = pytest.mark.asyncio QCOW = b"QFI\xfb\x00\x00\x00" @@ -633,6 +633,7 @@ async def test_startup_upgrades_unversioned_existing_catalog(inventory, config, from alembic import command from alembic.config import Config from fastapi import FastAPI + from gns3server.db.tasks import connect_to_db, disconnect_from_db image_file(config) @@ -665,7 +666,9 @@ async def test_startup_upgrades_unversioned_existing_catalog(inventory, config, @pytest.mark.parametrize("reuse_id", [False, True]) async def test_delete_preserves_replacement_created_while_waiting_for_lock(inventory, config, operation, reuse_id): from contextlib import asynccontextmanager + from sqlalchemy import delete + from gns3server.api.routes.controller.images import delete_image from gns3server.controller.controller_error import ControllerError