Skip to content

Pydantic Overview

Basic Pydantic example

from pydantic import BaseModel

class Vlan(BaseModel):
    id: int
    name: str

# Usage
vlan10 = Vlan(id=10, name="Vlan10")

print(vlan10)

Create a Pydantic data model for an interface with speed as an integer, vlan as an integer, and name as the interface name.

Enum Pydantic example

from pydantic import BaseModel
from enum import Enum

class BaseVlanType(str, Enum):
    VOICE = 'voice'
    DATA = 'data'

class Vlan(BaseModel):
    id: int
    name: str
    private: bool
    base_vlan: BaseVlanType

# Usage
vlan20 = Vlan(id=20, name="Vlan20", private=True, base_vlan=BaseVlanType.DATA)

print(vlan20)

Add to your Pydantic data model with with profile as an enum on your interface.

Pydantic Union & Nested Example

from ipaddress import IPv4Address, IPv6Address
from pydantic import BaseModel
from typing import List

class Device(BaseModel):
    serial: str
    ip_address: IPv4Address
    vlans: List[Vlan]

# Usage
vlan30 = Vlan(id=30, name="Vlan30", private=False, base_vlan=BaseVlanType.VOICE)
vlan40 = Vlan(id=40, name="Vlan40", private=True, base_vlan=BaseVlanType.DATA)

device1 = Device(serial="SN12345", ip_address="192.168.1.1", vlans=[vlan30, vlan40])

print(device1)

We can adjust to have either IPv4 or V6 model.

class Device(BaseModel):
    serial: str
    ip_address: Union[IPv4Address, IPv6Address]
    vlans: List[Vlan]

Add your interface to the interfaces key of the Device model.