diff --git a/gns3server/schemas/__init__.py b/gns3server/schemas/__init__.py
index 81e5fbc7e..34939c954 100644
--- a/gns3server/schemas/__init__.py
+++ b/gns3server/schemas/__init__.py
@@ -15,102 +15,107 @@
# along with this program. If not, see .
# General schemas
-from .config import ServerConfig
from .common import ErrorMessage
-from .version import Version
-
-# Controller schemas
-from .controller.links import (
- LinkCreate,
- LinkUpdate,
- Link,
- UDPPortInfo,
- EthernetPortInfo,
- LinkCapture,
- MarkerCreate,
- MarkerUpdate,
- MarkerDefinitionCreate,
-)
+from .config import ServerConfig
+from .controller.appliances import Appliance, ApplianceVersion, ApplianceVersionV8
from .controller.computes import (
+ AutoIdlePC,
+ Compute,
ComputeCreate,
+ ComputeDockerImage,
ComputeUpdate,
ComputeVirtualBoxVM,
ComputeVMwareVM,
- ComputeDockerImage,
- AutoIdlePC,
- Compute,
)
-from .controller.templates import TemplateCreate, TemplateUpdate, TemplateUsage, Template
-from .controller.images import Image, ImageType, ImageSyncRequest, ImageSyncJob
-from .controller.appliances import ApplianceVersion, ApplianceVersionV8, Appliance
from .controller.drawings import Drawing
from .controller.gns3vm import GNS3VM
-from .controller.nodes import NodeCreate, NodeUpdate, NodeDuplicate, NodeCapture, Node
-from .controller.projects import (
- ProjectCreate,
- ProjectUpdate,
- ProjectDuplicate,
- Project,
- ProjectFile,
- ProjectCompression,
- NodeFile,
+from .controller.images import Image, ImageSyncJob, ImageSyncRequest, ImageType
+
+# Controller schemas
+from .controller.links import (
+ EthernetPortInfo,
+ Link,
+ LinkCapture,
+ LinkCreate,
+ LinkUpdate,
+ MarkerCreate,
+ MarkerDefinitionCreate,
+ MarkerUpdate,
+ UDPPortInfo,
)
+from .controller.nodes import Node, NodeCapture, NodeCreate, NodeDuplicate, NodeUpdate
+from .controller.projects import (
+ NodeFile,
+ Project,
+ ProjectCompression,
+ ProjectCreate,
+ ProjectDuplicate,
+ ProjectFile,
+ ProjectUpdate,
+)
+from .controller.templates import Template, TemplateCreate, TemplateUpdate, TemplateUsage
from .controller.users import (
- UserCreate,
- UserUpdate,
+ Credentials,
LoggedInUserUpdate,
User,
- Credentials,
+ UserCreate,
+ UserGroup,
UserGroupCreate,
UserGroupUpdate,
- UserGroup,
+ UserUpdate,
)
+from .version import Version
# Conditionally import AI-related schemas
try:
- from .controller.llm_model_configs import (
- LLMModelConfigData,
- LLMModelConfigCreate,
- LLMModelConfigUpdate,
- LLMModelConfigResponse,
- LLMModelConfigWithSource,
- LLMModelConfigInheritedResponse,
- LLMModelConfigListResponse,
- )
from .controller.chat import (
- OpenAIToolCall,
ChatRequest,
ChatResponse,
- OpenAIMessage,
- ConversationHistory,
ChatSession,
+ ConversationHistory,
+ OpenAIMessage,
+ OpenAIToolCall,
RenameSession,
)
+ from .controller.llm_model_configs import (
+ LLMModelConfigCreate,
+ LLMModelConfigData,
+ LLMModelConfigInheritedResponse,
+ LLMModelConfigListResponse,
+ LLMModelConfigResponse,
+ LLMModelConfigUpdate,
+ LLMModelConfigWithSource,
+ )
except ImportError:
# AI schemas are not available (should not happen as they don't depend on external libs)
pass
-from .controller.rbac import RoleCreate, RoleUpdate, Role, Privilege, ACECreate, ACEUpdate, ACE
-from .controller.settings import SettingsResponse, SettingsUpdate, SettingsUpdateResponse
-from .controller.pools import Resource, ResourceCreate, ResourcePoolCreate, ResourcePoolUpdate, ResourcePool
-from .controller.tokens import Token, ApiKeyCreate, RefreshTokenRequest
-from .controller.snapshots import SnapshotCreate, Snapshot
-from .controller.iou_license import IOULicense
-from .controller.capabilities import Capabilities
-from .controller.netmiko import NetmikoDeviceType, NetmikoDeviceTypeList
+from .compute.atm_switch_nodes import ATMSwitch, ATMSwitchCreate, ATMSwitchUpdate
+from .compute.cloud_nodes import Cloud, CloudCreate, CloudUpdate
+from .compute.docker_nodes import Docker, DockerCreate, DockerUpdate
+from .compute.dynamips_nodes import Dynamips, DynamipsCreate, DynamipsUpdate
+from .compute.ethernet_hub_nodes import EthernetHub, EthernetHubCreate, EthernetHubUpdate
+from .compute.ethernet_switch_nodes import EthernetSwitch, EthernetSwitchCreate, EthernetSwitchUpdate
+from .compute.frame_relay_switch_nodes import FrameRelaySwitch, FrameRelaySwitchCreate, FrameRelaySwitchUpdate
+from .compute.iou_nodes import IOU, IOUCreate, IOUStart, IOUUpdate
+from .compute.nat_nodes import NAT, NATCreate, NATUpdate
-# Controller template schemas
-from .controller.templates.vpcs_templates import VPCSTemplate, VPCSTemplateUpdate
+# Compute schemas
+from .compute.nios import TAPNIO, UDPNIO, BatchNIOCreate, BatchNIOEntry, EthernetNIO, MarkerRebuild, MarkerToggle
+from .compute.qemu_nodes import Qemu, QemuCreate, QemuUpdate
+from .compute.virtualbox_nodes import VirtualBox, VirtualBoxCreate, VirtualBoxUpdate
+from .compute.vmware_nodes import VMware, VMwareCreate, VMwareUpdate
+from .compute.vpcs_nodes import VPCS, VPCSCreate, VPCSUpdate
+from .controller.capabilities import Capabilities
+from .controller.iou_license import IOULicense
+from .controller.netmiko import NetmikoDeviceType, NetmikoDeviceTypeList
+from .controller.pools import Resource, ResourceCreate, ResourcePool, ResourcePoolCreate, ResourcePoolUpdate
+from .controller.rbac import ACE, ACECreate, ACEUpdate, Privilege, Role, RoleCreate, RoleUpdate
+from .controller.settings import SettingsResponse, SettingsUpdate, SettingsUpdateResponse
+from .controller.snapshots import Snapshot, SnapshotCreate
from .controller.templates.cloud_templates import CloudTemplate, CloudTemplateUpdate
-from .controller.templates.iou_templates import IOUTemplate, IOUTemplateUpdate
from .controller.templates.docker_templates import DockerTemplate, DockerTemplateUpdate
-from .controller.templates.ethernet_hub_templates import EthernetHubTemplate, EthernetHubTemplateUpdate
-from .controller.templates.ethernet_switch_templates import EthernetSwitchTemplate, EthernetSwitchTemplateUpdate
-from .controller.templates.virtualbox_templates import VirtualBoxTemplate, VirtualBoxTemplateUpdate
-from .controller.templates.vmware_templates import VMwareTemplate, VMwareTemplateUpdate
-from .controller.templates.qemu_templates import QemuTemplate, QemuTemplateUpdate
from .controller.templates.dynamips_templates import (
- DynamipsTemplate,
C1700DynamipsTemplate,
C1700DynamipsTemplateUpdate,
C2600DynamipsTemplate,
@@ -125,23 +130,18 @@ from .controller.templates.dynamips_templates import (
C3745DynamipsTemplateUpdate,
C7200DynamipsTemplate,
C7200DynamipsTemplateUpdate,
+ DynamipsTemplate,
)
+from .controller.templates.ethernet_hub_templates import EthernetHubTemplate, EthernetHubTemplateUpdate
+from .controller.templates.ethernet_switch_templates import EthernetSwitchTemplate, EthernetSwitchTemplateUpdate
+from .controller.templates.iou_templates import IOUTemplate, IOUTemplateUpdate
+from .controller.templates.qemu_templates import QemuTemplate, QemuTemplateUpdate
+from .controller.templates.virtualbox_templates import VirtualBoxTemplate, VirtualBoxTemplateUpdate
+from .controller.templates.vmware_templates import VMwareTemplate, VMwareTemplateUpdate
-# Compute schemas
-from .compute.nios import UDPNIO, TAPNIO, EthernetNIO, MarkerToggle, MarkerRebuild, BatchNIOEntry, BatchNIOCreate
-from .compute.atm_switch_nodes import ATMSwitchCreate, ATMSwitchUpdate, ATMSwitch
-from .compute.cloud_nodes import CloudCreate, CloudUpdate, Cloud
-from .compute.docker_nodes import DockerCreate, DockerUpdate, Docker
-from .compute.dynamips_nodes import DynamipsCreate, DynamipsUpdate, Dynamips
-from .compute.ethernet_hub_nodes import EthernetHubCreate, EthernetHubUpdate, EthernetHub
-from .compute.ethernet_switch_nodes import EthernetSwitchCreate, EthernetSwitchUpdate, EthernetSwitch
-from .compute.frame_relay_switch_nodes import FrameRelaySwitchCreate, FrameRelaySwitchUpdate, FrameRelaySwitch
-from .compute.qemu_nodes import QemuCreate, QemuUpdate, Qemu
-from .compute.iou_nodes import IOUCreate, IOUUpdate, IOUStart, IOU
-from .compute.nat_nodes import NATCreate, NATUpdate, NAT
-from .compute.vpcs_nodes import VPCSCreate, VPCSUpdate, VPCS
-from .compute.vmware_nodes import VMwareCreate, VMwareUpdate, VMware
-from .compute.virtualbox_nodes import VirtualBoxCreate, VirtualBoxUpdate, VirtualBox
+# Controller template schemas
+from .controller.templates.vpcs_templates import VPCSTemplate, VPCSTemplateUpdate
+from .controller.tokens import ApiKeyCreate, RefreshTokenRequest, Token
# Schemas for both controller and compute
-from .qemu_disk_image import QemuDiskImageFormat, QemuDiskImageCreate, QemuDiskImageUpdate
+from .qemu_disk_image import QemuDiskImageCreate, QemuDiskImageFormat, QemuDiskImageUpdate
diff --git a/gns3server/schemas/common.py b/gns3server/schemas/common.py
index 68ca0b861..3b700ee5e 100644
--- a/gns3server/schemas/common.py
+++ b/gns3server/schemas/common.py
@@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field, field_validator
-from typing import Optional
from enum import Enum
+from typing import Optional
+
+from pydantic import BaseModel, Field, field_validator
class ErrorMessage(BaseModel):
diff --git a/gns3server/schemas/compute/atm_switch_nodes.py b/gns3server/schemas/compute/atm_switch_nodes.py
index 9d126bfe9..72572d5ff 100644
--- a/gns3server/schemas/compute/atm_switch_nodes.py
+++ b/gns3server/schemas/compute/atm_switch_nodes.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel
from typing import Optional
from uuid import UUID
+from pydantic import BaseModel
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/cloud_nodes.py b/gns3server/schemas/compute/cloud_nodes.py
index 8fee188a1..5e8c0eb00 100644
--- a/gns3server/schemas/compute/cloud_nodes.py
+++ b/gns3server/schemas/compute/cloud_nodes.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, Union, List
from enum import Enum
+from typing import List, Optional, Union
from uuid import UUID
+from pydantic import BaseModel, Field
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/docker_nodes.py b/gns3server/schemas/compute/docker_nodes.py
index 1745b6d2e..228238fe9 100644
--- a/gns3server/schemas/compute/docker_nodes.py
+++ b/gns3server/schemas/compute/docker_nodes.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field, field_validator
-from typing import Optional, List
+from typing import List, Optional
from uuid import UUID
-from ..common import NodeStatus, CustomAdapter, ConsoleType, AuxType, ExtraConfig
+from pydantic import BaseModel, Field, field_validator
+
+from ..common import AuxType, ConsoleType, CustomAdapter, ExtraConfig, NodeStatus
class DockerBase(BaseModel):
diff --git a/gns3server/schemas/compute/dynamips_nodes.py b/gns3server/schemas/compute/dynamips_nodes.py
index 6292b400b..efb04a2b6 100644
--- a/gns3server/schemas/compute/dynamips_nodes.py
+++ b/gns3server/schemas/compute/dynamips_nodes.py
@@ -15,11 +15,12 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
from uuid import UUID
+from pydantic import BaseModel, Field
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/ethernet_hub_nodes.py b/gns3server/schemas/compute/ethernet_hub_nodes.py
index 866e57a38..07b2ae30d 100644
--- a/gns3server/schemas/compute/ethernet_hub_nodes.py
+++ b/gns3server/schemas/compute/ethernet_hub_nodes.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel
-from typing import Optional, List
+from typing import List, Optional
from uuid import UUID
+from pydantic import BaseModel
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/ethernet_switch_nodes.py b/gns3server/schemas/compute/ethernet_switch_nodes.py
index 16bd63b3e..2d3dbb154 100644
--- a/gns3server/schemas/compute/ethernet_switch_nodes.py
+++ b/gns3server/schemas/compute/ethernet_switch_nodes.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field, model_validator
-from typing import Optional, List
-from uuid import UUID
from enum import Enum
+from typing import List, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, Field, model_validator
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/frame_relay_switch_nodes.py b/gns3server/schemas/compute/frame_relay_switch_nodes.py
index fbb86b553..b44decf3d 100644
--- a/gns3server/schemas/compute/frame_relay_switch_nodes.py
+++ b/gns3server/schemas/compute/frame_relay_switch_nodes.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel
from typing import Optional
from uuid import UUID
+from pydantic import BaseModel
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/iou_nodes.py b/gns3server/schemas/compute/iou_nodes.py
index e51fa1a28..1b52bf29e 100644
--- a/gns3server/schemas/compute/iou_nodes.py
+++ b/gns3server/schemas/compute/iou_nodes.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import Optional
from uuid import UUID
-from ..common import NodeStatus, ConsoleType
+from pydantic import BaseModel, Field
+
+from ..common import ConsoleType, NodeStatus
class IOUBase(BaseModel):
diff --git a/gns3server/schemas/compute/nat_nodes.py b/gns3server/schemas/compute/nat_nodes.py
index e3c569251..9e48918fd 100644
--- a/gns3server/schemas/compute/nat_nodes.py
+++ b/gns3server/schemas/compute/nat_nodes.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, Union, List
from enum import Enum
+from typing import List, Optional, Union
from uuid import UUID
+from pydantic import BaseModel, Field
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/compute/nios.py b/gns3server/schemas/compute/nios.py
index f05d82737..38078812c 100644
--- a/gns3server/schemas/compute/nios.py
+++ b/gns3server/schemas/compute/nios.py
@@ -15,9 +15,10 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
+
+from pydantic import BaseModel, Field
class UDPNIOType(str, Enum):
diff --git a/gns3server/schemas/compute/qemu_nodes.py b/gns3server/schemas/compute/qemu_nodes.py
index 275ac92bb..aa72106e2 100644
--- a/gns3server/schemas/compute/qemu_nodes.py
+++ b/gns3server/schemas/compute/qemu_nodes.py
@@ -14,12 +14,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
from uuid import UUID
-from ..common import NodeStatus, CustomAdapter
+from pydantic import BaseModel, Field
+
+from ..common import CustomAdapter, NodeStatus
class QemuPlatform(str, Enum):
diff --git a/gns3server/schemas/compute/virtualbox_nodes.py b/gns3server/schemas/compute/virtualbox_nodes.py
index d05692ebc..ef5258f4e 100644
--- a/gns3server/schemas/compute/virtualbox_nodes.py
+++ b/gns3server/schemas/compute/virtualbox_nodes.py
@@ -14,12 +14,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
from uuid import UUID
-from ..common import NodeStatus, CustomAdapter
+from pydantic import BaseModel, Field
+
+from ..common import CustomAdapter, NodeStatus
class VirtualBoxConsoleType(str, Enum):
diff --git a/gns3server/schemas/compute/vmware_nodes.py b/gns3server/schemas/compute/vmware_nodes.py
index f838419a3..b518eb6d1 100644
--- a/gns3server/schemas/compute/vmware_nodes.py
+++ b/gns3server/schemas/compute/vmware_nodes.py
@@ -14,12 +14,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
from uuid import UUID
-from ..common import NodeStatus, CustomAdapter
+from pydantic import BaseModel, Field
+
+from ..common import CustomAdapter, NodeStatus
class VMwareConsoleType(str, Enum):
diff --git a/gns3server/schemas/compute/vpcs_nodes.py b/gns3server/schemas/compute/vpcs_nodes.py
index fda0634c4..c4a80cc08 100644
--- a/gns3server/schemas/compute/vpcs_nodes.py
+++ b/gns3server/schemas/compute/vpcs_nodes.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional
from enum import Enum
+from typing import Optional
from uuid import UUID
+from pydantic import BaseModel, Field
+
from ..common import NodeStatus
diff --git a/gns3server/schemas/config.py b/gns3server/schemas/config.py
index c5becb3b5..f6c978911 100644
--- a/gns3server/schemas/config.py
+++ b/gns3server/schemas/config.py
@@ -15,11 +15,11 @@
# along with this program. If not, see .
import socket
-
from enum import Enum
-from pydantic import ConfigDict, BaseModel, Field, SecretStr, FilePath, DirectoryPath, field_validator, model_validator
from typing import List, Optional
+from pydantic import BaseModel, ConfigDict, DirectoryPath, Field, FilePath, SecretStr, field_validator, model_validator
+
class ControllerSettings(BaseModel):
jwt_secret_key: Optional[str] = Field(
diff --git a/gns3server/schemas/controller/appliances.py b/gns3server/schemas/controller/appliances.py
index 3660067b8..16a9810ea 100644
--- a/gns3server/schemas/controller/appliances.py
+++ b/gns3server/schemas/controller/appliances.py
@@ -19,9 +19,10 @@
from enum import Enum
from typing import Annotated, List, Literal, Optional, Union
from uuid import UUID
-from pydantic import AnyUrl, BaseModel, Discriminator, EmailStr, Field, Tag, model_validator
-from ..common import ExtraConfig
+from pydantic import AnyUrl, BaseModel, Discriminator, EmailStr, Field, Tag, model_validator
+
+from ..common import ExtraConfig
# ============================================================================
# Shared Enums
diff --git a/gns3server/schemas/controller/base.py b/gns3server/schemas/controller/base.py
index e413dd479..6e4ac3fae 100644
--- a/gns3server/schemas/controller/base.py
+++ b/gns3server/schemas/controller/base.py
@@ -14,8 +14,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from typing import Optional
from datetime import datetime
+from typing import Optional
+
from pydantic import BaseModel
diff --git a/gns3server/schemas/controller/capabilities.py b/gns3server/schemas/controller/capabilities.py
index e54ab05dd..6e881ede7 100644
--- a/gns3server/schemas/controller/capabilities.py
+++ b/gns3server/schemas/controller/capabilities.py
@@ -15,9 +15,10 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import List
+from pydantic import BaseModel, Field
+
from .nodes import NodeType
diff --git a/gns3server/schemas/controller/chat.py b/gns3server/schemas/controller/chat.py
index 9289baf0b..93ef442f7 100644
--- a/gns3server/schemas/controller/chat.py
+++ b/gns3server/schemas/controller/chat.py
@@ -18,8 +18,9 @@
Chat API schemas for GNS3 Copilot integration.
"""
+from typing import Any, Dict, List, Literal, Optional
+
from pydantic import BaseModel, Field
-from typing import Optional, List, Dict, Any, Literal
class OpenAIToolCall(BaseModel):
diff --git a/gns3server/schemas/controller/computes.py b/gns3server/schemas/controller/computes.py
index f8612f43d..95eb09ecb 100644
--- a/gns3server/schemas/controller/computes.py
+++ b/gns3server/schemas/controller/computes.py
@@ -15,13 +15,13 @@
# along with this program. If not, see .
import uuid
-
-from pydantic import ConfigDict, BaseModel, Field, SecretStr, field_validator, model_validator
-from typing import List, Optional, Union, Any
from enum import Enum
+from typing import Any, List, Optional, Union
+
+from pydantic import BaseModel, ConfigDict, Field, SecretStr, field_validator, model_validator
-from .nodes import NodeType
from .base import DateTimeModelMixin
+from .nodes import NodeType
class Protocol(str, Enum):
diff --git a/gns3server/schemas/controller/drawings.py b/gns3server/schemas/controller/drawings.py
index f06727279..036829503 100644
--- a/gns3server/schemas/controller/drawings.py
+++ b/gns3server/schemas/controller/drawings.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import Optional
from uuid import UUID
+from pydantic import BaseModel, Field
+
class Drawing(BaseModel):
"""
diff --git a/gns3server/schemas/controller/gns3vm.py b/gns3server/schemas/controller/gns3vm.py
index 9ea8e9aa3..71a975d43 100644
--- a/gns3server/schemas/controller/gns3vm.py
+++ b/gns3server/schemas/controller/gns3vm.py
@@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional
from enum import Enum
+from typing import Optional
+
+from pydantic import BaseModel, Field
class WhenExit(str, Enum):
diff --git a/gns3server/schemas/controller/images.py b/gns3server/schemas/controller/images.py
index d2569fd26..a1d4d43a4 100644
--- a/gns3server/schemas/controller/images.py
+++ b/gns3server/schemas/controller/images.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import ConfigDict, BaseModel, Field
from enum import Enum
from datetime import datetime
from typing import Optional, Literal
+from pydantic import BaseModel, ConfigDict, Field
+
from .base import DateTimeModelMixin
diff --git a/gns3server/schemas/controller/labels.py b/gns3server/schemas/controller/labels.py
index 2eb770265..0cfdc0c9c 100644
--- a/gns3server/schemas/controller/labels.py
+++ b/gns3server/schemas/controller/labels.py
@@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import Optional, Union
+from pydantic import BaseModel, Field
+
class Label(BaseModel):
"""
diff --git a/gns3server/schemas/controller/links.py b/gns3server/schemas/controller/links.py
index 24c9f00e9..5dd8f1752 100644
--- a/gns3server/schemas/controller/links.py
+++ b/gns3server/schemas/controller/links.py
@@ -14,11 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field, field_validator
-from typing import List, Optional, Tuple
from enum import Enum
+from typing import List, Optional, Tuple
from uuid import UUID, uuid4
+from pydantic import BaseModel, Field, field_validator
+
from .labels import Label
diff --git a/gns3server/schemas/controller/llm_model_configs.py b/gns3server/schemas/controller/llm_model_configs.py
index d5de5ee0b..78381d6d8 100644
--- a/gns3server/schemas/controller/llm_model_configs.py
+++ b/gns3server/schemas/controller/llm_model_configs.py
@@ -14,12 +14,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from typing import Optional, Literal, Union
-from pydantic import BaseModel, Field, ConfigDict, field_validator
+from typing import Literal, Optional, Union
from uuid import UUID
-from .base import DateTimeModelMixin
+from pydantic import BaseModel, ConfigDict, Field, field_validator
+from .base import DateTimeModelMixin
# Valid model types
ModelType = Literal["text", "vision", "stt", "tts", "multimodal", "embedding", "reranking", "other"]
diff --git a/gns3server/schemas/controller/netmiko.py b/gns3server/schemas/controller/netmiko.py
index 00eb6e5a4..2f4b3c284 100644
--- a/gns3server/schemas/controller/netmiko.py
+++ b/gns3server/schemas/controller/netmiko.py
@@ -15,9 +15,10 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import List
+from pydantic import BaseModel, Field
+
class NetmikoDeviceType(BaseModel):
"""
diff --git a/gns3server/schemas/controller/nodes.py b/gns3server/schemas/controller/nodes.py
index 9faf260d3..d4e9bb43d 100644
--- a/gns3server/schemas/controller/nodes.py
+++ b/gns3server/schemas/controller/nodes.py
@@ -14,13 +14,14 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import List, Optional, Union
from enum import Enum
+from typing import List, Optional, Union
from uuid import UUID, uuid4
+from pydantic import BaseModel, Field
+
+from ..common import ConsoleType, CustomAdapter, NodeStatus
from .labels import Label
-from ..common import ConsoleType, NodeStatus, CustomAdapter
class NodeType(str, Enum):
diff --git a/gns3server/schemas/controller/pools.py b/gns3server/schemas/controller/pools.py
index d0d4f7957..f72c488d4 100644
--- a/gns3server/schemas/controller/pools.py
+++ b/gns3server/schemas/controller/pools.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from typing import Optional
-from pydantic import ConfigDict, BaseModel, Field
-from uuid import UUID
from enum import Enum
+from typing import Optional
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict, Field
from .base import DateTimeModelMixin
diff --git a/gns3server/schemas/controller/projects.py b/gns3server/schemas/controller/projects.py
index e1210f99f..a7e3212b5 100644
--- a/gns3server/schemas/controller/projects.py
+++ b/gns3server/schemas/controller/projects.py
@@ -15,10 +15,11 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field, HttpUrl
+from enum import Enum
from typing import List, Optional
from uuid import UUID
-from enum import Enum
+
+from pydantic import BaseModel, Field, HttpUrl
class ProjectStatus(str, Enum):
diff --git a/gns3server/schemas/controller/rbac.py b/gns3server/schemas/controller/rbac.py
index 11e0c1d6e..15ec07cab 100644
--- a/gns3server/schemas/controller/rbac.py
+++ b/gns3server/schemas/controller/rbac.py
@@ -14,10 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from typing import Optional, List
-from pydantic import ConfigDict, BaseModel, Field
-from uuid import UUID
from enum import Enum
+from typing import List, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, ConfigDict, Field
from .base import DateTimeModelMixin
diff --git a/gns3server/schemas/controller/settings.py b/gns3server/schemas/controller/settings.py
index 87b4ab2a5..aa457dc31 100644
--- a/gns3server/schemas/controller/settings.py
+++ b/gns3server/schemas/controller/settings.py
@@ -28,7 +28,7 @@ a secret leak at worst.
from pathlib import Path
from typing import List, Optional
-from pydantic import ConfigDict, BaseModel, Field
+from pydantic import BaseModel, ConfigDict, Field
from ..config import (
BuiltinSymbolTheme,
diff --git a/gns3server/schemas/controller/snapshots.py b/gns3server/schemas/controller/snapshots.py
index 4bdd6e938..bf46f2bbe 100644
--- a/gns3server/schemas/controller/snapshots.py
+++ b/gns3server/schemas/controller/snapshots.py
@@ -15,10 +15,11 @@
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import Optional
from uuid import UUID
+from pydantic import BaseModel, Field
+
class SnapshotBase(BaseModel):
"""
diff --git a/gns3server/schemas/controller/templates/__init__.py b/gns3server/schemas/controller/templates/__init__.py
index b71c64772..da207e528 100644
--- a/gns3server/schemas/controller/templates/__init__.py
+++ b/gns3server/schemas/controller/templates/__init__.py
@@ -14,13 +14,14 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import ConfigDict, BaseModel, Field
-from typing import Optional, List
from enum import Enum
+from typing import List, Optional
from uuid import UUID
-from ..nodes import NodeType
+from pydantic import BaseModel, ConfigDict, Field
+
from ..base import DateTimeModelMixin
+from ..nodes import NodeType
class Category(str, Enum):
diff --git a/gns3server/schemas/controller/templates/cloud_templates.py b/gns3server/schemas/controller/templates/cloud_templates.py
index e9ec0f6bf..8f7ac6c13 100644
--- a/gns3server/schemas/controller/templates/cloud_templates.py
+++ b/gns3server/schemas/controller/templates/cloud_templates.py
@@ -15,11 +15,13 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.cloud_nodes import EthernetPort, TAPPort, UDPPort, CloudConsoleType
+from typing import List, Optional, Union
from pydantic import Field
-from typing import Optional, Union, List
+
+from gns3server.schemas.compute.cloud_nodes import CloudConsoleType, EthernetPort, TAPPort, UDPPort
+
+from . import Category, TemplateBase
class CloudTemplate(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/docker_templates.py b/gns3server/schemas/controller/templates/docker_templates.py
index 4123630e8..a96c97397 100644
--- a/gns3server/schemas/controller/templates/docker_templates.py
+++ b/gns3server/schemas/controller/templates/docker_templates.py
@@ -15,11 +15,12 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from ...common import ConsoleType, AuxType, CustomAdapter, ExtraConfig
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
+
+from ...common import AuxType, ConsoleType, CustomAdapter, ExtraConfig
+from . import Category, TemplateBase
class DockerTemplateBase(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/dynamips_templates.py b/gns3server/schemas/controller/templates/dynamips_templates.py
index 69505051d..77e3f853a 100644
--- a/gns3server/schemas/controller/templates/dynamips_templates.py
+++ b/gns3server/schemas/controller/templates/dynamips_templates.py
@@ -14,20 +14,21 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from . import Category, TemplateBase
-
-from gns3server.schemas.compute.dynamips_nodes import (
- DynamipsConsoleType,
- DynamipsPlatform,
- DynamipsAdapters,
- DynamipsWics,
- DynamipsNPE,
- DynamipsMidplane,
-)
+from enum import Enum
+from typing import Optional
from pydantic import Field
-from typing import Optional
-from enum import Enum
+
+from gns3server.schemas.compute.dynamips_nodes import (
+ DynamipsAdapters,
+ DynamipsConsoleType,
+ DynamipsMidplane,
+ DynamipsNPE,
+ DynamipsPlatform,
+ DynamipsWics,
+)
+
+from . import Category, TemplateBase
class DynamipsTemplateBase(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/ethernet_hub_templates.py b/gns3server/schemas/controller/templates/ethernet_hub_templates.py
index a5b675937..8e273bc40 100644
--- a/gns3server/schemas/controller/templates/ethernet_hub_templates.py
+++ b/gns3server/schemas/controller/templates/ethernet_hub_templates.py
@@ -14,12 +14,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.ethernet_hub_nodes import EthernetHubPort
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
+from gns3server.schemas.compute.ethernet_hub_nodes import EthernetHubPort
+
+from . import Category, TemplateBase
DEFAULT_PORTS = [
EthernetHubPort(port_number=0, name="Ethernet0"),
diff --git a/gns3server/schemas/controller/templates/ethernet_switch_templates.py b/gns3server/schemas/controller/templates/ethernet_switch_templates.py
index 5e6f81f03..ddcaa05d5 100644
--- a/gns3server/schemas/controller/templates/ethernet_switch_templates.py
+++ b/gns3server/schemas/controller/templates/ethernet_switch_templates.py
@@ -15,12 +15,14 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.ethernet_switch_nodes import EthernetSwitchPort
+from enum import Enum
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
-from enum import Enum
+
+from gns3server.schemas.compute.ethernet_switch_nodes import EthernetSwitchPort
+
+from . import Category, TemplateBase
DEFAULT_PORTS = [
EthernetSwitchPort(port_number=0, name="Ethernet0", vlan=1, type="access", ethertype="0x8100"),
diff --git a/gns3server/schemas/controller/templates/iou_templates.py b/gns3server/schemas/controller/templates/iou_templates.py
index 36468d8aa..a67c6764a 100644
--- a/gns3server/schemas/controller/templates/iou_templates.py
+++ b/gns3server/schemas/controller/templates/iou_templates.py
@@ -15,11 +15,13 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.iou_nodes import ConsoleType
+from typing import Optional
from pydantic import Field
-from typing import Optional
+
+from gns3server.schemas.compute.iou_nodes import ConsoleType
+
+from . import Category, TemplateBase
class IOUTemplateBase(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/qemu_templates.py b/gns3server/schemas/controller/templates/qemu_templates.py
index 116dfc33c..e4f2421b5 100644
--- a/gns3server/schemas/controller/templates/qemu_templates.py
+++ b/gns3server/schemas/controller/templates/qemu_templates.py
@@ -15,20 +15,22 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.qemu_nodes import (
- QemuConsoleType,
- QemuPlatform,
- QemuAdapterType,
- QemuOnCloseAction,
- QemuBootPriority,
- QemuDiskInterfaceType,
- QemuProcessPriority,
- CustomAdapter,
-)
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
+
+from gns3server.schemas.compute.qemu_nodes import (
+ CustomAdapter,
+ QemuAdapterType,
+ QemuBootPriority,
+ QemuConsoleType,
+ QemuDiskInterfaceType,
+ QemuOnCloseAction,
+ QemuPlatform,
+ QemuProcessPriority,
+)
+
+from . import Category, TemplateBase
class QemuTemplate(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/virtualbox_templates.py b/gns3server/schemas/controller/templates/virtualbox_templates.py
index b9d966ec1..577f8ddc6 100644
--- a/gns3server/schemas/controller/templates/virtualbox_templates.py
+++ b/gns3server/schemas/controller/templates/virtualbox_templates.py
@@ -14,16 +14,18 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.virtualbox_nodes import (
- VirtualBoxConsoleType,
- VirtualBoxAdapterType,
- VirtualBoxOnCloseAction,
- CustomAdapter,
-)
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
+
+from gns3server.schemas.compute.virtualbox_nodes import (
+ CustomAdapter,
+ VirtualBoxAdapterType,
+ VirtualBoxConsoleType,
+ VirtualBoxOnCloseAction,
+)
+
+from . import Category, TemplateBase
class VirtualBoxTemplateBase(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/vmware_templates.py b/gns3server/schemas/controller/templates/vmware_templates.py
index 85d9dce96..4a0012489 100644
--- a/gns3server/schemas/controller/templates/vmware_templates.py
+++ b/gns3server/schemas/controller/templates/vmware_templates.py
@@ -15,16 +15,18 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.vmware_nodes import (
- VMwareConsoleType,
- VMwareAdapterType,
- VMwareOnCloseAction,
- CustomAdapter,
-)
+from typing import List, Optional
from pydantic import Field
-from typing import Optional, List
+
+from gns3server.schemas.compute.vmware_nodes import (
+ CustomAdapter,
+ VMwareAdapterType,
+ VMwareConsoleType,
+ VMwareOnCloseAction,
+)
+
+from . import Category, TemplateBase
class VMwareTemplateBase(TemplateBase):
diff --git a/gns3server/schemas/controller/templates/vpcs_templates.py b/gns3server/schemas/controller/templates/vpcs_templates.py
index e9f6e0b4f..a9167afc1 100644
--- a/gns3server/schemas/controller/templates/vpcs_templates.py
+++ b/gns3server/schemas/controller/templates/vpcs_templates.py
@@ -15,11 +15,13 @@
# along with this program. If not, see .
-from . import Category, TemplateBase
-from gns3server.schemas.compute.vpcs_nodes import ConsoleType
+from typing import Optional
from pydantic import Field
-from typing import Optional
+
+from gns3server.schemas.compute.vpcs_nodes import ConsoleType
+
+from . import Category, TemplateBase
class VPCSTemplate(TemplateBase):
diff --git a/gns3server/schemas/controller/tokens.py b/gns3server/schemas/controller/tokens.py
index 2ac14dda6..c6bde5d0e 100644
--- a/gns3server/schemas/controller/tokens.py
+++ b/gns3server/schemas/controller/tokens.py
@@ -15,6 +15,7 @@
# along with this program. If not, see .
from typing import Optional
+
from pydantic import BaseModel
diff --git a/gns3server/schemas/controller/topology.py b/gns3server/schemas/controller/topology.py
index 26ff78b3e..0c4f39489 100644
--- a/gns3server/schemas/controller/topology.py
+++ b/gns3server/schemas/controller/topology.py
@@ -19,18 +19,18 @@
# This file contains the validation for checking a .gns3 file
#
+from enum import Enum
+from typing import List, Optional
+from uuid import UUID
+
+from pydantic import BaseModel, Field
+
from .computes import Compute
from .drawings import Drawing
from .links import Link
from .nodes import Node
-
from .projects import Supplier, Variable
-from pydantic import BaseModel, Field
-from typing import Optional, List
-from enum import Enum
-from uuid import UUID
-
class TopologyType(str, Enum):
topology = "topology"
diff --git a/gns3server/schemas/controller/users.py b/gns3server/schemas/controller/users.py
index 8d8b90c13..44593ae31 100644
--- a/gns3server/schemas/controller/users.py
+++ b/gns3server/schemas/controller/users.py
@@ -16,9 +16,10 @@
from datetime import datetime
from typing import Optional
-from pydantic import ConfigDict, EmailStr, BaseModel, Field, SecretStr
from uuid import UUID
+from pydantic import BaseModel, ConfigDict, EmailStr, Field, SecretStr
+
from .base import DateTimeModelMixin
diff --git a/gns3server/schemas/qemu_disk_image.py b/gns3server/schemas/qemu_disk_image.py
index 1c0f596ad..9a3b591b9 100644
--- a/gns3server/schemas/qemu_disk_image.py
+++ b/gns3server/schemas/qemu_disk_image.py
@@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
-from typing import Optional
from enum import Enum
+from typing import Optional
+
+from pydantic import BaseModel, Field
class QemuDiskImageFormat(str, Enum):
diff --git a/gns3server/schemas/version.py b/gns3server/schemas/version.py
index db4b95ed5..e258bc6df 100644
--- a/gns3server/schemas/version.py
+++ b/gns3server/schemas/version.py
@@ -14,9 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from pydantic import BaseModel, Field
from typing import Optional
+from pydantic import BaseModel, Field
+
class Version(BaseModel):
controller_host: Optional[str] = Field(None, description="Controller hostname or IP address")