diff --git a/netbox_device_map/__init__.py b/netbox_device_map/__init__.py index 2aa8c6b..531f91b 100644 --- a/netbox_device_map/__init__.py +++ b/netbox_device_map/__init__.py @@ -4,7 +4,7 @@ from extras.plugins import PluginConfig class DeviceMapConfig(PluginConfig): name = 'netbox_device_map' verbose_name = 'Device map' - version = '0.1' + version = '0.1.1' author = 'Victor Golovanenko' author_email = 'drygdryg2014@yandex.com' base_url = 'device-map' diff --git a/netbox_device_map/helpers.py b/netbox_device_map/helpers.py index 4592b82..6215ead 100644 --- a/netbox_device_map/helpers.py +++ b/netbox_device_map/helpers.py @@ -1,11 +1,15 @@ +from packaging import version + from dcim.models import Device from django.db.models import QuerySet, Q from ipam.models import VLAN +from netbox.settings import VERSION from .settings import plugin_settings LOCATION_CF_NAME = plugin_settings['device_geolocation_cf'] +NETBOX_VERSION = version.parse(VERSION) LatLon = tuple[float, float] @@ -22,11 +26,19 @@ def get_connected_devices(device: Device, vlan: VLAN = None) -> QuerySet[Device] included_interfaces = device.interfaces.all() if vlan is not None: included_interfaces = included_interfaces.filter(Q(untagged_vlan=vlan) | Q(tagged_vlans=vlan)) - return Device.objects.filter(interfaces___link_peer_id__in=included_interfaces) + if NETBOX_VERSION < version.parse('3.3.0'): + return Device.objects.filter(interfaces___link_peer_id__in=included_interfaces) + else: + return Device.objects.filter( + interfaces__cable__terminations__interface__in=device.interfaces.all() + ).exclude(pk=device.id) def are_devices_connected(device_a: Device, device_b: Device) -> bool: """Determines whether devices are connected to each other by a direct connection""" - return bool( - Device.objects.filter(interfaces___link_peer_id__in=device_a.interfaces.all(), id=device_b.id).values('pk') - ) + if NETBOX_VERSION < version.parse('3.3.0'): + queryset = Device.objects.filter(interfaces___link_peer_id__in=device_a.interfaces.all(), id=device_b.id) + else: + queryset = Device.objects.filter( + interfaces__cable__terminations__interface__in=device_a.interfaces.all(), id=device_b.id) + return bool(queryset.values('pk')) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0d1aa28 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +setuptools +Django +packaging diff --git a/setup.py b/setup.py index 29ff914..a3c1bd3 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', encoding='utf-8') as f: setup( name='netbox-plugin-device-map', - version='0.1.0', + version='0.1.1', description='A simple device map with filter criteria', long_description=long_description, long_description_content_type='text/markdown',