diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b91e562d..b1458cca 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -92,7 +92,7 @@ jobs:
fail-fast: true
matrix:
python-version: ["3.11"]
- nautobot-version: ["2.2.3"]
+ nautobot-version: ["2.3.1"]
env:
INVOKE_NAUTOBOT_DEVICE_ONBOARDING_PYTHON_VER: "${{ matrix.python-version }}"
INVOKE_NAUTOBOT_DEVICE_ONBOARDING_NAUTOBOT_VER: "${{ matrix.nautobot-version }}"
@@ -145,7 +145,7 @@ jobs:
include:
- python-version: "3.11"
db-backend: "postgresql"
- nautobot-version: "2.2.3"
+ nautobot-version: "2.3.1"
- python-version: "3.12"
db-backend: "mysql"
nautobot-version: "stable"
diff --git a/README.md b/README.md
index 8f297027..353abdb8 100644
--- a/README.md
+++ b/README.md
@@ -19,15 +19,17 @@ Regardless, the Onboarding App greatly simplifies the onboarding process by allo
### Support Matrix (Sync Devices From Network)
+
| Data Attribute | Cisco IOS | Cisco XE | Cisco NXOS | Cisco WLC | Juniper Junos | Arista EOS | F5 | HP Comware | Palo Alto Panos | Aruba AOSCX |
| ----------------------- | :----------------: | :--------------: | :--------------: | :--------------: | :--------------: | :--------------: | :-: | :-: | :-: | :-: |
-| Hostname | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Platform | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Manufacturer | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Serial Number | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Device Type | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Mgmt Interface | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
-| Mgmt IP Address | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🧪 | 🧪 | 🧪 |
+| Hostname | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Platform | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Manufacturer | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Serial Number | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Device Type | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Mgmt Interface | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+| Mgmt IP Address | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | 🧪 | 🧪 |
+
### Support Matrix (Sync Data From Network)
@@ -43,6 +45,7 @@ Regardless, the Onboarding App greatly simplifies the onboarding process by allo
| 802.1Q mode | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
| Lag Member | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
| Vrf Membership | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
+| Software Version | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
| VLANS | Cisco IOS | Cisco XE | Cisco NXOS | Cisco WLC | Juniper Junos | Arista EOS | F5 |
| ----------------------- | :----------------: | :--------------: | :--------------: | :--------------: | :--------------: | :--------------: | :-: |
diff --git a/docs/admin/install.md b/docs/admin/install.md
index 15eb813a..12eb73a6 100644
--- a/docs/admin/install.md
+++ b/docs/admin/install.md
@@ -4,7 +4,7 @@ Here you will find detailed instructions on how to **install** and **configure**
## Prerequisites
-- The app is compatible with Nautobot 2.0.3 and higher.
+- The app is compatible with Nautobot 2.3.1 and higher.
- Databases supported: PostgreSQL, MySQL
!!! note
diff --git a/docs/admin/release_notes/version_4.2.md b/docs/admin/release_notes/version_4.2.md
index 79e0eb7f..6d368c10 100755
--- a/docs/admin/release_notes/version_4.2.md
+++ b/docs/admin/release_notes/version_4.2.md
@@ -13,6 +13,31 @@ Versioning](https://semver.org/spec/v2.0.0.html).
- [#340](https://github.com/nautobot/nautobot-app-device-onboarding/issues/340) - Add Aruba AOSCX support for Sync Devices from Network Job.
- [#278](https://github.com/nautobot/nautobot-app-device-onboarding/issues/278) - Optimized VLAN loading into diffsync from Nautbot
- [#278](https://github.com/nautobot/nautobot-app-device-onboarding/issues/278) - Improved error handling when creating VLANs
+- [#233](https://github.com/nautobot/nautobot-app-device-onboarding/issues/233) - Added support syncing in software versions from devices to nautobot core models.
+- [#334](https://github.com/nautobot/nautobot-app-device-onboarding/issues/334) - Add initial F5 Support for Network Device Sync
+- [#357](https://github.com/nautobot/nautobot-app-device-onboarding/issues/357) - Added improved error messaging for device object `get()` call in the `update()` method of `SyncDevicesDevice`
+- [#372](https://github.com/nautobot/nautobot-app-device-onboarding/issues/372) - Fixed bug when loading Nautobot Vlans with multiple locations assigned. Only Vlans with 1 location will be considered for the sync.
+
+## [v4.2.5 (2025-05-13)](https://github.com/nautobot/nautobot-app-device-onboarding/releases/tag/v4.2.5)
+
+### Added
+
+- [#233](https://github.com/nautobot/nautobot-app-device-onboarding/issues/233) - Added support syncing in software versions from devices to nautobot core models.
+- [#334](https://github.com/nautobot/nautobot-app-device-onboarding/issues/334) - Add initial F5 Support for Network Device Sync
+- [#357](https://github.com/nautobot/nautobot-app-device-onboarding/issues/357) - Added improved error messaging for device object `get()` call in the `update()` method of `SyncDevicesDevice`
+
+### Fixed
+
+- [#372](https://github.com/nautobot/nautobot-app-device-onboarding/issues/372) - Fixed bug when loading Nautobot Vlans with multiple locations assigned. Only Vlans with 1 location will be considered for the sync.
+
+### Dependencies
+
+- [#367](https://github.com/nautobot/nautobot-app-device-onboarding/issues/367) - Updated jdiff dependency pin.
+
+### Documentation
+
+- [#358](https://github.com/nautobot/nautobot-app-device-onboarding/issues/358) - Updated documentation on the README for VRF.
+
## [v4.2.4 (2025-04-08)](https://github.com/nautobot/nautobot-app-device-onboarding/releases/tag/v4.2.4)
diff --git a/docs/user/app_overview.md b/docs/user/app_overview.md
index abb37817..38eda3af 100644
--- a/docs/user/app_overview.md
+++ b/docs/user/app_overview.md
@@ -47,6 +47,8 @@ Expose two new SSoT based Nautobot jobs to perform the syncing of data.
- VRFs
- VRF Names
- Route Distinguishers (RD)
+ - Cabling
+ - Software Version
- Cabling (**Note** Cables attached to Circuits will be skipped)
!!! info
diff --git a/mkdocs.yml b/mkdocs.yml
index 6921c89b..3a45b876 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -79,6 +79,7 @@ markdown_extensions:
permalink: true
- "attr_list"
- "md_in_html"
+ - "pymdownx.details"
- "pymdownx.highlight":
anchor_linenums: true
- "pymdownx.inlinehilite"
diff --git a/nautobot_device_onboarding/command_mappers/arista_eos.yml b/nautobot_device_onboarding/command_mappers/arista_eos.yml
index ef72954e..bad966d4 100755
--- a/nautobot_device_onboarding/command_mappers/arista_eos.yml
+++ b/nautobot_device_onboarding/command_mappers/arista_eos.yml
@@ -116,3 +116,8 @@ sync_network_data:
jpath: '{admin_mode: switchports."{{ current_key }}".switchportInfo.mode, mode: switchports."{{ current_key }}".switchportInfo.mode, access_vlan: switchports."{{ current_key }}".switchportInfo.accessVlanId, trunking_vlans: switchports."{{ current_key }}".switchportInfo.trunkAllowedVlans, native_vlan: switchports."{{ current_key }}".switchportInfo.trunkingNativeVlanId}' # yamllint disable-line rule:quoted-strings
post_processor: "{{ obj | get_vlan_data(vlan_map, 'untagged') | tojson }}"
iterable_type: "dict"
+ software_version:
+ commands:
+ - command: "show version"
+ parser: "textfsm"
+ jpath: "[*].image"
diff --git a/nautobot_device_onboarding/command_mappers/cisco_ios.yml b/nautobot_device_onboarding/command_mappers/cisco_ios.yml
index 5d7734dc..b4141a54 100755
--- a/nautobot_device_onboarding/command_mappers/cisco_ios.yml
+++ b/nautobot_device_onboarding/command_mappers/cisco_ios.yml
@@ -129,3 +129,8 @@ sync_network_data:
parser: "textfsm"
jpath: "[*].{local_interface:local_interface, remote_interface:neighbor_interface, remote_device:neighbor_name}"
post_processor: "{% set result = [] %}{% for cable in obj %}{% set _=result.append({'local_interface': cable['local_interface'], 'remote_interface': cable['remote_interface'], 'remote_device': cable['remote_device'] | remove_fqdn }) %}{% endfor %}{{ result | tojson }}"
+ software_version:
+ commands:
+ - command: "show version"
+ parser: "textfsm"
+ jpath: "[*].version"
diff --git a/nautobot_device_onboarding/command_mappers/cisco_nxos.yml b/nautobot_device_onboarding/command_mappers/cisco_nxos.yml
index e0f672a4..c7db1408 100755
--- a/nautobot_device_onboarding/command_mappers/cisco_nxos.yml
+++ b/nautobot_device_onboarding/command_mappers/cisco_nxos.yml
@@ -122,3 +122,8 @@ sync_network_data:
parser: "textfsm"
jpath: "[*].{local_interface:local_interface, remote_interface:neighbor_interface, remote_device:neighbor_name}"
post_processor: "{% set result = [] %}{% for cable in obj %}{% set _=result.append({'local_interface': cable['local_interface'], 'remote_interface': cable['remote_interface'], 'remote_device': cable['remote_device'] | remove_fqdn }) %}{% endfor %}{{ result | tojson }}"
+ software_version:
+ commands:
+ - command: "show version"
+ parser: "textfsm"
+ jpath: "[*].os"
diff --git a/nautobot_device_onboarding/command_mappers/cisco_xe.yml b/nautobot_device_onboarding/command_mappers/cisco_xe.yml
index aa1e5c8a..64c280dc 100755
--- a/nautobot_device_onboarding/command_mappers/cisco_xe.yml
+++ b/nautobot_device_onboarding/command_mappers/cisco_xe.yml
@@ -126,3 +126,8 @@ sync_network_data:
parser: "textfsm"
jpath: "[*].{local_interface:local_interface, remote_interface:neighbor_interface, remote_device:neighbor_name}"
post_processor: "{% set result = [] %}{% for cable in obj %}{% set _=result.append({'local_interface': cable['local_interface'], 'remote_interface': cable['remote_interface'], 'remote_device': cable['remote_device'] | remove_fqdn }) %}{% endfor %}{{ result | tojson }}"
+ software_version:
+ commands:
+ - command: "show version"
+ parser: "textfsm"
+ jpath: "[*].version"
diff --git a/nautobot_device_onboarding/command_mappers/f5_tmsh.yml b/nautobot_device_onboarding/command_mappers/f5_tmsh.yml
new file mode 100755
index 00000000..7dc15dda
--- /dev/null
+++ b/nautobot_device_onboarding/command_mappers/f5_tmsh.yml
@@ -0,0 +1,36 @@
+---
+sync_devices:
+ hostname:
+ commands:
+ - command: "show cm device"
+ parser: "ttp"
+ jpath: "[]|[?mgmt_ip==`{{ obj }}`].mgmt_hostname"
+ post_processor: "{{ obj[0] }}"
+ interable_type: "str"
+ serial:
+ commands:
+ - command: "show sys hardware"
+ parser: "ttp"
+ jpath: "[*].serial_number"
+ post_processor: "{{ obj[0] }}"
+ interable_type: "str"
+ device_type:
+ commands:
+ - command: "show sys hardware"
+ parser: "ttp"
+ jpath: "[*].model_type"
+ post_processor: "{{ obj[0] }}"
+ interable_type: "str"
+ mgmt_interface:
+ commands:
+ - command: "show net interface | grep mgmt | grep up"
+ parser: "raw"
+ jpath: "raw"
+ post_processor: "{{ obj.split(' ')[0] }}"
+ mask_length:
+ commands:
+ - command: "show sys cluster"
+ parser: "ttp"
+ jpath: "[*].mgmt_mask"
+ post_processor: "{{ obj[0] }}"
+ iterable_type: "int"
diff --git a/nautobot_device_onboarding/command_mappers/juniper_junos.yml b/nautobot_device_onboarding/command_mappers/juniper_junos.yml
index b146f5f3..7eb51d82 100755
--- a/nautobot_device_onboarding/command_mappers/juniper_junos.yml
+++ b/nautobot_device_onboarding/command_mappers/juniper_junos.yml
@@ -121,3 +121,8 @@ sync_network_data:
jpath: '"lldp-neighbors-information"[]."lldp-neighbor-information"[].{local_interface: "lldp-local-port-id"[0].data, remote_interface: "lldp-remote-port-id"[0].data, remote_device: "lldp-remote-system-name"[0].data}' # yamllint disable-line rule:quoted-strings
post_processor: "{% set result = [] %}{% for cable in obj %}{% set _=result.append({'local_interface': cable['local_interface'], 'remote_interface': cable['remote_interface'], 'remote_device': cable['remote_device'] | remove_fqdn }) %}{% endfor %}{{ result | tojson }}"
iterable_type: "dict"
+ software_version:
+ commands:
+ - command: "show system information | display json"
+ parser: "none"
+ jpath: '"system-information"[]."os-version"[].data' # yamllint disable-line rule:quoted-strings
diff --git a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py
index 316f7dcb..b1f26f59 100644
--- a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py
+++ b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py
@@ -7,7 +7,7 @@
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
-from nautobot.dcim.models import Interface
+from nautobot.dcim.models import Device, Interface, SoftwareVersion
from nautobot.ipam.models import VLAN, VRF, IPAddress
from nautobot_ssot.contrib import NautobotAdapter
from netaddr import EUI, mac_unix_expanded
@@ -52,6 +52,8 @@ class SyncNetworkDataNautobotAdapter(FilteredNautobotAdapter):
lag_to_interface = sync_network_data_models.SyncNetworkDataLagToInterface
vrf_to_interface = sync_network_data_models.SyncNetworkDataVrfToInterface
cable = sync_network_data_models.SyncNetworkDataCable
+ software_version = sync_network_data_models.SyncNetworkSoftwareVersion
+ software_version_to_device = sync_network_data_models.SyncNetworkSoftwareVersionToDevice
primary_ips = None
@@ -66,6 +68,8 @@ class SyncNetworkDataNautobotAdapter(FilteredNautobotAdapter):
"lag_to_interface",
"vrf_to_interface",
"cable",
+ "software_version",
+ "software_version_to_device",
]
def _cache_primary_ips(self, device_queryset):
@@ -134,7 +138,15 @@ def load_vlans(self):
"""
# TODO: update this to support multiple locations per VLAN after the setting for this feature has been added.
location_ids = list(self.job.devices_to_load.values_list("location__id", flat=True))
- for vlan in VLAN.objects.filter(location__in=location_ids):
+ for vlan in VLAN.objects.filter(locations__in=location_ids):
+ if (
+ vlan.locations.count() > 1
+ ): # TODO: A conditional check will be needed here to support multiple locations per VLAN
+ if self.job.debug:
+ self.job.logger.debug(
+ f"Vlan {vlan.name} has multiple locations. Skipping Vlan load for {vlan.name}."
+ )
+ continue
network_vlan = self.vlan(
adapter=self,
name=vlan.name,
@@ -305,6 +317,32 @@ def load_cables(self):
except diffsync.exceptions.ObjectAlreadyExists:
continue
+ def load_software_versions(self):
+ """Load Software Versions into the Diffsync store."""
+ for software_version in SoftwareVersion.objects.all():
+ network_software_version = self.software_version(
+ adapter=self,
+ version=software_version.version,
+ platform__name=software_version.platform.name,
+ )
+ try:
+ network_software_version.model_flags = DiffSyncModelFlags.SKIP_UNMATCHED_DST
+ self.add(network_software_version)
+ except diffsync.exceptions.ObjectAlreadyExists:
+ continue
+
+ def load_software_version_to_device(self):
+ """Load Software Version to Device assignments into the Diffsync store."""
+ for device in self.job.devices_to_load:
+ network_software_version_to_device = self.software_version_to_device(
+ adapter=self,
+ name=device.name,
+ serial=device.serial,
+ software_version__version=device.software_version.version if device.software_version else "",
+ )
+ network_software_version_to_device.model_flags = DiffSyncModelFlags.SKIP_UNMATCHED_DST
+ self.add(network_software_version_to_device)
+
def load(self):
"""Generic implementation of the load function."""
if not hasattr(self, "top_level") or not self.top_level:
@@ -334,6 +372,12 @@ def load(self):
elif model_name == "cable":
if self.job.sync_cables:
self.load_cables()
+ elif model_name == "software_version":
+ if self.job.sync_software_version:
+ self.load_software_versions()
+ elif model_name == "software_version_to_device":
+ if self.job.sync_software_version:
+ self.load_software_version_to_device()
else:
diffsync_model = self._get_diffsync_class(model_name)
self._load_objects(diffsync_model)
@@ -409,6 +453,8 @@ def __init__(self, *args, job, sync=None, **kwargs):
lag_to_interface = sync_network_data_models.SyncNetworkDataLagToInterface
vrf_to_interface = sync_network_data_models.SyncNetworkDataVrfToInterface
cable = sync_network_data_models.SyncNetworkDataCable
+ software_version = sync_network_data_models.SyncNetworkSoftwareVersion
+ software_version_to_device = sync_network_data_models.SyncNetworkSoftwareVersionToDevice
top_level = [
"ip_address",
@@ -421,6 +467,8 @@ def __init__(self, *args, job, sync=None, **kwargs):
"lag_to_interface",
"vrf_to_interface",
"cable",
+ "software_version",
+ "software_version_to_device",
]
def _handle_failed_devices(self, device_data):
@@ -890,6 +938,46 @@ def load_cables(self): # pylint: disable=inconsistent-return-statements
model_type="cable",
)
+ def load_software_versions(self):
+ """Load software versions into the Diffsync store."""
+ for ( # pylint: disable=too-many-nested-blocks
+ hostname,
+ device_data,
+ ) in self.job.command_getter_result.items():
+ if self.job.debug:
+ self.job.logger.debug(f"Loading Software Versions from {hostname}")
+ if device_data["software_version"]:
+ device = Device.objects.get(serial=device_data["serial"])
+ try:
+ network_software_version = self.software_version(
+ adapter=self,
+ platform__name=device.platform.name,
+ version=device_data["software_version"],
+ )
+ self.add(network_software_version)
+ except diffsync.exceptions.ObjectAlreadyExists:
+ continue
+
+ def load_software_version_to_device(self):
+ """Load software version to device assignments into the Diffsync store."""
+ for ( # pylint: disable=too-many-nested-blocks
+ hostname,
+ device_data,
+ ) in self.job.command_getter_result.items():
+ if self.job.debug:
+ self.job.logger.debug(f"Loading Software Version to Device assignments from {hostname}")
+ if device_data["software_version"]:
+ try:
+ network_software_version_to_device = self.software_version_to_device(
+ adapter=self,
+ name=hostname,
+ serial=device_data["serial"],
+ software_version__version=device_data["software_version"],
+ )
+ self.add(network_software_version_to_device)
+ except diffsync.exceptions.ObjectAlreadyExists:
+ continue
+
def load(self):
"""Load network data."""
self.execute_command_getter()
@@ -908,3 +996,7 @@ def load(self):
self.load_vrf_to_interface()
if self.job.sync_cables:
self.load_cables()
+ if self.job.sync_software_version:
+ self.load_software_versions()
+ if self.job.sync_software_version:
+ self.load_software_version_to_device()
diff --git a/nautobot_device_onboarding/diffsync/models/sync_devices_models.py b/nautobot_device_onboarding/diffsync/models/sync_devices_models.py
index 0f5cc4e6..24ee38fd 100644
--- a/nautobot_device_onboarding/diffsync/models/sync_devices_models.py
+++ b/nautobot_device_onboarding/diffsync/models/sync_devices_models.py
@@ -249,7 +249,14 @@ def create(cls, adapter, ids, attrs):
def update(self, attrs):
"""Update an existing nautobot device using data scraped from a device."""
- device = Device.objects.get(name=self.name, location__name=self.location__name)
+ try:
+ device = Device.objects.get(name=self.name, location__name=self.location__name)
+ except MultipleObjectsReturned as exc:
+ raise MultipleObjectsReturned(
+ f"Multiple devices found with name {self.name} and location {self.location__name}"
+ ) from exc
+ except ObjectDoesNotExist as exc:
+ raise ObjectDoesNotExist(f"Device {self.name} does not exist at {self.location__name}") from exc
if self.adapter.job.debug:
self.adapter.job.logger.debug(f"Updating {device.name} with attrs: {attrs}")
diff --git a/nautobot_device_onboarding/diffsync/models/sync_network_data_models.py b/nautobot_device_onboarding/diffsync/models/sync_network_data_models.py
index 760f7678..e85d7451 100644
--- a/nautobot_device_onboarding/diffsync/models/sync_network_data_models.py
+++ b/nautobot_device_onboarding/diffsync/models/sync_network_data_models.py
@@ -1,6 +1,7 @@
"""Diffsync models."""
from typing import List, Optional
+from uuid import UUID
try:
from typing import Annotated # Python>=3.9
@@ -11,7 +12,7 @@
from diffsync import exceptions as diffsync_exceptions
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist, ValidationError
from nautobot.dcim.choices import InterfaceTypeChoices
-from nautobot.dcim.models import Cable, Device, Interface, Location
+from nautobot.dcim.models import Cable, Device, Interface, Location, Platform, SoftwareVersion
from nautobot.extras.models import Status
from nautobot.ipam.models import VLAN, VRF, IPAddress, IPAddressToInterface
from nautobot_ssot.contrib import CustomFieldAnnotation, NautobotModel
@@ -667,3 +668,117 @@ class SyncNetworkDataCable(FilteredNautobotModel):
termination_b__name: str
status__name: str
+
+
+class SyncNetworkSoftwareVersion(DiffSyncModel):
+ """Shared data model representing a software version."""
+
+ _modelname = "software_version"
+ _model = SoftwareVersion
+ _identifiers = (
+ "version",
+ "platform__name",
+ )
+ _attributes = ()
+ _children = {}
+
+ version: str
+ platform__name: str
+
+ pk: Optional[UUID] = None
+
+ @classmethod
+ def create(cls, adapter, ids, attrs):
+ """Create a new software version."""
+ try:
+ platform = Platform.objects.get(name=ids["platform__name"])
+ except ObjectDoesNotExist:
+ adapter.job.logger.error(
+ f"Failed to create software version {ids['version']}. An platform with name: "
+ f"{ids['platform__name']} was not found."
+ )
+ raise diffsync_exceptions.ObjectNotCreated
+ try:
+ software_version = SoftwareVersion(
+ version=ids["version"],
+ platform=platform,
+ status=Status.objects.get(name="Active"),
+ )
+ software_version.validated_save()
+ except ValidationError as err:
+ adapter.job.logger.error(f"Software version {software_version} failed to create, {err}")
+ raise diffsync_exceptions.ObjectNotCreated
+
+ return super().create(adapter, ids, attrs)
+
+ def delete(self):
+ """Prevent software version deletion."""
+ self.adapter.job.logger.error(f"{self} will not be deleted.")
+ return None
+
+
+class SyncNetworkSoftwareVersionToDevice(DiffSyncModel):
+ """Shared data model representing a software version to device."""
+
+ _model = Device
+ _modelname = "software_version_to_device"
+ _identifiers = (
+ "name",
+ "serial",
+ )
+ _attributes = ("software_version__version",)
+
+ name: str
+ serial: str
+ software_version__version: str
+
+ def _get_and_assign_sofware_version(self, adapter, attrs):
+ """Assign a software version to a device."""
+ try:
+ device = Device.objects.get(**self.get_identifiers())
+ except ObjectDoesNotExist:
+ adapter.job.logger.error(
+ f"Failed to assign software version to {self.name}. An device with name: " f"{self.name} was not found."
+ )
+ raise diffsync_exceptions.ObjectNotCreated
+ try:
+ software_version = SoftwareVersion.objects.get(
+ version=attrs["software_version__version"], platform=device.platform
+ )
+ device.software_version = software_version
+ except ObjectDoesNotExist:
+ adapter.job.logger.error(
+ f"Failed to assign software version to {self.name}. An software version with name: "
+ f"{self.name} was not found."
+ )
+ raise diffsync_exceptions.ObjectNotUpdated
+ try:
+ device.validated_save()
+ except ValidationError as err:
+ adapter.job.logger.error(f"Software version {software_version} failed to assign, {err}")
+ raise diffsync_exceptions.ObjectNotUpdated
+
+ def update(self, attrs):
+ """Update an existing SoftwareVersionToDevice object."""
+ if attrs.get("software_version__version"):
+ try:
+ self._get_and_assign_sofware_version(self.adapter, attrs)
+ except ObjectDoesNotExist as err:
+ self.adapter.job.logger.error(f"{self} failed to update, {err}")
+ raise diffsync_exceptions.ObjectNotUpdated
+
+ return super().update(attrs)
+
+ @classmethod
+ def create(cls, adapter, ids, attrs):
+ """
+ Do not create new devices.
+
+ Network devices need to exist in Nautobot prior to syncing data and
+ need to be included in the queryset generated based on job form inputs.
+ """
+ return None
+
+ def delete(self):
+ """Prevent device deletion."""
+ return None
diff --git a/nautobot_device_onboarding/jobs.py b/nautobot_device_onboarding/jobs.py
index 60ca84bd..ddd8c78f 100755
--- a/nautobot_device_onboarding/jobs.py
+++ b/nautobot_device_onboarding/jobs.py
@@ -594,6 +594,7 @@ class Meta:
sync_vlans = BooleanVar(default=False, description="Sync VLANs and interface VLAN assignments.")
sync_vrfs = BooleanVar(default=False, description="Sync VRFs and interface VRF assignments.")
sync_cables = BooleanVar(default=False, description="Sync cables between interfaces via a LLDP or CDP.")
+ sync_software_version = BooleanVar(default=False, description="Sync software version from device.")
namespace = ObjectVar(
model=Namespace,
required=True,
@@ -670,6 +671,7 @@ def run(
sync_vlans,
sync_vrfs,
sync_cables,
+ sync_software_version,
*args,
**kwargs,
):
@@ -688,6 +690,7 @@ def run(
self.sync_vlans = sync_vlans
self.sync_vrfs = sync_vrfs
self.sync_cables = sync_cables
+ self.sync_software_version = sync_software_version
# Check for last_network_data_sync CustomField
if self.debug:
@@ -750,6 +753,7 @@ def run(
"sync_vlans": sync_vlans,
"sync_vrfs": sync_vrfs,
"sync_cables": sync_cables,
+ "sync_software_version": sync_software_version,
"connectivity_test": kwargs["connectivity_test"],
}
@@ -805,6 +809,7 @@ def run(self, *args, **kwargs): # pragma: no cover
kwargs.update({"sync_vrfs": True})
kwargs.update({"sync_vlans": True})
kwargs.update({"sync_cables": True})
+ kwargs.update({"sync_software_version": True})
nr_with_processors.run(
task=netmiko_send_commands,
command_getter_yaml_data=nornir_obj.inventory.defaults.data["platform_parsing_info"],
@@ -824,6 +829,7 @@ def run(self, *args, **kwargs): # pragma: no cover
kwargs.update({"sync_vrfs": True})
kwargs.update({"sync_vlans": True})
kwargs.update({"sync_cables": True})
+ kwargs.update({"sync_software_version": True})
nr_with_processors.run(
task=netmiko_send_commands,
command_getter_yaml_data=nornir_obj.inventory.defaults.data["platform_parsing_info"],
diff --git a/nautobot_device_onboarding/nornir_plays/command_getter.py b/nautobot_device_onboarding/nornir_plays/command_getter.py
index eff29225..0d3b8abb 100755
--- a/nautobot_device_onboarding/nornir_plays/command_getter.py
+++ b/nautobot_device_onboarding/nornir_plays/command_getter.py
@@ -58,7 +58,7 @@ def deduplicate_command_list(data):
return unique_list
-def _get_commands_to_run(yaml_parsed_info, sync_vlans, sync_vrfs, sync_cables):
+def _get_commands_to_run(yaml_parsed_info, sync_vlans, sync_vrfs, sync_cables, sync_software_version):
"""Using merged command mapper info and look up all commands that need to be run."""
all_commands = []
for key, value in yaml_parsed_info.items():
@@ -78,30 +78,36 @@ def _get_commands_to_run(yaml_parsed_info, sync_vlans, sync_vrfs, sync_cables):
# Deduplicate commands + parser key
current_root_key = value.get("commands")
if isinstance(current_root_key, list):
- # Means their is any "nested" structures. e.g multiple commands
+ # Means there is a "nested" structures. e.g. multiple commands
for command in value["commands"]:
- # If syncing vlans isn't inscope don't run the unneeded commands.
+ # If syncing vlans isn't in scope don't run the unneeded commands.
if not sync_vlans and key in ["interfaces__tagged_vlans", "interfaces__untagged_vlan"]:
continue
- # If syncing vrfs isn't inscope remove the unneeded commands.
+ # If syncing vrfs isn't in scope remove the unneeded commands.
if not sync_vrfs and key == "interfaces__vrf":
continue
- # If syncing cables isn't inscope remove the unneeded commands.
+ # If syncing cables isn't in scope remove the unneeded commands.
if not sync_cables and key == "cables":
continue
+ # If syncing software_versions isn't in scope remove the unneeded commands.
+ if not sync_software_version and key == "software_version":
+ continue
all_commands.append(command)
else:
if isinstance(current_root_key, dict):
- # If syncing vlans isn't inscope don't run the unneeded commands.
+ # Means there isn't a "nested" structures. e.g. 1 command
+ # If syncing vlans isn't in scope don't run the unneeded commands.
if not sync_vlans and key in ["interfaces__tagged_vlans", "interfaces__untagged_vlan"]:
continue
- # If syncing vrfs isn't inscope remove the unneeded commands.
+ # If syncing vrfs isn't in scope remove the unneeded commands.
if not sync_vrfs and key == "interfaces__vrf":
continue
- # If syncing cables isn't inscope remove the unneeded commands.
+ # If syncing cables isn't in scope remove the unneeded commands.
if not sync_cables and key == "cables":
continue
- # Means their isn't a "nested" structures. e.g 1 command
+ # If syncing software_versions isn't in scope remove the unneeded commands.
+ if not sync_software_version and key == "software_version":
+ continue
all_commands.append(current_root_key)
return deduplicate_command_list(all_commands)
@@ -129,6 +135,7 @@ def netmiko_send_commands(
orig_job_kwargs.get("sync_vlans", False),
orig_job_kwargs.get("sync_vrfs", False),
orig_job_kwargs.get("sync_cables", False),
+ orig_job_kwargs.get("sync_software_version", False),
)
if (
orig_job_kwargs.get("sync_cables", False)
@@ -358,6 +365,7 @@ def sync_network_data_command_getter(job_result, log_level, kwargs):
"sync_vlans": kwargs["sync_vlans"],
"sync_vrfs": kwargs["sync_vrfs"],
"sync_cables": kwargs["sync_cables"],
+ "sync_software_version": kwargs["sync_software_version"],
},
},
},
diff --git a/nautobot_device_onboarding/nornir_plays/formatter.py b/nautobot_device_onboarding/nornir_plays/formatter.py
index 1752c567..3e20ae64 100755
--- a/nautobot_device_onboarding/nornir_plays/formatter.py
+++ b/nautobot_device_onboarding/nornir_plays/formatter.py
@@ -127,6 +127,7 @@ def perform_data_extraction(host, command_info_dict, command_outputs_dict, job_d
sync_vlans = host.defaults.data.get("sync_vlans", False)
sync_vrfs = host.defaults.data.get("sync_vrfs", False)
sync_cables = host.defaults.data.get("sync_cables", False)
+ sync_software_version = host.defaults.data.get("sync_software_version", False)
get_context_from_pre_processor = {}
if command_info_dict.get("pre_processor"):
for pre_processor_name, field_data in command_info_dict["pre_processor"].items():
@@ -155,6 +156,8 @@ def perform_data_extraction(host, command_info_dict, command_outputs_dict, job_d
continue
if not sync_cables and ssot_field == "cables":
continue
+ if not sync_software_version and ssot_field == "software_version":
+ continue
if ssot_field == "pre_processor":
continue
if isinstance(field_data["commands"], dict):
diff --git a/nautobot_device_onboarding/nornir_plays/schemas.py b/nautobot_device_onboarding/nornir_plays/schemas.py
index b9cb40e9..045a203d 100755
--- a/nautobot_device_onboarding/nornir_plays/schemas.py
+++ b/nautobot_device_onboarding/nornir_plays/schemas.py
@@ -216,5 +216,9 @@ def sync_network_data_schema(json_schema=True):
},
},
},
+ "software_version": {
+ "type": "string",
+ "description": "Software version of the device",
+ },
},
}
diff --git a/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_cm_device.ttp b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_cm_device.ttp
new file mode 100755
index 00000000..fcd795d9
--- /dev/null
+++ b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_cm_device.ttp
@@ -0,0 +1,2 @@
+Hostname {{ mgmt_hostname }}
+Mgmt IP {{ mgmt_ip }}
diff --git a/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_cluster.ttp b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_cluster.ttp
new file mode 100755
index 00000000..6db3ce76
--- /dev/null
+++ b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_cluster.ttp
@@ -0,0 +1 @@
+Address {{ mgmt_ip }}/{{ mgmt_mask }}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_hardware.ttp b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_hardware.ttp
new file mode 100755
index 00000000..87d43927
--- /dev/null
+++ b/nautobot_device_onboarding/parsers/ttp/f5_tmsh_show_sys_hardware.ttp
@@ -0,0 +1,8 @@
+
+Platform {{ _start_ }}
+ Name {{ model_type | ORPHRASE }}
+{{ _end_ }}
+System Information {{ _start_ }}
+ Chassis Serial {{ serial_number | ORPHRASE }}
+{{ _end_ }}
+
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/fixtures/sync_network_data_fixture.py b/nautobot_device_onboarding/tests/fixtures/sync_network_data_fixture.py
index 5043525a..d31e238d 100644
--- a/nautobot_device_onboarding/tests/fixtures/sync_network_data_fixture.py
+++ b/nautobot_device_onboarding/tests/fixtures/sync_network_data_fixture.py
@@ -109,6 +109,7 @@
"remote_interface": "GigabitEthernet3",
},
],
+ "software_version": "16.12.4",
},
"demo-cisco-2": {
"serial": "9ABUXU5882222",
@@ -190,6 +191,7 @@
"remote_interface": "GigabitEthernet3",
},
],
+ "software_version": "3.12R.4",
},
}
failed_device = {"demo-cisco-3": {"failed": True, "failed_reason": "Authentication failure"}}
diff --git a/nautobot_device_onboarding/tests/mock/arista_eos/sync_network_data_with_software/expected_result_1.json b/nautobot_device_onboarding/tests/mock/arista_eos/sync_network_data_with_software/expected_result_1.json
new file mode 100644
index 00000000..afd6bea1
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/arista_eos/sync_network_data_with_software/expected_result_1.json
@@ -0,0 +1,71 @@
+{
+ "interfaces": {
+ "Ethernet1": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "1.1.1.1",
+ "prefix_length": 24
+ }
+ ],
+ "lag": [],
+ "link_status": "False",
+ "mac_address": "52:54:00:91:1e:bf",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet2": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [],
+ "lag": [],
+ "link_status": "True",
+ "mac_address": "52:54:00:15:b8:13",
+ "mtu": "9214",
+ "type": "1000base-t"
+ },
+ "Ethernet3": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [],
+ "lag": [],
+ "link_status": "True",
+ "mac_address": "52:54:00:07:8d:69",
+ "mtu": "9214",
+ "type": "1000base-t"
+ },
+ "Ethernet4": {
+ "802.1Q_mode": "tagged",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "0.0.0.0",
+ "prefix_length": 0
+ }
+ ],
+ "lag": [],
+ "link_status": "True",
+ "mac_address": "52:54:00:91:1e:bf",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Management1": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": 24
+ }
+ ],
+ "lag": [],
+ "link_status": "True",
+ "mac_address": "52:54:00:0d:29:5c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ }
+ },
+ "serial": "17E1C0B9EEFFCE88C2E0703E4A1D4FB0",
+ "software_version": "4.31.0F"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_1.json b/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_1.json
new file mode 100644
index 00000000..42528e1b
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_1.json
@@ -0,0 +1,276 @@
+{
+ "interfaces": {
+ "GigabitEthernet0/1": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.3581",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/10": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.358a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/11": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.358b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/12": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.358c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/13": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.358d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/14": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.358e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/15": {
+ "802.1Q_mode": "tagged",
+ "description": "***connection to SW1***",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.358f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/16": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3590",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/2": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.3582",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/3": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.3583",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/4": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.3584",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/5": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3585",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/6": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3586",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/7": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3587",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/8": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3588",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/9": {
+ "802.1Q_mode": "tagged-all",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.3589",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Vlan1": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "6c71.0d1d.35c0",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan10": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "6c71.0d1d.35c1",
+ "mtu": "1500",
+ "type": "virtual"
+ }
+ },
+ "serial": "FOC2341Y2CQ",
+ "software_version": "15.2(7)E9"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_2.json b/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_2.json
new file mode 100644
index 00000000..dda93f0e
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/cisco_ios/sync_network_data_with_software/expected_result_2.json
@@ -0,0 +1,201 @@
+{
+ "interfaces": {
+ "GigabitEthernet0/1": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1501",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/10": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.150a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/2": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1502",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/3": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1503",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/4": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1504",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/5": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1505",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/6": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "2c3f.3899.1506",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/7": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "2c3f.3899.1507",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/8": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "2c3f.3899.1508",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet0/9": {
+ "802.1Q_mode": "access",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "2c3f.3899.1509",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Vlan1": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "2c3f.3899.1540",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan255": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "10.35.255.75",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1541",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan955": {
+ "802.1Q_mode": "",
+ "description": "",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": "27"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "2c3f.3899.1542",
+ "mtu": "1500",
+ "type": "virtual"
+ }
+ },
+ "serial": "FOC1541W2SP",
+ "software_version": "15.0(2)SE8"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/cisco_nxos/sync_network_data_with_software/expected_result_1.json b/nautobot_device_onboarding/tests/mock/cisco_nxos/sync_network_data_with_software/expected_result_1.json
new file mode 100644
index 00000000..3f4d4321
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/cisco_nxos/sync_network_data_with_software/expected_result_1.json
@@ -0,0 +1,1221 @@
+{
+ "serial": "FDO20432435",
+ "software_version": "7.0(3)I7(4)",
+ "interfaces": {
+ "Ethernet1/1": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/1.1": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "139.65.22.246",
+ "prefix_length": "30"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/10": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f5",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/11": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99f6",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/12": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99f7",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/13": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99f8",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/14": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99f9",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/15": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99fa",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/16": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99fb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/17": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99fc",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/18": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99fd",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/19": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99fe",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/2": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/2.1": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "139.65.22.250",
+ "prefix_length": "30"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/20": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99ff",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/21": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a00",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/22": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a01",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/23": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a02",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/24": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a03",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/25": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a04",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/26": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a05",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/27": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a06",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/28": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/28.2": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "172.16.0.2",
+ "prefix_length": "31"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/29": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a08",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/3": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99ee",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/30": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a09",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/31": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0a",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/32": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0b",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/33": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/34": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/35": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/36": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/37": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a10",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/38": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a11",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/39": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a12",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/4": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99ef",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/40": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a13",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/41": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/42": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/43": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a16",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/44": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a17",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/45": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a18",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/46": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a19",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/47": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a1a",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/48": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a1b",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/49": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a1c",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Ethernet1/5": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99f0",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/50": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a1d",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Ethernet1/51": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a1e",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Ethernet1/52": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a1f",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Ethernet1/53": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a20",
+ "mtu": "9216",
+ "type": "other"
+ },
+ "Ethernet1/54": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.9a21",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Ethernet1/6": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f1",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Ethernet1/7": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f2",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/8": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f3",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Ethernet1/9": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f4",
+ "mtu": "9216",
+ "type": "1000base-t"
+ },
+ "Vlan1": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan110": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.1.67",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan115": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.1.83",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan128": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.6.133",
+ "prefix_length": "27"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan135": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.135.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan136": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "144.5.136.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan160": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.6.174",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan176": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.6.190",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan192": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.6.198",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan200": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.111.19",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan201": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.73.3",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan202": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.111.42",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan210": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.111.98",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan214": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.111.3",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan215": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.57.131",
+ "prefix_length": "26"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan216": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.57.195",
+ "prefix_length": "26"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan218": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.218.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan219": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.219.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan220": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.59.243",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan3112": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "172.22.32.1",
+ "prefix_length": "21"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "9216",
+ "type": "virtual"
+ },
+ "Vlan3130": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "172.22.8.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan3146": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.197.131",
+ "prefix_length": "25"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan345": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.5.174",
+ "prefix_length": "28"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan350": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "139.65.137.3",
+ "prefix_length": "26"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan63": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.63.3",
+ "prefix_length": "25"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "9216",
+ "type": "virtual"
+ },
+ "Vlan64": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.34.6.126",
+ "prefix_length": "26"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan66": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.66.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan67": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.67.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan68": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.68.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan70": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.70.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan71": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.71.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan72": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.72.3",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "loopback0": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.27.111.247",
+ "prefix_length": "32"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "mgmt0": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99e4",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "port-channel29": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0a",
+ "mtu": "9216",
+ "type": "lag"
+ },
+ "port-channel3": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "0000.0000.0000",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel33": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0c",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel35": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a0e",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel36": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "0000.0000.0000",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel37": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a10",
+ "mtu": "9216",
+ "type": "lag"
+ },
+ "port-channel41": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.1.0.2",
+ "prefix_length": "30"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99eb",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel43": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a16",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel45": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.9a18",
+ "mtu": "9216",
+ "type": "lag"
+ },
+ "port-channel53": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "0000.0000.0000",
+ "mtu": "9216",
+ "type": "lag"
+ },
+ "port-channel6": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f1",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "port-channel7": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "286f.7f7e.99f3",
+ "mtu": "9216",
+ "type": "lag"
+ }
+ }
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_1.json b/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_1.json
new file mode 100644
index 00000000..e637b3a4
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_1.json
@@ -0,0 +1,771 @@
+{
+ "interfaces": {
+ "GigabitEthernet0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5dcf",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.39.67.234",
+ "prefix_length": "30"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d40",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/1": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d41",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/1.100": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.39.67.1",
+ "prefix_length": "25"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d41",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/1.200": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.41.238.129",
+ "prefix_length": "26"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d41",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/1.300": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.39.67.209",
+ "prefix_length": "29"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d41",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/0/2": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.39.67.217",
+ "prefix_length": "30"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d42",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/0": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d50",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/1": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d51",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/2": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d52",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/3": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d53",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/4": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d54",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/5": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d55",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/6": {
+ "802.1Q_mode": "tagged-all",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d56",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet0/2/7": {
+ "802.1Q_mode": "access",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "ac3a.6789.5d57",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Loopback0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": "32"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "",
+ "mtu": "1514",
+ "type": "other"
+ },
+ "Serial0/1/0:0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:1": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:10": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:11": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:12": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:13": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:14": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:15": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:16": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:17": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:18": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:19": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:2": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:20": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:21": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:22": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:23": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:24": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:25": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:26": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:27": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:28": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:29": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:3": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:30": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:4": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:5": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:6": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:7": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:8": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Serial0/1/0:9": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "Service-Engine0/1/0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "cc70.ed3b.0716",
+ "mtu": "9216",
+ "type": "other"
+ },
+ "Service-Engine0/4/0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5d40",
+ "mtu": "9216",
+ "type": "other"
+ },
+ "Tunnel0": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "",
+ "mtu": "9972",
+ "type": "other"
+ },
+ "Vlan1": {
+ "802.1Q_mode": "",
+ "description": "isr description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "ac3a.6789.5dc4",
+ "mtu": "1500",
+ "type": "virtual"
+ }
+ },
+ "serial": "FLM241611GV",
+ "software_version": "16.9.4"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_2.json b/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_2.json
new file mode 100644
index 00000000..5a39abb1
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/cisco_xe/sync_network_data_with_software/expected_result_2.json
@@ -0,0 +1,1656 @@
+{
+ "interfaces": {
+ "FastEthernet0": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccb9",
+ "mtu": "1500",
+ "type": "other"
+ },
+ "GigabitEthernet1/0/1": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf01",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/10": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/11": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/12": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/13": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/14": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/15": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf0f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/16": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf10",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/17": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf11",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/18": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf12",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/19": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf13",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/2": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf02",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/20": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf14",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/21": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf15",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/22": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf16",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/23": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf17",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/24": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf18",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/25": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf19",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/26": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/27": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/28": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/29": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/3": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf03",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/30": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/31": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf1f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/32": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf20",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/33": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf21",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/34": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf22",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/35": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf23",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/36": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf24",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/37": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf25",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/38": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf26",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/39": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf27",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/4": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf04",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/40": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf28",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/41": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf29",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/42": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf2a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/43": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf2b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/44": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf2c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/45": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.cf2d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/46": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf2e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/47": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.cf2f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/48": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf30",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/49": {
+ "802.1Q_mode": "tagged",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "Port-channel1",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf31",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/5": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf05",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/50": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf32",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/6": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf06",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/7": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf07",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/8": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf08",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet1/0/9": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf09",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/1": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc81",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/10": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/11": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/12": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/13": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/14": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/15": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc8f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/16": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc90",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/17": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc91",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/18": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc92",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/19": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc93",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/2": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc82",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/20": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc94",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/21": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc95",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/22": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc96",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/23": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc97",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/24": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc98",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/25": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc99",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/26": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9a",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/27": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9b",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/28": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9c",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/29": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9d",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/3": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc83",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/30": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9e",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/31": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc9f",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/32": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca0",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/33": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca1",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/34": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca2",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/35": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca3",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/36": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca4",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/37": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca5",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/38": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca6",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/39": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca7",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/4": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.cc84",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/40": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca8",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/41": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cca9",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/42": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccaa",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/43": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccab",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/44": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccac",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/45": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccad",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/46": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccae",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/47": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccaf",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/48": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccb0",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/49": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccb1",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/5": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc85",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/50": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccb2",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/6": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc86",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/7": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc87",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/8": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc88",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "GigabitEthernet2/0/9": {
+ "802.1Q_mode": "access",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cc89",
+ "mtu": "1500",
+ "type": "1000base-t"
+ },
+ "Port-channel1": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.ccb3",
+ "mtu": "1500",
+ "type": "lag"
+ },
+ "TenGigabitEthernet1/0/1": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.cf33",
+ "mtu": "1500",
+ "type": "10gbase-t"
+ },
+ "TenGigabitEthernet1/0/2": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.cf34",
+ "mtu": "1500",
+ "type": "10gbase-t"
+ },
+ "TenGigabitEthernet2/0/1": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "Port-channel1",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.ccb3",
+ "mtu": "1500",
+ "type": "10gbase-t"
+ },
+ "TenGigabitEthernet2/0/2": {
+ "802.1Q_mode": "tagged-all",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccb4",
+ "mtu": "1500",
+ "type": "10gbase-t"
+ },
+ "Vlan1": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccc0",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan255": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "10.60.255.59",
+ "prefix_length": "24"
+ }
+ ],
+ "lag": "",
+ "link_status": "False",
+ "mac_address": "d0ec.3507.ccc2",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan41": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "",
+ "prefix_length": ""
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.ccc1",
+ "mtu": "1500",
+ "type": "virtual"
+ },
+ "Vlan955": {
+ "802.1Q_mode": "",
+ "description": "a description",
+ "ip_addresses": [
+ {
+ "ip_address": "198.51.100.1",
+ "prefix_length": "27"
+ }
+ ],
+ "lag": "",
+ "link_status": "True",
+ "mac_address": "d0ec.3507.ccc3",
+ "mtu": "1500",
+ "type": "virtual"
+ }
+ },
+ "serial": "FJC2304W0BB",
+ "software_version": "15.2(4)E9"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_1.json b/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_1.json
new file mode 100755
index 00000000..1823e7fa
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_1.json
@@ -0,0 +1,23 @@
+{
+ "show cm device": [
+ {
+ "mgmt_hostname": "f501mgmt-cluster.acme.net",
+ "mgmt_ip": "198.51.100.1"
+ }
+ ],
+ "show sys hardware": [
+ {
+ "model_type": "BIG-IP VPR-B2250",
+ "serial_number": "chs401567s"
+ }
+ ],
+ "show net interface | grep mgmt | grep up": {
+ "raw": "1/mgmt up 2.6T 2.6T 1.4G 813.0M 0 0 1000T-FD\n2/mgmt up 1.9T 1.8T 1.0G 576.3M 0 0 1000T-FD\n3/mgmt up 1.8T 1.6T 990.3M 527.3M 0 0 1000T-FD\n4/mgmt up 1.6T 114.0G 788.1M 53.8M 0 0 1000T-FD"
+ },
+ "show sys cluster": [
+ {
+ "mgmt_ip": "198.51.100.1",
+ "mgmt_mask": "24"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_2.json b/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_2.json
new file mode 100755
index 00000000..5bb56d4b
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/f5_tmsh/command_getter_result_2.json
@@ -0,0 +1,29 @@
+{
+ "show cm device": [
+ [
+ {
+ "mgmt_hostname": "f501mgmt-dmz.acme.net",
+ "mgmt_ip": "10.248.212.190"
+ },
+ {
+ "mgmt_hostname": "f502mgmt-dmz-external.acme.net",
+ "mgmt_ip": "198.51.100.1"
+ }
+ ]
+ ],
+ "show sys hardware": [
+ {
+ "model_type": "BIG-IP vCMP Guest",
+ "serial_number": "chs401603s"
+ }
+ ],
+ "show net interface | grep mgmt | grep up": {
+ "raw": "1/mgmt up 539.3G 65.9G 264.8M 34.7M 0 0 100TX-FD\n3/mgmt up 495.0G 37.9G 240.4M 18.1M 0 0 100TX-FD"
+ },
+ "show sys cluster": [
+ {
+ "mgmt_ip": "198.51.100.1",
+ "mgmt_mask": "24"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_1.json b/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_1.json
new file mode 100755
index 00000000..db9604b7
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_1.json
@@ -0,0 +1,7 @@
+{
+ "device_type": "BIG-IP VPR-B2250",
+ "hostname": "f501mgmt-cluster.acme.net",
+ "mask_length": 24,
+ "mgmt_interface": "1/mgmt",
+ "serial": "chs401567s"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_2.json b/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_2.json
new file mode 100755
index 00000000..b9497a59
--- /dev/null
+++ b/nautobot_device_onboarding/tests/mock/f5_tmsh/sync_devices/expected_result_2.json
@@ -0,0 +1,7 @@
+{
+ "device_type": "BIG-IP vCMP Guest",
+ "hostname": "f502mgmt-dmz-external.acme.net",
+ "mask_length": 24,
+ "mgmt_interface": "1/mgmt",
+ "serial": "chs401603s"
+}
\ No newline at end of file
diff --git a/nautobot_device_onboarding/tests/test_command_getter.py b/nautobot_device_onboarding/tests/test_command_getter.py
index 49ad4f99..2ff05bed 100755
--- a/nautobot_device_onboarding/tests/test_command_getter.py
+++ b/nautobot_device_onboarding/tests/test_command_getter.py
@@ -29,6 +29,7 @@ def test_deduplicate_command_list_sync_devices(self):
sync_vlans=False,
sync_vrfs=False,
sync_cables=False,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show version", "jpath": "[*].hostname", "parser": "textfsm"},
@@ -48,6 +49,7 @@ def test_deduplicate_command_list_sync_data_no_vrfs_no_vlans(self):
sync_vlans=False,
sync_vrfs=False,
sync_cables=False,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show version", "parser": "textfsm", "jpath": "[*].serial[]"},
@@ -81,6 +83,7 @@ def test_deduplicate_command_list_sync_data_with_vrfs_no_vlans(self):
sync_vlans=False,
sync_vrfs=True,
sync_cables=False,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show version", "parser": "textfsm", "jpath": "[*].serial[]"},
@@ -121,6 +124,7 @@ def test_deduplicate_command_list_sync_data_no_vrfs_with_vlans(self):
sync_vlans=True,
sync_vrfs=False,
sync_cables=False,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show vlan", "parser": "textfsm", "jpath": "[*].{id: vlan_id, name: vlan_name}"},
@@ -155,6 +159,7 @@ def test_deduplicate_command_list_sync_data_with_vrfs_and_vlans(self):
sync_vlans=True,
sync_vrfs=True,
sync_cables=False,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show vlan", "parser": "textfsm", "jpath": "[*].{id: vlan_id, name: vlan_name}"},
@@ -191,7 +196,11 @@ def test_deduplicate_command_list_sync_data_with_vrfs_and_vlans(self):
def test_deduplicate_command_list_sync_data_cables(self):
get_commands_to_run = _get_commands_to_run(
- self.expected_data["sync_network_data"], sync_vlans=False, sync_vrfs=False, sync_cables=True
+ self.expected_data["sync_network_data"],
+ sync_vlans=False,
+ sync_vrfs=False,
+ sync_cables=True,
+ sync_software_version=False,
)
expected_commands_to_run = [
{"command": "show version", "parser": "textfsm", "jpath": "[*].serial[]"},
diff --git a/nautobot_device_onboarding/tests/test_formatter.py b/nautobot_device_onboarding/tests/test_formatter.py
index 7f2faaab..a460f293 100755
--- a/nautobot_device_onboarding/tests/test_formatter.py
+++ b/nautobot_device_onboarding/tests/test_formatter.py
@@ -16,7 +16,7 @@
from nautobot_device_onboarding.nornir_plays.transform import add_platform_parsing_info
MOCK_DIR = os.path.join("nautobot_device_onboarding", "tests", "mock")
-SYNC_DEVICES_ONLY = ["cisco_wlc", "hp_comware", "paloalto_panos", "aruba_aoscx"]
+SYNC_DEVICES_ONLY = ["cisco_wlc", "hp_comware", "paloalto_panos", "f5_tmsh", "aruba_aoscx"]
def find_files_by_prefix(directory, prefix):
@@ -437,6 +437,7 @@ def test_add_platform_parsing_info_sane_defaults(self):
"cisco_nxos",
"hp_comware",
"paloalto_panos",
+ "f5_tmsh",
"aruba_aoscx",
]
self.assertEqual(sorted(default_mappers), list(sorted(self.platform_parsing_info.keys())))
diff --git a/nautobot_device_onboarding/tests/test_jobs.py b/nautobot_device_onboarding/tests/test_jobs.py
index b2fd19cb..35909917 100644
--- a/nautobot_device_onboarding/tests/test_jobs.py
+++ b/nautobot_device_onboarding/tests/test_jobs.py
@@ -202,6 +202,7 @@ def test_sync_network_data__success(self, device_data):
"sync_vlans": True,
"sync_vrfs": True,
"sync_cables": True,
+ "sync_software_version": True,
"namespace": self.testing_objects["namespace"].pk,
"interface_status": self.testing_objects["status"].pk,
"ip_address_status": self.testing_objects["status"].pk,
diff --git a/nautobot_device_onboarding/tests/test_sync_network_data_adapters.py b/nautobot_device_onboarding/tests/test_sync_network_data_adapters.py
index 4b6db870..415ea0c0 100644
--- a/nautobot_device_onboarding/tests/test_sync_network_data_adapters.py
+++ b/nautobot_device_onboarding/tests/test_sync_network_data_adapters.py
@@ -4,7 +4,7 @@
from django.contrib.contenttypes.models import ContentType
from nautobot.core.testing import TransactionTestCase
-from nautobot.dcim.models import Cable, Device, Interface
+from nautobot.dcim.models import Cable, Device, Interface, SoftwareVersion
from nautobot.extras.models import JobResult
from nautobot.ipam.models import VLAN, VRF, IPAddress
@@ -41,6 +41,7 @@ def setUp(self): # pylint: disable=invalid-name
self.job.namespace = self.testing_objects["namespace"]
self.job.sync_vlans = True
self.job.sync_vrfs = True
+ self.job.sync_software_version = True
self.job.debug = True
self.job.devices_to_load = None
@@ -227,6 +228,25 @@ def test_load_cables(self):
self.assertEqual(termination_b_device, diffsync_obj.termination_b__device__name)
self.assertEqual(termination_b_interface, diffsync_obj.termination_b__name)
+ def test_load_software_versions(self):
+ """Test loading software version data returned from command getter into the diffsync store."""
+ self.sync_network_data_adapter.load_software_versions()
+ for _, device_data in self.job.command_getter_result.items():
+ device_data = self.job.command_getter_result["demo-cisco-1"]
+ device = Device.objects.get(serial=device_data["serial"])
+ unique_id = f"{device_data['software_version']}__{device.platform}"
+ diffsync_obj = self.sync_network_data_adapter.get("software_version", unique_id)
+ self.assertEqual("cisco_ios", diffsync_obj.platform__name)
+ self.assertEqual(device_data["software_version"], diffsync_obj.version)
+
+ def test_load_software_version_to_device(self):
+ self.sync_network_data_adapter.load_software_version_to_device()
+ for _, device_data in self.job.command_getter_result.items():
+ device = Device.objects.get(serial=device_data["serial"])
+ unique_id = f"{device.name}__{device.serial}"
+ diffsync_obj = self.sync_network_data_adapter.get("software_version_to_device", unique_id)
+ self.assertEqual(device_data["software_version"], diffsync_obj.software_version__version)
+
class SyncNetworkDataNautobotAdapterTestCase(TransactionTestCase):
"""Test SyncNetworkDataNautobotAdapter class."""
@@ -387,6 +407,23 @@ def test_load_vrf_to_interface(self):
self.assertEqual(interface.name, diffsync_obj.name)
self.assertEqual(vrf, diffsync_obj.vrf)
+ def test_load_software_versions(self):
+ """Test loading Nautobot software version data into the diffsync store."""
+ self.sync_network_data_adapter.load_software_versions()
+ for software_version in SoftwareVersion.objects.all():
+ unique_id = f"{software_version.version}__{software_version.platform.name}"
+ diffsync_obj = self.sync_network_data_adapter.get("software_version", unique_id)
+ self.assertEqual(software_version.platform.name, diffsync_obj.platform__name)
+ self.assertEqual(software_version.version, diffsync_obj.version)
+
+ def test_load_software_version_to_device(self):
+ """Test loading Nautobot software version device assignments into the Diffsync store."""
+ self.sync_network_data_adapter.load_software_version_to_device()
+ for device in Device.objects.filter(name__in=["demo-cisco-1", "demo-cisco-2"]):
+ unique_id = f"{device.name}__{device.serial}"
+ diffsync_obj = self.sync_network_data_adapter.get("software_version_to_device", unique_id)
+ self.assertEqual(device.software_version.version, diffsync_obj.software_version__version)
+
def test_sync_complete(self):
"""Test primary ip re-assignment if deleted during the sync."""
self.sync_network_data_adapter._cache_primary_ips( # pylint: disable=protected-access
diff --git a/nautobot_device_onboarding/tests/test_transform.py b/nautobot_device_onboarding/tests/test_transform.py
index f6b5c502..5b22fb33 100755
--- a/nautobot_device_onboarding/tests/test_transform.py
+++ b/nautobot_device_onboarding/tests/test_transform.py
@@ -34,6 +34,7 @@ def test_add_platform_parsing_info_sane_defaults(self):
"cisco_nxos",
"hp_comware",
"paloalto_panos",
+ "f5_tmsh",
"aruba_aoscx",
]
self.assertEqual(sorted(default_mappers), list(sorted(command_mappers.keys())))
diff --git a/nautobot_device_onboarding/tests/utils.py b/nautobot_device_onboarding/tests/utils.py
index ad94acfa..0930fcbf 100644
--- a/nautobot_device_onboarding/tests/utils.py
+++ b/nautobot_device_onboarding/tests/utils.py
@@ -3,7 +3,17 @@
from django.contrib.contenttypes.models import ContentType
from nautobot.circuits.models import Circuit, CircuitTermination, CircuitType, Provider
from nautobot.dcim.choices import InterfaceModeChoices, InterfaceTypeChoices
-from nautobot.dcim.models import Cable, Device, DeviceType, Interface, Location, LocationType, Manufacturer, Platform
+from nautobot.dcim.models import (
+ Cable,
+ Device,
+ DeviceType,
+ Interface,
+ Location,
+ LocationType,
+ Manufacturer,
+ Platform,
+ SoftwareVersion,
+)
from nautobot.extras.choices import SecretsGroupAccessTypeChoices, SecretsGroupSecretTypeChoices
from nautobot.extras.models import Role, Secret, SecretsGroup, SecretsGroupAssociation, Status
from nautobot.ipam.choices import IPAddressTypeChoices, PrefixTypeChoices
@@ -23,6 +33,7 @@ def sync_network_data_ensure_required_nautobot_objects():
status.content_types.add(ContentType.objects.get_for_model(VLAN))
status.content_types.add(ContentType.objects.get_for_model(VRF))
status.content_types.add(ContentType.objects.get_for_model(Cable))
+ status.content_types.add(ContentType.objects.get_for_model(SoftwareVersion))
status.content_types.add(ContentType.objects.get_for_model(Circuit))
status.validated_save()
@@ -86,6 +97,8 @@ def sync_network_data_ensure_required_nautobot_objects():
vlan_2, _ = VLAN.objects.get_or_create(vid=50, name="vlan50", location=location, status=status)
vrf_1, _ = VRF.objects.get_or_create(name="mgmt", namespace=namespace)
vrf_2, _ = VRF.objects.get_or_create(name="vrf2", namespace=namespace)
+ software_version_1, _ = SoftwareVersion.objects.get_or_create(version="16.12.4", platform=platform_1, status=status)
+ software_version_2, _ = SoftwareVersion.objects.get_or_create(version="3.12R.4", platform=platform_2, status=status)
device_type, _ = DeviceType.objects.get_or_create(model="CSR1000V17", manufacturer=manufacturer)
device_1, _ = Device.objects.get_or_create(
@@ -97,6 +110,7 @@ def sync_network_data_ensure_required_nautobot_objects():
role=device_role,
platform=platform_1,
secrets_group=secrets_group,
+ software_version=software_version_1,
)
device_2, _ = Device.objects.get_or_create(
name="demo-cisco-2",
@@ -107,6 +121,7 @@ def sync_network_data_ensure_required_nautobot_objects():
role=device_role,
platform=platform_2,
secrets_group=secrets_group,
+ software_version=software_version_2,
)
device_3, _ = Device.objects.get_or_create(
name="demo-cisco-3",
@@ -117,6 +132,7 @@ def sync_network_data_ensure_required_nautobot_objects():
role=device_role,
platform=platform_2,
secrets_group=secrets_group,
+ software_version=software_version_2,
)
interface_1, _ = Interface.objects.get_or_create(
device=device_1, name="GigabitEthernet1", status=status, type=InterfaceTypeChoices.TYPE_VIRTUAL
@@ -188,6 +204,8 @@ def sync_network_data_ensure_required_nautobot_objects():
testing_objects["vlan_2"] = vlan_2
testing_objects["vrf_1"] = vrf_1
testing_objects["vrf_2"] = vrf_2
+ testing_objects["software_version_1"] = software_version_1
+ testing_objects["software_version_2"] = software_version_2
testing_objects["cable_to_circuit"] = cable_to_circuit_1
return testing_objects
diff --git a/poetry.lock b/poetry.lock
index 32d496b3..2fcd9daa 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -375,13 +375,13 @@ zstd = ["zstandard (==0.22.0)"]
[[package]]
name = "certifi"
-version = "2025.1.31"
+version = "2025.4.26"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"},
- {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
+ {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"},
+ {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"},
]
[[package]]
@@ -465,103 +465,103 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "3.4.1"
+version = "3.4.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
files = [
- {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"},
- {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"},
- {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"},
+ {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"},
+ {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"},
+ {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"},
+ {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"},
+ {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"},
+ {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"},
+ {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"},
+ {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"},
+ {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"},
]
[[package]]
@@ -875,13 +875,13 @@ redis = ["redis (>=4.3,<5.0)"]
[[package]]
name = "dill"
-version = "0.3.9"
+version = "0.4.0"
description = "serialize all of Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"},
- {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"},
+ {file = "dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"},
+ {file = "dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0"},
]
[package.extras]
@@ -890,13 +890,13 @@ profile = ["gprof2dot (>=2022.7.29)"]
[[package]]
name = "django"
-version = "4.2.20"
+version = "4.2.21"
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
optional = false
python-versions = ">=3.8"
files = [
- {file = "Django-4.2.20-py3-none-any.whl", hash = "sha256:213381b6e4405f5c8703fffc29cd719efdf189dec60c67c04f76272b3dc845b9"},
- {file = "Django-4.2.20.tar.gz", hash = "sha256:92bac5b4432a64532abb73b2ac27203f485e40225d2640a7fbef2b62b876e789"},
+ {file = "django-4.2.21-py3-none-any.whl", hash = "sha256:1d658c7bf5d31c7d0cac1cab58bc1f822df89255080fec81909256c30e6180b3"},
+ {file = "django-4.2.21.tar.gz", hash = "sha256:b54ac28d6aa964fc7c2f7335138a54d78980232011e0cd2231d04eed393dcb0d"},
]
[package.dependencies]
@@ -1332,13 +1332,13 @@ sidecar = ["drf-spectacular-sidecar"]
[[package]]
name = "drf-spectacular-sidecar"
-version = "2025.4.1"
+version = "2025.5.1"
description = "Serve self-contained distribution builds of Swagger UI and Redoc with Django"
optional = false
python-versions = ">=3.6"
files = [
- {file = "drf_spectacular_sidecar-2025.4.1-py3-none-any.whl", hash = "sha256:343a24b0d03125fa76d07685072f55779c5c4124d90c10b14e315fdc143ad9b9"},
- {file = "drf_spectacular_sidecar-2025.4.1.tar.gz", hash = "sha256:ea7dc4e674174616589d258b5c9676f3c451ec422e62b79e31234d39db53922d"},
+ {file = "drf_spectacular_sidecar-2025.5.1-py3-none-any.whl", hash = "sha256:13fe509317fee684babda85022c052c491af153d8ebd4bdd6e8de2b19b6ab0e5"},
+ {file = "drf_spectacular_sidecar-2025.5.1.tar.gz", hash = "sha256:1ecc56263e84ab3d9d8ba2873b2bae812ebd4c1ec9b13672570ce8f202dc7bfb"},
]
[package.dependencies]
@@ -1363,15 +1363,18 @@ dev = ["coverage", "pytest (>=7.4.4)"]
[[package]]
name = "exceptiongroup"
-version = "1.2.2"
+version = "1.3.0"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
files = [
- {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
- {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
+ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"},
+ {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"},
]
+[package.dependencies]
+typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""}
+
[package.extras]
test = ["pytest (>=6)"]
@@ -1475,13 +1478,13 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit",
[[package]]
name = "gprof2dot"
-version = "2024.6.6"
+version = "2025.4.14"
description = "Generate a dot graph from the output of several profilers."
optional = false
python-versions = ">=3.8"
files = [
- {file = "gprof2dot-2024.6.6-py2.py3-none-any.whl", hash = "sha256:45b14ad7ce64e299c8f526881007b9eb2c6b75505d5613e96e66ee4d5ab33696"},
- {file = "gprof2dot-2024.6.6.tar.gz", hash = "sha256:fa1420c60025a9eb7734f65225b4da02a10fc6dd741b37fa129bc6b41951e5ab"},
+ {file = "gprof2dot-2025.4.14-py3-none-any.whl", hash = "sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e"},
+ {file = "gprof2dot-2025.4.14.tar.gz", hash = "sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce"},
]
[[package]]
@@ -1593,29 +1596,29 @@ colorama = ">=0.4"
[[package]]
name = "h11"
-version = "0.14.0"
+version = "0.16.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
- {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
+ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"},
+ {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"},
]
[[package]]
name = "httpcore"
-version = "1.0.7"
+version = "1.0.9"
description = "A minimal low-level HTTP client."
optional = false
python-versions = ">=3.8"
files = [
- {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"},
- {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"},
+ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"},
+ {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"},
]
[package.dependencies]
certifi = "*"
-h11 = ">=0.13,<0.15"
+h11 = ">=0.16"
[package.extras]
asyncio = ["anyio (>=4.0,<5.0)"]
@@ -1797,13 +1800,13 @@ colors = ["colorama (>=0.4.6)"]
[[package]]
name = "jdiff"
-version = "0.0.6"
+version = "0.0.7"
description = "A light-weight library to compare structured output from network devices show commands."
optional = false
-python-versions = ">=3.8,<4.0"
+python-versions = "<4.0,>=3.8"
files = [
- {file = "jdiff-0.0.6-py3-none-any.whl", hash = "sha256:346798820be11ae2485ce2a29eb9a9cc0ddaa23388319566d367be18730cbaa8"},
- {file = "jdiff-0.0.6.tar.gz", hash = "sha256:b42d26947d24fe7c297c8e3d38709b6e78823a41dcf50417d6be916d7d49be45"},
+ {file = "jdiff-0.0.7-py3-none-any.whl", hash = "sha256:a631efea5022905a621fc83c4142eb1bf3adba5f3f44fcc658534d8800c75944"},
+ {file = "jdiff-0.0.7.tar.gz", hash = "sha256:a170ce07812eea84fba8d891d1ec4ca5d8011ffeab3b842f19bf12f2372cd1d4"},
]
[package.dependencies]
@@ -2001,149 +2004,143 @@ files = [
[[package]]
name = "lxml"
-version = "5.3.2"
+version = "5.4.0"
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
optional = false
python-versions = ">=3.6"
files = [
- {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c4b84d6b580a9625dfa47269bf1fd7fbba7ad69e08b16366a46acb005959c395"},
- {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4c08ecb26e4270a62f81f81899dfff91623d349e433b126931c9c4577169666"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef926e9f11e307b5a7c97b17c5c609a93fb59ffa8337afac8f89e6fe54eb0b37"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017ceeabe739100379fe6ed38b033cd244ce2da4e7f6f07903421f57da3a19a2"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dae97d9435dc90590f119d056d233c33006b2fd235dd990d5564992261ee7ae8"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910f39425c6798ce63c93976ae5af5fff6949e2cb446acbd44d6d892103eaea8"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9780de781a0d62a7c3680d07963db3048b919fc9e3726d9cfd97296a65ffce1"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1a06b0c6ba2e3ca45a009a78a4eb4d6b63831830c0a83dcdc495c13b9ca97d3e"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:4c62d0a34d1110769a1bbaf77871a4b711a6f59c4846064ccb78bc9735978644"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:8f961a4e82f411b14538fe5efc3e6b953e17f5e809c463f0756a0d0e8039b700"},
- {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3dfc78f5f9251b6b8ad37c47d4d0bfe63ceb073a916e5b50a3bf5fd67a703335"},
- {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10e690bc03214d3537270c88e492b8612d5e41b884f232df2b069b25b09e6711"},
- {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa837e6ee9534de8d63bc4c1249e83882a7ac22bd24523f83fad68e6ffdf41ae"},
- {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:da4c9223319400b97a2acdfb10926b807e51b69eb7eb80aad4942c0516934858"},
- {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dc0e9bdb3aa4d1de703a437576007d366b54f52c9897cae1a3716bb44fc1fc85"},
- {file = "lxml-5.3.2-cp310-cp310-win32.whl", hash = "sha256:5f94909a1022c8ea12711db7e08752ca7cf83e5b57a87b59e8a583c5f35016ad"},
- {file = "lxml-5.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:d64ea1686474074b38da13ae218d9fde0d1dc6525266976808f41ac98d9d7980"},
- {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9d61a7d0d208ace43986a92b111e035881c4ed45b1f5b7a270070acae8b0bfb4"},
- {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856dfd7eda0b75c29ac80a31a6411ca12209183e866c33faf46e77ace3ce8a79"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a01679e4aad0727bedd4c9407d4d65978e920f0200107ceeffd4b019bd48529"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6b37b4c3acb8472d191816d4582379f64d81cecbdce1a668601745c963ca5cc"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3df5a54e7b7c31755383f126d3a84e12a4e0333db4679462ef1165d702517477"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c09a40f28dcded933dc16217d6a092be0cc49ae25811d3b8e937c8060647c353"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1ef20f1851ccfbe6c5a04c67ec1ce49da16ba993fdbabdce87a92926e505412"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f79a63289dbaba964eb29ed3c103b7911f2dce28c36fe87c36a114e6bd21d7ad"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:75a72697d95f27ae00e75086aed629f117e816387b74a2f2da6ef382b460b710"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:b9b00c9ee1cc3a76f1f16e94a23c344e0b6e5c10bec7f94cf2d820ce303b8c01"},
- {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:77cbcab50cbe8c857c6ba5f37f9a3976499c60eada1bf6d38f88311373d7b4bc"},
- {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:29424058f072a24622a0a15357bca63d796954758248a72da6d512f9bd9a4493"},
- {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7d82737a8afe69a7c80ef31d7626075cc7d6e2267f16bf68af2c764b45ed68ab"},
- {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:95473d1d50a5d9fcdb9321fdc0ca6e1edc164dce4c7da13616247d27f3d21e31"},
- {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2162068f6da83613f8b2a32ca105e37a564afd0d7009b0b25834d47693ce3538"},
- {file = "lxml-5.3.2-cp311-cp311-win32.whl", hash = "sha256:f8695752cf5d639b4e981afe6c99e060621362c416058effd5c704bede9cb5d1"},
- {file = "lxml-5.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:d1a94cbb4ee64af3ab386c2d63d6d9e9cf2e256ac0fd30f33ef0a3c88f575174"},
- {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:16b3897691ec0316a1aa3c6585f61c8b7978475587c5b16fc1d2c28d283dc1b0"},
- {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8d4b34a0eeaf6e73169dcfd653c8d47f25f09d806c010daf074fba2db5e2d3f"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cd7a959396da425022e1e4214895b5cfe7de7035a043bcc2d11303792b67554"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cac5eaeec3549c5df7f8f97a5a6db6963b91639389cdd735d5a806370847732b"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29b5f7d77334877c2146e7bb8b94e4df980325fab0a8af4d524e5d43cd6f789d"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13f3495cfec24e3d63fffd342cc8141355d1d26ee766ad388775f5c8c5ec3932"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e70ad4c9658beeff99856926fd3ee5fde8b519b92c693f856007177c36eb2e30"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:507085365783abd7879fa0a6fa55eddf4bdd06591b17a2418403bb3aff8a267d"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:5bb304f67cbf5dfa07edad904732782cbf693286b9cd85af27059c5779131050"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:3d84f5c093645c21c29a4e972b84cb7cf682f707f8706484a5a0c7ff13d7a988"},
- {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:bdc13911db524bd63f37b0103af014b7161427ada41f1b0b3c9b5b5a9c1ca927"},
- {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ec944539543f66ebc060ae180d47e86aca0188bda9cbfadff47d86b0dc057dc"},
- {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:59d437cc8a7f838282df5a199cf26f97ef08f1c0fbec6e84bd6f5cc2b7913f6e"},
- {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e275961adbd32e15672e14e0cc976a982075208224ce06d149c92cb43db5b93"},
- {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:038aeb6937aa404480c2966b7f26f1440a14005cb0702078c173c028eca72c31"},
- {file = "lxml-5.3.2-cp312-cp312-win32.whl", hash = "sha256:3c2c8d0fa3277147bff180e3590be67597e17d365ce94beb2efa3138a2131f71"},
- {file = "lxml-5.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:77809fcd97dfda3f399102db1794f7280737b69830cd5c961ac87b3c5c05662d"},
- {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77626571fb5270ceb36134765f25b665b896243529eefe840974269b083e090d"},
- {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78a533375dc7aa16d0da44af3cf6e96035e484c8c6b2b2445541a5d4d3d289ee"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6f62b2404b3f3f0744bbcabb0381c5fe186fa2a9a67ecca3603480f4846c585"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea918da00091194526d40c30c4996971f09dacab032607581f8d8872db34fbf"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c35326f94702a7264aa0eea826a79547d3396a41ae87a70511b9f6e9667ad31c"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3bef90af21d31c4544bc917f51e04f94ae11b43156356aff243cdd84802cbf2"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52fa7ba11a495b7cbce51573c73f638f1dcff7b3ee23697467dc063f75352a69"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ad131e2c4d2c3803e736bb69063382334e03648de2a6b8f56a878d700d4b557d"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:00a4463ca409ceacd20490a893a7e08deec7870840eff33dc3093067b559ce3e"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:87e8d78205331cace2b73ac8249294c24ae3cba98220687b5b8ec5971a2267f1"},
- {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bf6389133bb255e530a4f2f553f41c4dd795b1fbb6f797aea1eff308f1e11606"},
- {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b3709fc752b42fb6b6ffa2ba0a5b9871646d97d011d8f08f4d5b3ee61c7f3b2b"},
- {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:abc795703d0de5d83943a4badd770fbe3d1ca16ee4ff3783d7caffc252f309ae"},
- {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:98050830bb6510159f65d9ad1b8aca27f07c01bb3884ba95f17319ccedc4bcf9"},
- {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ba465a91acc419c5682f8b06bcc84a424a7aa5c91c220241c6fd31de2a72bc6"},
- {file = "lxml-5.3.2-cp313-cp313-win32.whl", hash = "sha256:56a1d56d60ea1ec940f949d7a309e0bff05243f9bd337f585721605670abb1c1"},
- {file = "lxml-5.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:1a580dc232c33d2ad87d02c8a3069d47abbcdce974b9c9cc82a79ff603065dbe"},
- {file = "lxml-5.3.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1a59f7fe888d0ec1916d0ad69364c5400cfa2f885ae0576d909f342e94d26bc9"},
- {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d67b50abc2df68502a26ed2ccea60c1a7054c289fb7fc31c12e5e55e4eec66bd"},
- {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cb08d2cb047c98d6fbbb2e77d6edd132ad6e3fa5aa826ffa9ea0c9b1bc74a84"},
- {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:495ddb7e10911fb4d673d8aa8edd98d1eadafb3b56e8c1b5f427fd33cadc455b"},
- {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:884d9308ac7d581b705a3371185282e1b8eebefd68ccf288e00a2d47f077cc51"},
- {file = "lxml-5.3.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:37f3d7cf7f2dd2520df6cc8a13df4c3e3f913c8e0a1f9a875e44f9e5f98d7fee"},
- {file = "lxml-5.3.2-cp36-cp36m-win32.whl", hash = "sha256:e885a1bf98a76dff0a0648850c3083b99d9358ef91ba8fa307c681e8e0732503"},
- {file = "lxml-5.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b45f505d0d85f4cdd440cd7500689b8e95110371eaa09da0c0b1103e9a05030f"},
- {file = "lxml-5.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b53cd668facd60b4f0dfcf092e01bbfefd88271b5b4e7b08eca3184dd006cb30"},
- {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5dea998c891f082fe204dec6565dbc2f9304478f2fc97bd4d7a940fec16c873"},
- {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46bc3e58b01e4f38d75e0d7f745a46875b7a282df145aca9d1479c65ff11561"},
- {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661feadde89159fd5f7d7639a81ccae36eec46974c4a4d5ccce533e2488949c8"},
- {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:43af2a69af2cacc2039024da08a90174e85f3af53483e6b2e3485ced1bf37151"},
- {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:1539f962d82436f3d386eb9f29b2a29bb42b80199c74a695dff51b367a61ec0a"},
- {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:6673920bf976421b5fac4f29b937702eef4555ee42329546a5fc68bae6178a48"},
- {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9fa722a9cd8845594593cce399a49aa6bfc13b6c83a7ee05e2ab346d9253d52f"},
- {file = "lxml-5.3.2-cp37-cp37m-win32.whl", hash = "sha256:2eadd4efa487f4710755415aed3d6ae9ac8b4327ea45226ffccb239766c8c610"},
- {file = "lxml-5.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:83d8707b1b08cd02c04d3056230ec3b771b18c566ec35e723e60cdf037064e08"},
- {file = "lxml-5.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc6e8678bfa5ccba370103976ccfcf776c85c83da9220ead41ea6fd15d2277b4"},
- {file = "lxml-5.3.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bed509662f67f719119ad56006cd4a38efa68cfa74383060612044915e5f7ad"},
- {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e3925975fadd6fd72a6d80541a6ec75dfbad54044a03aa37282dafcb80fbdfa"},
- {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83c0462dedc5213ac586164c6d7227da9d4d578cf45dd7fbab2ac49b63a008eb"},
- {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:53e3f9ca72858834688afa17278649d62aa768a4b2018344be00c399c4d29e95"},
- {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:32ba634ef3f1b20f781019a91d78599224dc45745dd572f951adbf1c0c9b0d75"},
- {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1b16504c53f41da5fcf04868a80ac40a39d3eec5329caf761114caec6e844ad1"},
- {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:1f9682786138549da44ca4c49b20e7144d063b75f2b2ba611f4cff9b83db1062"},
- {file = "lxml-5.3.2-cp38-cp38-win32.whl", hash = "sha256:d8f74ef8aacdf6ee5c07566a597634bb8535f6b53dc89790db43412498cf6026"},
- {file = "lxml-5.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:49f1cee0fa27e1ee02589c696a9bdf4027e7427f184fa98e6bef0c6613f6f0fa"},
- {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:741c126bcf9aa939e950e64e5e0a89c8e01eda7a5f5ffdfc67073f2ed849caea"},
- {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab6e9e6aca1fd7d725ffa132286e70dee5b9a4561c5ed291e836440b82888f89"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e8c9b9ed3c15c2d96943c14efc324b69be6352fe5585733a7db2bf94d97841"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7811828ddfb8c23f4f1fbf35e7a7b2edec2f2e4c793dee7c52014f28c4b35238"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72968623efb1e12e950cbdcd1d0f28eb14c8535bf4be153f1bfffa818b1cf189"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebfceaa2ea588b54efb6160e3520983663d45aed8a3895bb2031ada080fb5f04"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d685d458505b2bfd2e28c812749fe9194a2b0ce285a83537e4309a187ffa270b"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:334e0e414dab1f5366ead8ca34ec3148415f236d5660e175f1d640b11d645847"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02e56f7de72fa82561eae69628a7d6febd7891d72248c7ff7d3e7814d4031017"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:638d06b4e1d34d1a074fa87deed5fb55c18485fa0dab97abc5604aad84c12031"},
- {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:354dab7206d22d7a796fa27c4c5bffddd2393da2ad61835355a4759d435beb47"},
- {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9d9f82ff2c3bf9bb777cb355149f7f3a98ec58f16b7428369dc27ea89556a4c"},
- {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:95ad58340e3b7d2b828efc370d1791856613c5cb62ae267158d96e47b3c978c9"},
- {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30fe05f4b7f6e9eb32862745512e7cbd021070ad0f289a7f48d14a0d3fc1d8a9"},
- {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34c688fef86f73dbca0798e0a61bada114677006afa524a8ce97d9e5fabf42e6"},
- {file = "lxml-5.3.2-cp39-cp39-win32.whl", hash = "sha256:4d6d3d1436d57f41984920667ec5ef04bcb158f80df89ac4d0d3f775a2ac0c87"},
- {file = "lxml-5.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:2996e1116bbb3ae2a1fbb2ba4da8f92742290b4011e7e5bce2bd33bbc9d9485a"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:521ab9c80b98c30b2d987001c3ede2e647e92eeb2ca02e8cb66ef5122d792b24"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1231b0f9810289d41df1eacc4ebb859c63e4ceee29908a0217403cddce38d0"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271f1a4d5d2b383c36ad8b9b489da5ea9c04eca795a215bae61ed6a57cf083cd"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:6fca8a5a13906ba2677a5252752832beb0f483a22f6c86c71a2bb320fba04f61"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ea0c3b7922209160faef194a5b6995bfe7fa05ff7dda6c423ba17646b7b9de10"},
- {file = "lxml-5.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0a006390834603e5952a2ff74b9a31a6007c7cc74282a087aa6467afb4eea987"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eae4136a3b8c4cf76f69461fc8f9410d55d34ea48e1185338848a888d71b9675"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d48e06be8d8c58e7feaedd8a37897a6122637efb1637d7ce00ddf5f11f9a92ad"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4b83aed409134093d90e114007034d2c1ebcd92e501b71fd9ec70e612c8b2eb"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7a0e77edfe26d3703f954d46bed52c3ec55f58586f18f4b7f581fc56954f1d84"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:19f6fcfd15b82036b4d235749d78785eb9c991c7812012dc084e0d8853b4c1c0"},
- {file = "lxml-5.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d49919c95d31ee06eefd43d8c6f69a3cc9bdf0a9b979cc234c4071f0eb5cb173"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2d0a60841410123c533990f392819804a8448853f06daf412c0f383443925e89"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7f729e03090eb4e3981f10efaee35e6004b548636b1a062b8b9a525e752abc"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:579df6e20d8acce3bcbc9fb8389e6ae00c19562e929753f534ba4c29cfe0be4b"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2abcf3f3b8367d6400b908d00d4cd279fc0b8efa287e9043820525762d383699"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:348c06cb2e3176ce98bee8c397ecc89181681afd13d85870df46167f140a305f"},
- {file = "lxml-5.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:617ecaccd565cbf1ac82ffcaa410e7da5bd3a4b892bb3543fb2fe19bd1c4467d"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c3eb4278dcdb9d86265ed2c20b9ecac45f2d6072e3904542e591e382c87a9c00"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258b6b53458c5cbd2a88795557ff7e0db99f73a96601b70bc039114cd4ee9e02"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a9d8d25ed2f2183e8471c97d512a31153e123ac5807f61396158ef2793cb6e"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73bcb635a848c18a3e422ea0ab0092f2e4ef3b02d8ebe87ab49748ebc8ec03d8"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1545de0a69a16ced5767bae8cca1801b842e6e49e96f5e4a8a5acbef023d970b"},
- {file = "lxml-5.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:165fcdc2f40fc0fe88a3c3c06c9c2a097388a90bda6a16e6f7c9199c903c9b8e"},
- {file = "lxml-5.3.2.tar.gz", hash = "sha256:773947d0ed809ddad824b7b14467e1a481b8976e87278ac4a730c2f7c7fcddc1"},
+ {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"},
+ {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"},
+ {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"},
+ {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"},
+ {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"},
+ {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"},
+ {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"},
+ {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"},
+ {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"},
+ {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"},
+ {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"},
+ {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"},
+ {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"},
+ {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"},
+ {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"},
+ {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"},
+ {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"},
+ {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"},
+ {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"},
+ {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"},
+ {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"},
+ {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"},
+ {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"},
+ {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"},
+ {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"},
+ {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"},
+ {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"},
+ {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"},
+ {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"},
+ {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"},
+ {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"},
+ {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"},
+ {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"},
+ {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"},
+ {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"},
+ {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"},
+ {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"},
+ {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"},
+ {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"},
+ {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"},
+ {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"},
+ {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"},
+ {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"},
+ {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"},
+ {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"},
+ {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"},
+ {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f7f991a68d20c75cb13c5c9142b2a3f9eb161f1f12a9489c82172d1f133c0"},
+ {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"},
+ {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:ac7ba71f9561cd7d7b55e1ea5511543c0282e2b6450f122672a2694621d63b7e"},
+ {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"},
+ {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:ce31158630a6ac85bddd6b830cffd46085ff90498b397bd0a259f59d27a12188"},
+ {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"},
+ {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"},
+ {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"},
+ {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"},
+ {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"},
+ {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"},
+ {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"},
+ {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"},
+ {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"},
+ {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"},
+ {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"},
+ {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"},
+ {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"},
+ {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"},
+ {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"},
+ {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"},
+ {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"},
+ {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"},
+ {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"},
+ {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"},
+ {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"},
+ {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"},
+ {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"},
+ {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"},
+ {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"},
+ {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"},
+ {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"},
+ {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"},
+ {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"},
]
[package.extras]
@@ -2439,13 +2436,13 @@ mkdocstrings = ">=0.25"
[[package]]
name = "mypy-extensions"
-version = "1.0.0"
+version = "1.1.0"
description = "Type system extensions for programs checked with the mypy type checker."
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
files = [
- {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
- {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
+ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"},
+ {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"},
]
[[package]]
@@ -3083,13 +3080,13 @@ test = ["coveralls", "futures", "mock", "pytest (>=2.7.3)", "pytest-benchmark",
[[package]]
name = "prompt-toolkit"
-version = "3.0.50"
+version = "3.0.51"
description = "Library for building powerful interactive command lines in Python"
optional = false
-python-versions = ">=3.8.0"
+python-versions = ">=3.8"
files = [
- {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"},
- {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"},
+ {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"},
+ {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"},
]
[package.dependencies]
@@ -3490,13 +3487,13 @@ pylint = ">=1.7"
[[package]]
name = "pymdown-extensions"
-version = "10.14.3"
+version = "10.15"
description = "Extension pack for Python Markdown."
optional = false
python-versions = ">=3.8"
files = [
- {file = "pymdown_extensions-10.14.3-py3-none-any.whl", hash = "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9"},
- {file = "pymdown_extensions-10.14.3.tar.gz", hash = "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"},
+ {file = "pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f"},
+ {file = "pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7"},
]
[package.dependencies]
@@ -3670,66 +3667,66 @@ files = [
[[package]]
name = "pyuwsgi"
-version = "2.0.28.post1"
+version = "2.0.29"
description = "The uWSGI server"
optional = false
python-versions = "*"
files = [
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:611e6585a51b3a1f9619e1069dcdc1b8bf37ad7aa16b271fce2ca3e1440fc548"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c2caedcc6fd0cd217b65ab863a51e18032b3ce81316d0a079652ed43ed8ba68"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9382286b9cf94b5d826388cda7097235b0f1348c7549c8b71100ecfc8d74c58"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30798db4c0c9b36a12fd831cfe621c69569e226d177b3c28c6a191e2a819604f"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4fbc27ccbe24cffb65ce89fbb7cf2e8a0af625b7706179786a810688cefd7f"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e1289847ba14ae2ba4f918c57e9d257ecd82a43f6c7a026e155577596c6304f1"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:91bdc9fcd1e13088ef57f7e58e427c9539e9d2c6d75157f55b5d17ef599e61ee"},
- {file = "pyuwsgi-2.0.28.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a1b0a27f1b9c63a1ac9788a068e5905b8ebedb1b460b9256ac85d1318fd6a9a6"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:36d9c628067fc1c58534b800aacbb7499813b214cabe9128fb5ba79ad32ff9b9"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:219032fe8bb8306cb05e7bc509ff134c853cfcbd7d809a867d5b8ecd589bef5d"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1573ac212201ccbfea00b93d88fde89205d3c2f0a4d0c973058aa0b8745d4a2d"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6105bd14fa2e61505dc116574ba79f3f6e0f425f206d3bec2337463457167aba"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44bfebc678b2dde10382197b9199ce546b699a672e05e139a3827efb121e704f"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e4e4775246f2ab079ea4bcf69d70441ffe81eba82a88eb4da6ae9debf334511f"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e227836984735fdfa26d3be4927a6ae060ad8a0d28ef4a6adcd4f47fbfd7e876"},
- {file = "pyuwsgi-2.0.28.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cf4f03d8b74d9754efd8cc6b0566258ccc1123a8c2fe49a11835242a6fb27efc"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9390e8a2297186ede814d5863a06fa98b91295c813fdd3d08fe1357793476486"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06a0294910de374ff43032b41333f7f9b62d59308b7f3eea29bc64d78fb93613"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64b40503a87621e79efe4306b77595a0cbcb69afa4f3428a85e4e8ac46068d88"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1157f49bfb360c1883feec82553adbed1e4a447e5ced66f36525a92f0e46397e"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941d44a67760dc173c0f8318f8b7bd1ef7927533d6efb4641b2ea9e934f09981"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a90b72a25ba1a34299f4958237a12f18154b373a9a0a93a6267af5e8798c1ee"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2c29fdf5baaff9d717aedb63e7b78b90bec561afc099f952db44699adcb0c575"},
- {file = "pyuwsgi-2.0.28.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e8fd6f2116d2afce52965c940a96a939e9d9c7409f3e19ba445a25e33779f08"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787fd67086df87921bc8837ef018cd7cf02834136f4735811375c1e17b776b40"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f27ee3445eab37fabbe3afc6af68220c8f0bd28c5228d6a2ec7886d080614ad4"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdd7ec17f795049ef346dc10efbfce6c1a9500f3f39262c86107c70b9a83cb9"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4563fa76d64a2c309eb902511a1fcdce66865a03785c61494db5c53136ffa7a"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32838668eab84ac6847876d9da72768552fca556e09a1fe3a63facb976bd12ad"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9feafdfa73a632767a0cb1bafd285e36fba925b9c9ddd2b3311f2963c917c9f"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:20d23ddbf28a831543d586c9e5727c9c28d7be7bd7cb853c7db2e0c529f605bf"},
- {file = "pyuwsgi-2.0.28.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c0b1b09bdf836a6cacf35e2bb06f6ad4b7dff6c6ad48895e1b1c0b0d19bbbfcc"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:735861b77e607e133f9905a5e0ba6505ef6788df1cfdb6af06e6dfef07dfa9af"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dbe7d0bb8184ef6c9bec1a3593a02bd27de0348807c97533069a7bca2603d19"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fcf8a76ad40af8c3c1a1e98f11be03e999e4957f48da6a180f5b8fc40b963c4"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c969668db4599b6a5c927ad4bc1d698ea8c57fb10a943b51402fe80a97cdfc9"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:5b6bec34ca5b200dfc8b10c74b0a9e3da051747f5faa300f681bbb46cf573fd0"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:8dc521dd980ee431d4e6fc9a018ad1df4840c4551f281a598878083f3d155243"},
- {file = "pyuwsgi-2.0.28.post1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:1e6afc8916098ca35119dc0c619f29ef572f72c6f4425f29604c17397ae313b2"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2f118d7211e4afb7e8248cd380c1eac3e87604c1143bbccac1679c3a3642e22"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:327800fa58bfba5d6f2bd19331e812e0e1250aaa681874f5b92998f68e6bab75"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b351e76c9a18dc3e8a635994a98571b9ca7f10e371a0085ae3c8cd95f3db66cd"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c6f658625f2470d905276987aec898a690eee33f49c9c3961ca9d912abd046"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9436ac4450730e1bcca4591ebb781eabcfcf93462114e199b951118032144323"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:0b1c131288b6b473e39c5b02e63c34b64422665749dcadee41ef98d64b5db5d0"},
- {file = "pyuwsgi-2.0.28.post1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a8a932c9d34b2f0007eabf04728ffae7be8bfb87a044daee50a82b6796ad5b34"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f55071012ce5d728ac428be78c3710e986acc02dcfc1d72f3a76541b85e25cfb"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fa60c4fb1e483c079d1f3767863bc41884f6322f0744ac5d6398b0e505e9d21e"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad20990917364f8f9b3fc62424edc6d9a992146bc5e15d37b1bbc9c3934ddf9b"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:167d05f635c46287ee8709b09f422fbc16310acad3c9bd100a267679c061fe62"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2300dba7037089a23b0eb4d2b037391be4d89b73e597671d0f23903a529cd552"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f61adc1ab15da41675af36256feccd0cafb797c703499930fd5b3b381b0b6273"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dc85ba45af7a7b89e3a722cf9cbba724fabb2c3b5caf3c25d67286ab329df97c"},
- {file = "pyuwsgi-2.0.28.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:81e59789af3b568ed1c4484b4bac9e4b79810f4774d8d3ab9056eb3f500e1e94"},
- {file = "pyuwsgi-2.0.28.post1.tar.gz", hash = "sha256:3b85217fd489d623512066ffed0cfc4c95bd3321655e9c6ea13cf6c7f064c9b0"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b920160d8b4c4652aa8bac319a811a82aa6086650c8a3c86a7a3cb2b0d83942"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7c28bebc7439e3e8818bffd40214ef4fce2ed3357c9cbc8edca0e6bafe842e2"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e6a1527bde478fca4ab8024fb0b7078be2bf249bfad4bd39ab2e6b68ad889c"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8d89d5f70453b517335e84fab921614ad0a6658b5d17e72b00866ad2d3c3b3"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed19621f2924157fd86ca28f8f9665f9e812fc7c065580550e1fd7c2d3bb5f9"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f160046b6b3be568e55087da4807ef369503debbe3f5fbec368c0de70ca84e7"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:72828d451ab83684560a3da9f5186a8c5d561ac9478937324cd3b2dd4db9171d"},
+ {file = "pyuwsgi-2.0.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:14964c1b55335cd1d84eb2bb65bc503a3c261df8adffab38364fb51a338eab21"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:267358f4b6698ed554e03c1167e74063438de84563a2a271f3b37bdaba51fbd4"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22f476d5d0fecb637076f81d4d94cc2ad905979adf81b56f2d49545c25c37eee"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b993d332edeb880c8377e33a25f3ef11af49e3c28d53e18aba6d4c8067725e03"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:053541d0581655da50a669e05ef7463092f50af5e1c082f560d49049a6706b02"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2110d9564c640060093d3b8b91ddc0170915029122ae545d590328bd4a9ff8d"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:409b83f0ab9e3a9dece91d95b57cc8518805beabfddfe6aeedad091f245e06ec"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e91d38909a6141efcda17f08f4afa6fd87005d57b33b8b25acfedefab356b85e"},
+ {file = "pyuwsgi-2.0.29-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:496fe13eaafb9a175840a8c9f343d37671d7015c7370fb48d89efccfbbc7865d"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d7e2ecea41de3f4d9cc6a6dad624c664f25ac2dd1bf13c682c61a9038f5658ec"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f944bff248399e08da485fb6c71d575bd93f7dd320b3ef43a38cc43f030b7742"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e41bcf4a1ccce908eb3c1ef98cf3126ab4ab289712f09e74505c1853c6252cf8"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60cda910ab51cf5a2bb79cf57d6e972e85250c0188de2184eb32a72f84e00a72"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:224a70a158e7c2a125f57e66608a3b7e621178ba666ccf718ecfb39400bdecbc"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ff45fa3452f51c68de18e1a90c944b366c0ed858e96bd2a85ba754ae832cb929"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f75e66a5a1fa6f03445eef906797557878d243bd55d7a76428ebc7cbcc7e865"},
+ {file = "pyuwsgi-2.0.29-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:00e9f26731e891647422a54426344c703bdad22cde7ddb4a3b7fc623d2d5696a"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc5141adae24778eeb5c3f510a6457dcfdaccbc62410c988c688be65c54c9dee"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:54e47e93d8c2b87eed7e1216a3bf8618885c697bc378c23290205ccb293e77c2"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46cc00c034191cf86e09e1ef1611099a95a0d1e2fb1219500ecaf73b22543c09"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:882f2d2a8c4f6749177fd2e3f7f15c53ab969bb2beb9c613b62f79b7c3bae96c"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1cc7a60f1c5a2080cc349916cfa2e66b5cd3505c4fb38c799b8a3ba34b00c35"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d2261b3b7c00efad1e15fc766e6daefc2d684ec96db136868ee4139ed7c0442c"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1e72d6e7c79ad480fe1a7c80698c37376a5e5013567258007b989eae47d66608"},
+ {file = "pyuwsgi-2.0.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cda8d6b56acfeccf1e5b750ea23eeb7df7736b855c4080cd7e270c6dc6a060be"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f68fc8c35171628b176f4b848a3dd8c37b312c36b94851bc51bdb16172c4300"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f7b5f9d1d6b3040de5c72a4d817e17a0b3364052d5508d6cef39dabc410d27b"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7f5456571df2e43dc71c67c2c81e64c2169444ec1b71c51018847dfc243184e"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa0d474490a0d3d1d203253858872f23af641aeed9fcb03310a931b1b3181b9"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:9d05f6133c070fea54d3acbc4f613429474be4c0aae5158f255076819a8ce284"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:459c73b4ecfd1deeb55d80f46191a88796ee2bc3b8b7488b9b396b768255d70c"},
+ {file = "pyuwsgi-2.0.29-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:247ba0231c7d3458ce13c2a7cc740542bd8e4c17ebde48fe336cfa055a7b90fd"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:66bbccaf6c5e3ab2d24ef8a14ba4626c0413c8cebdc9596cc61d40575328e0a0"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6154ffd3f4d9f5546e42cffa7511e4cf12dcd689bb7e2fc459751e36666e9334"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3903f5f44a68a85471cbf675deaf8c3d75a99b7cba3371be9956f90deb262854"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a1139a6b18f678b7db6ef37949ca3f80bcedd95a0f37b254ef561e23375f23"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f2cd95cc7c2c12ac050accb4e50ec6534cfba479ced58deab49f7287f58613e5"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:54c22b8d055857b2ee281fee9abd6574be69172d532aa014800522083ba7d4aa"},
+ {file = "pyuwsgi-2.0.29-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2db5c928c98c87713fbd91ec0cd8ea0d5cb3a0f69927ffffd4af9cd50c1307a3"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2be51658fd6e16e11c0c6e0c5c74ec34592749c03d2793671e98f5ca7b9ca0a"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc60543e3f5e7ccdc8023153c3df7de629032d83dd9b42492ea5d5c36f5027c9"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8679c4026ce69ef2ddd35f6bbaccba4064abb5bd0fa733b2443b6aa323075a66"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5333a987bcbc354d9e5fd942fa52670004cf661df8043670743b526f8373d0a"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9271f77b6306724a44444ac96679e1a0355b87896691669961cdfb2697bdd2eb"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a67492ea579121285825042725c00ad35945d2f91b0b77829473caf7f96e71c"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d03d63dd30021541b1d2aaed1a01dea1ff1b8256bd014f8c69dc0501a0f63627"},
+ {file = "pyuwsgi-2.0.29-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc6ba6625299065c39c7a35d7d2a5ab74cb7b50838bb4178dbd89e58da9dc289"},
+ {file = "pyuwsgi-2.0.29.tar.gz", hash = "sha256:197064b97e755d35ca0fbe3a7ccc9560d3197ed25125fc888c9f90d86d55d47b"},
]
[[package]]
@@ -3810,13 +3807,13 @@ pyyaml = "*"
[[package]]
name = "redis"
-version = "5.2.1"
+version = "6.1.0"
description = "Python client for Redis database and key-value store"
optional = false
python-versions = ">=3.8"
files = [
- {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"},
- {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"},
+ {file = "redis-6.1.0-py3-none-any.whl", hash = "sha256:3b72622f3d3a89df2a6041e82acd896b0e67d9f54e9bcd906d091d23ba5219f6"},
+ {file = "redis-6.1.0.tar.gz", hash = "sha256:c928e267ad69d3069af28a9823a07726edf72c7e37764f43dc0123f37928c075"},
]
[package.dependencies]
@@ -3824,7 +3821,8 @@ async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\
[package.extras]
hiredis = ["hiredis (>=3.0.0)"]
-ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"]
+jwt = ["pyjwt (>=2.9.0)"]
+ocsp = ["cryptography (>=36.0.1)", "pyopenssl (>=20.0.1)", "requests (>=2.31.0)"]
[[package]]
name = "referencing"
@@ -4383,13 +4381,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
[[package]]
name = "structlog"
-version = "25.2.0"
+version = "25.3.0"
description = "Structured Logging for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "structlog-25.2.0-py3-none-any.whl", hash = "sha256:0fecea2e345d5d491b72f3db2e5fcd6393abfc8cd06a4851f21fcd4d1a99f437"},
- {file = "structlog-25.2.0.tar.gz", hash = "sha256:d9f9776944207d1035b8b26072b9b140c63702fd7aa57c2f85d28ab701bd8e92"},
+ {file = "structlog-25.3.0-py3-none-any.whl", hash = "sha256:a341f5524004c158498c3127eecded091eb67d3a611e7a3093deca30db06e172"},
+ {file = "structlog-25.3.0.tar.gz", hash = "sha256:8dab497e6f6ca962abad0c283c46744185e0c9ba900db52a423cb6db99f7abeb"},
]
[package.dependencies]
@@ -4865,4 +4863,4 @@ all = []
[metadata]
lock-version = "2.0"
python-versions = ">=3.8,<3.13"
-content-hash = "3596a44889fd1243cab715d3383b39401b169a1a460a8dc6549cd4e2e1a89f0d"
+content-hash = "92ce506bc44f4239cea92aaacd38b160cc7e6c58ca64a568fda76c9815bcdab2"
diff --git a/pyproject.toml b/pyproject.toml
index da73bbff..36826563 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "nautobot-device-onboarding"
-version = "4.2.4"
+version = "4.2.5"
description = "A app for Nautobot to easily onboard new devices."
authors = ["Network to Code, LLC "]
license = "Apache-2.0"
@@ -30,10 +30,10 @@ include = [
python = ">=3.8,<3.13"
napalm = ">=2.5.0, <5"
zipp = "^3.4.0"
-nautobot = "^2.2.3"
+nautobot = "^2.3.1"
nautobot-ssot = "^3.0.0"
nautobot-plugin-nornir = "^2.0.0"
-jdiff = "^0.0.6"
+jdiff = ">=0.0.6,<1.0.0"
ntc-templates = "^7.0.0"
# Netutils pin is needed for https://github.com/networktocode/netutils/pull/553
netutils = "^1.9.1"