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"