2017-05-24 11:33:11 -04:00
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
import django_filters
|
2017-06-19 16:10:18 -04:00
|
|
|
from django.contrib.auth.models import User
|
2018-11-06 10:31:56 -05:00
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
2016-03-01 11:23:03 -05:00
|
|
|
from django.db.models import Q
|
2017-11-07 11:08:23 -05:00
|
|
|
from netaddr import EUI
|
|
|
|
|
from netaddr.core import AddrFormatError
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2016-08-23 11:18:00 -04:00
|
|
|
from extras.filters import CustomFieldFilterSet
|
|
|
|
|
from tenancy.models import Tenant
|
2017-10-30 17:20:22 -04:00
|
|
|
from utilities.filters import NullableCharFieldFilter, NumericInFilter
|
2017-08-21 16:53:36 -04:00
|
|
|
from virtualization.models import Cluster
|
2017-11-07 11:08:23 -05:00
|
|
|
from .constants import (
|
2018-02-06 14:10:42 -05:00
|
|
|
DEVICE_STATUS_CHOICES, IFACE_FF_LAG, NONCONNECTABLE_IFACE_TYPES, SITE_STATUS_CHOICES, VIRTUAL_IFACE_TYPES,
|
|
|
|
|
WIRELESS_IFACE_TYPES,
|
2017-11-07 11:08:23 -05:00
|
|
|
)
|
2016-05-18 16:02:53 -04:00
|
|
|
from .models import (
|
2017-02-03 17:18:47 -05:00
|
|
|
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
|
2017-11-07 11:08:23 -05:00
|
|
|
DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer,
|
|
|
|
|
InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup,
|
2018-01-31 22:47:27 -05:00
|
|
|
RackReservation, RackRole, Region, Site, VirtualChassis,
|
2016-05-18 16:02:53 -04:00
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
class RegionFilter(django_filters.FilterSet):
|
2018-01-30 12:11:20 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=Region.objects.all(),
|
|
|
|
|
label='Parent region (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
parent = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='parent__slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=Region.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Parent region (slug)',
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Region
|
|
|
|
|
fields = ['name', 'slug']
|
|
|
|
|
|
2018-01-30 12:11:20 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(slug__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
|
2016-08-23 11:18:00 -04:00
|
|
|
class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
2017-03-22 09:39:30 -04:00
|
|
|
id__in = NumericInFilter(name='id', lookup_expr='in')
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-06-29 12:06:37 -04:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2018-02-06 14:10:42 -05:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=SITE_STATUS_CHOICES,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
region_id = django_filters.ModelMultipleChoiceFilter(
|
2017-02-28 16:10:53 -05:00
|
|
|
queryset=Region.objects.all(),
|
|
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
region = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='region__slug',
|
2017-02-28 16:10:53 -05:00
|
|
|
queryset=Region.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='tenant__slug',
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2018-05-18 16:24:15 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2016-06-29 12:06:37 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Site
|
2018-02-06 14:10:42 -05:00
|
|
|
fields = ['q', 'name', 'slug', 'facility', 'asn', 'contact_name', 'contact_phone', 'contact_email']
|
2016-06-29 12:06:37 -04:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(facility__icontains=value) |
|
2018-01-25 13:29:09 -05:00
|
|
|
Q(description__icontains=value) |
|
2017-03-01 13:09:19 -05:00
|
|
|
Q(physical_address__icontains=value) |
|
|
|
|
|
Q(shipping_address__icontains=value) |
|
2017-06-19 16:10:18 -04:00
|
|
|
Q(contact_name__icontains=value) |
|
|
|
|
|
Q(contact_phone__icontains=value) |
|
|
|
|
|
Q(contact_email__icontains=value) |
|
2017-03-01 13:09:19 -05:00
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
2016-06-29 12:06:37 -04:00
|
|
|
try:
|
2016-07-29 12:51:23 -04:00
|
|
|
qs_filter |= Q(asn=int(value.strip()))
|
2016-06-29 12:06:37 -04:00
|
|
|
except ValueError:
|
|
|
|
|
pass
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
class RackGroupFilter(django_filters.FilterSet):
|
2018-08-17 18:37:48 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2016-12-26 11:58:27 -05:00
|
|
|
name='site__slug',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = RackGroup
|
2017-06-19 16:10:18 -04:00
|
|
|
fields = ['site_id', 'name', 'slug']
|
|
|
|
|
|
2018-08-17 18:37:48 -04:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(slug__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class RackRoleFilter(django_filters.FilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = RackRole
|
|
|
|
|
fields = ['name', 'slug', 'color']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2016-08-23 11:18:00 -04:00
|
|
|
class RackFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
2017-03-22 09:39:30 -04:00
|
|
|
id__in = NumericInFilter(name='id', lookup_expr='in')
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-07-27 09:53:41 -04:00
|
|
|
facility_id = NullableCharFieldFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2016-12-26 11:58:27 -05:00
|
|
|
name='site__slug',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
group_id = django_filters.ModelMultipleChoiceFilter(
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
|
|
label='Group (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
group = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='group__slug',
|
2016-06-27 12:30:25 -04:00
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Group',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='tenant__slug',
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
role_id = django_filters.ModelMultipleChoiceFilter(
|
2016-08-10 11:52:27 -04:00
|
|
|
queryset=RackRole.objects.all(),
|
|
|
|
|
label='Role (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
role = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='role__slug',
|
2016-08-10 11:52:27 -04:00
|
|
|
queryset=RackRole.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Role (slug)',
|
|
|
|
|
)
|
2018-05-18 16:24:15 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Rack
|
2017-12-14 13:05:26 -05:00
|
|
|
fields = ['name', 'serial', 'type', 'width', 'u_height', 'desc_units']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2016-03-01 11:23:03 -05:00
|
|
|
return queryset.filter(
|
|
|
|
|
Q(name__icontains=value) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(facility_id__icontains=value) |
|
2017-10-09 15:01:57 -04:00
|
|
|
Q(serial__icontains=value.strip()) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(comments__icontains=value)
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2017-02-16 13:46:58 -05:00
|
|
|
class RackReservationFilter(django_filters.FilterSet):
|
2017-04-06 16:26:48 -04:00
|
|
|
id__in = NumericInFilter(name='id', lookup_expr='in')
|
|
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
rack_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Rack.objects.all(),
|
|
|
|
|
label='Rack (ID)',
|
|
|
|
|
)
|
2017-04-06 16:26:48 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='rack__site',
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='rack__site__slug',
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
group_id = django_filters.ModelMultipleChoiceFilter(
|
2017-04-06 16:26:48 -04:00
|
|
|
name='rack__group',
|
|
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
|
|
label='Group (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
group = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='rack__group__slug',
|
2017-04-06 16:26:48 -04:00
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Group',
|
|
|
|
|
)
|
2017-11-15 12:54:49 -06:00
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
|
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='tenant__slug',
|
|
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
user_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=User.objects.all(),
|
|
|
|
|
label='User (ID)',
|
|
|
|
|
)
|
|
|
|
|
user = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='user',
|
|
|
|
|
queryset=User.objects.all(),
|
2017-06-28 16:25:36 -04:00
|
|
|
to_field_name='username',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='User (name)',
|
2017-02-16 13:46:58 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = RackReservation
|
2017-06-19 16:10:18 -04:00
|
|
|
fields = ['created']
|
2017-02-16 13:46:58 -05:00
|
|
|
|
2017-04-06 16:26:48 -04:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(rack__name__icontains=value) |
|
|
|
|
|
Q(rack__facility_id__icontains=value) |
|
|
|
|
|
Q(user__username__icontains=value) |
|
|
|
|
|
Q(description__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
2017-02-16 13:46:58 -05:00
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
class ManufacturerFilter(django_filters.FilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Manufacturer
|
|
|
|
|
fields = ['name', 'slug']
|
|
|
|
|
|
|
|
|
|
|
2016-12-16 10:54:45 -05:00
|
|
|
class DeviceTypeFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
2017-03-22 09:39:30 -04:00
|
|
|
id__in = NumericInFilter(name='id', lookup_expr='in')
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-12-16 11:14:44 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2016-03-04 14:39:39 -05:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
2016-03-04 14:39:39 -05:00
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
2016-12-26 11:58:27 -05:00
|
|
|
name='manufacturer__slug',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2018-05-18 16:24:15 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceType
|
2017-03-01 13:09:19 -05:00
|
|
|
fields = [
|
2017-06-19 16:10:18 -04:00
|
|
|
'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
|
|
|
|
|
'is_network_device', 'subdevice_role',
|
2017-03-01 13:09:19 -05:00
|
|
|
]
|
2016-12-16 11:14:44 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2016-12-16 11:14:44 -05:00
|
|
|
return queryset.filter(
|
|
|
|
|
Q(manufacturer__name__icontains=value) |
|
|
|
|
|
Q(model__icontains=value) |
|
|
|
|
|
Q(part_number__icontains=value) |
|
|
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class DeviceTypeComponentFilterSet(django_filters.FilterSet):
|
|
|
|
|
devicetype_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=DeviceType.objects.all(),
|
2017-08-18 10:27:43 -04:00
|
|
|
name='device_type_id',
|
2017-02-03 17:18:47 -05:00
|
|
|
label='Device type (ID)',
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsolePortTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePortTemplate
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsoleServerPortTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsoleServerPortTemplate
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerPortTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPortTemplate
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerOutletTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerOutletTemplate
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InterfaceTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = InterfaceTemplate
|
2017-06-19 16:10:18 -04:00
|
|
|
fields = ['name', 'form_factor', 'mgmt_only']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeviceBayTemplateFilter(DeviceTypeComponentFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceBayTemplate
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
class DeviceRoleFilter(django_filters.FilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceRole
|
2017-12-19 09:37:26 -05:00
|
|
|
fields = ['name', 'slug', 'color', 'vm_role']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class PlatformFilter(django_filters.FilterSet):
|
2017-12-19 16:15:26 -05:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='manufacturer',
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='manufacturer__slug',
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Platform
|
|
|
|
|
fields = ['name', 'slug']
|
|
|
|
|
|
|
|
|
|
|
2016-08-23 11:18:00 -04:00
|
|
|
class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
2017-03-22 09:39:30 -04:00
|
|
|
id__in = NumericInFilter(name='id', lookup_expr='in')
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='device_type__manufacturer',
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
label='Manufacturer (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='device_type__manufacturer__slug',
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Manufacturer (slug)',
|
2016-07-13 13:07:02 -04:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
device_type_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=DeviceType.objects.all(),
|
|
|
|
|
label='Device type (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
|
|
|
|
role_id = django_filters.ModelMultipleChoiceFilter(
|
2017-06-19 16:10:18 -04:00
|
|
|
name='device_role_id',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=DeviceRole.objects.all(),
|
|
|
|
|
label='Role (ID)',
|
|
|
|
|
)
|
|
|
|
|
role = django_filters.ModelMultipleChoiceFilter(
|
2016-12-26 11:58:27 -05:00
|
|
|
name='device_role__slug',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=DeviceRole.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Role (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='tenant__slug',
|
2016-07-26 17:28:46 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
platform_id = django_filters.ModelMultipleChoiceFilter(
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=Platform.objects.all(),
|
|
|
|
|
label='Platform (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
platform = django_filters.ModelMultipleChoiceFilter(
|
2017-10-31 14:47:14 -04:00
|
|
|
name='platform__slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=Platform.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Platform (slug)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-07-27 09:53:41 -04:00
|
|
|
name = NullableCharFieldFilter()
|
|
|
|
|
asset_tag = NullableCharFieldFilter()
|
2018-11-06 10:31:56 -05:00
|
|
|
region_id = django_filters.NumberFilter(
|
|
|
|
|
method='filter_region',
|
|
|
|
|
name='pk',
|
|
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = django_filters.CharFilter(
|
|
|
|
|
method='filter_region',
|
|
|
|
|
name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='site__slug',
|
|
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
|
|
|
|
rack_group_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='rack__group',
|
|
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
|
|
label='Rack group (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
rack_id = django_filters.ModelMultipleChoiceFilter(
|
2017-06-19 16:10:18 -04:00
|
|
|
name='rack',
|
|
|
|
|
queryset=Rack.objects.all(),
|
|
|
|
|
label='Rack (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
cluster_id = django_filters.ModelMultipleChoiceFilter(
|
2017-08-21 16:53:36 -04:00
|
|
|
queryset=Cluster.objects.all(),
|
|
|
|
|
label='VM cluster (ID)',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
model = django_filters.ModelMultipleChoiceFilter(
|
2016-12-26 11:58:27 -05:00
|
|
|
name='device_type__slug',
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=DeviceType.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Device model (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
2018-01-25 12:20:24 -05:00
|
|
|
choices=DEVICE_STATUS_CHOICES,
|
2017-11-14 12:58:47 -05:00
|
|
|
null_value=None
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
is_full_depth = django_filters.BooleanFilter(
|
|
|
|
|
name='device_type__is_full_depth',
|
|
|
|
|
label='Is full depth',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
|
|
|
|
is_console_server = django_filters.BooleanFilter(
|
|
|
|
|
name='device_type__is_console_server',
|
|
|
|
|
label='Is a console server',
|
|
|
|
|
)
|
|
|
|
|
is_pdu = django_filters.BooleanFilter(
|
|
|
|
|
name='device_type__is_pdu',
|
|
|
|
|
label='Is a PDU',
|
|
|
|
|
)
|
|
|
|
|
is_network_device = django_filters.BooleanFilter(
|
|
|
|
|
name='device_type__is_network_device',
|
|
|
|
|
label='Is a network device',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
mac_address = django_filters.CharFilter(
|
|
|
|
|
method='_mac_address',
|
|
|
|
|
label='MAC address',
|
|
|
|
|
)
|
2017-03-21 21:29:03 -04:00
|
|
|
has_primary_ip = django_filters.BooleanFilter(
|
|
|
|
|
method='_has_primary_ip',
|
|
|
|
|
label='Has a primary IP',
|
|
|
|
|
)
|
2018-02-01 13:02:34 -05:00
|
|
|
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='virtual_chassis',
|
|
|
|
|
queryset=VirtualChassis.objects.all(),
|
|
|
|
|
label='Virtual chassis (ID)',
|
|
|
|
|
)
|
2018-05-18 16:24:15 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Device
|
2017-12-14 13:12:04 -05:00
|
|
|
fields = ['serial', 'position']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2017-08-03 09:26:28 -04:00
|
|
|
return queryset.filter(
|
2016-03-01 11:23:03 -05:00
|
|
|
Q(name__icontains=value) |
|
2016-08-11 11:58:21 -04:00
|
|
|
Q(serial__icontains=value.strip()) |
|
2017-03-21 12:54:08 -04:00
|
|
|
Q(inventory_items__serial__icontains=value.strip()) |
|
2018-06-14 13:17:06 -04:00
|
|
|
Q(asset_tag__icontains=value.strip()) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(comments__icontains=value)
|
2017-08-03 09:26:28 -04:00
|
|
|
).distinct()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2018-11-06 10:31:56 -05:00
|
|
|
def filter_region(self, queryset, name, value):
|
|
|
|
|
try:
|
|
|
|
|
region = Region.objects.get(**{name: value})
|
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
|
return queryset.none()
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(site__region=region) |
|
|
|
|
|
Q(site__region__in=region.get_descendants())
|
|
|
|
|
)
|
|
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def _mac_address(self, queryset, name, value):
|
2016-12-07 15:53:19 -05:00
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
2016-12-06 14:45:01 -05:00
|
|
|
try:
|
2017-08-02 11:54:53 -04:00
|
|
|
mac = EUI(value.strip())
|
|
|
|
|
return queryset.filter(interfaces__mac_address=mac).distinct()
|
2016-12-06 14:45:01 -05:00
|
|
|
except AddrFormatError:
|
|
|
|
|
return queryset.none()
|
|
|
|
|
|
2017-03-21 21:29:03 -04:00
|
|
|
def _has_primary_ip(self, queryset, name, value):
|
|
|
|
|
if value:
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(primary_ip4__isnull=False) |
|
|
|
|
|
Q(primary_ip6__isnull=False)
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
return queryset.exclude(
|
|
|
|
|
Q(primary_ip4__isnull=False) |
|
|
|
|
|
Q(primary_ip6__isnull=False)
|
|
|
|
|
)
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class DeviceComponentFilterSet(django_filters.FilterSet):
|
2017-06-14 14:34:14 -04:00
|
|
|
device_id = django_filters.ModelChoiceFilter(
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Device.objects.all(),
|
|
|
|
|
label='Device (ID)',
|
|
|
|
|
)
|
2017-06-14 14:34:14 -04:00
|
|
|
device = django_filters.ModelChoiceFilter(
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset=Device.objects.all(),
|
|
|
|
|
to_field_name='name',
|
|
|
|
|
label='Device (name)',
|
|
|
|
|
)
|
2018-07-12 11:34:35 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class ConsolePortFilter(DeviceComponentFilterSet):
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePort
|
2016-12-26 11:58:27 -05:00
|
|
|
fields = ['name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class ConsoleServerPortFilter(DeviceComponentFilterSet):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsoleServerPort
|
2016-12-26 11:58:27 -05:00
|
|
|
fields = ['name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class PowerPortFilter(DeviceComponentFilterSet):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPort
|
2016-12-26 11:58:27 -05:00
|
|
|
fields = ['name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class PowerOutletFilter(DeviceComponentFilterSet):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerOutlet
|
2016-12-26 11:58:27 -05:00
|
|
|
fields = ['name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-06-14 14:34:14 -04:00
|
|
|
class InterfaceFilter(django_filters.FilterSet):
|
2017-06-19 16:10:18 -04:00
|
|
|
"""
|
|
|
|
|
Not using DeviceComponentFilterSet for Interfaces because we need to glean the ordering logic from the parent
|
|
|
|
|
Device's DeviceType.
|
|
|
|
|
"""
|
2017-06-14 14:34:14 -04:00
|
|
|
device = django_filters.CharFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
name='name',
|
|
|
|
|
label='Device',
|
|
|
|
|
)
|
|
|
|
|
device_id = django_filters.NumberFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
name='pk',
|
|
|
|
|
label='Device (ID)',
|
|
|
|
|
)
|
2017-03-01 13:09:19 -05:00
|
|
|
type = django_filters.CharFilter(
|
|
|
|
|
method='filter_type',
|
2017-02-27 16:52:13 -05:00
|
|
|
label='Interface type',
|
|
|
|
|
)
|
2017-05-17 14:43:44 -04:00
|
|
|
lag_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='lag',
|
|
|
|
|
queryset=Interface.objects.all(),
|
|
|
|
|
label='LAG interface (ID)',
|
|
|
|
|
)
|
2017-03-18 21:10:36 +01:00
|
|
|
mac_address = django_filters.CharFilter(
|
|
|
|
|
method='_mac_address',
|
|
|
|
|
label='MAC address',
|
|
|
|
|
)
|
2018-07-12 11:34:35 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2018-11-05 14:37:52 -06:00
|
|
|
vlan_id = django_filters.CharFilter(
|
2018-11-05 15:45:21 -05:00
|
|
|
method='filter_vlan_id',
|
|
|
|
|
label='Assigned VLAN'
|
2018-11-05 14:37:52 -06:00
|
|
|
)
|
|
|
|
|
vlan = django_filters.CharFilter(
|
2018-11-05 15:45:21 -05:00
|
|
|
method='filter_vlan',
|
|
|
|
|
label='Assigned VID'
|
2018-11-05 14:37:52 -06:00
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Interface
|
2017-06-23 14:04:15 -04:00
|
|
|
fields = ['name', 'form_factor', 'enabled', 'mtu', 'mgmt_only']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-06-14 14:34:14 -04:00
|
|
|
def filter_device(self, queryset, name, value):
|
|
|
|
|
try:
|
|
|
|
|
device = Device.objects.select_related('device_type').get(**{name: value})
|
2017-12-18 16:22:49 -05:00
|
|
|
vc_interface_ids = [i['id'] for i in device.vc_interfaces.values('id')]
|
2017-06-14 14:34:14 -04:00
|
|
|
ordering = device.device_type.interface_ordering
|
2017-12-18 16:22:49 -05:00
|
|
|
return queryset.filter(pk__in=vc_interface_ids).order_naturally(ordering)
|
2017-06-14 14:34:14 -04:00
|
|
|
except Device.DoesNotExist:
|
|
|
|
|
return queryset.none()
|
|
|
|
|
|
2018-11-05 15:45:21 -05:00
|
|
|
def filter_vlan_id(self, queryset, name, value):
|
|
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(untagged_vlan_id=value) |
|
|
|
|
|
Q(tagged_vlans=value)
|
|
|
|
|
)
|
2018-11-05 14:37:52 -06:00
|
|
|
|
2018-11-05 15:45:21 -05:00
|
|
|
def filter_vlan(self, queryset, name, value):
|
|
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(untagged_vlan_id__vid=value) |
|
|
|
|
|
Q(tagged_vlans__vid=value)
|
|
|
|
|
)
|
2018-11-05 14:37:52 -06:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def filter_type(self, queryset, name, value):
|
2017-02-27 16:52:13 -05:00
|
|
|
value = value.strip().lower()
|
2017-06-16 17:52:09 -04:00
|
|
|
return {
|
|
|
|
|
'physical': queryset.exclude(form_factor__in=NONCONNECTABLE_IFACE_TYPES),
|
|
|
|
|
'virtual': queryset.filter(form_factor__in=VIRTUAL_IFACE_TYPES),
|
|
|
|
|
'wireless': queryset.filter(form_factor__in=WIRELESS_IFACE_TYPES),
|
|
|
|
|
'lag': queryset.filter(form_factor=IFACE_FF_LAG),
|
|
|
|
|
}.get(value, queryset.none())
|
2017-02-27 16:52:13 -05:00
|
|
|
|
2017-03-18 21:10:36 +01:00
|
|
|
def _mac_address(self, queryset, name, value):
|
|
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
try:
|
2017-08-02 11:54:53 -04:00
|
|
|
mac = EUI(value.strip())
|
|
|
|
|
return queryset.filter(mac_address=mac)
|
2017-03-18 21:10:36 +01:00
|
|
|
except AddrFormatError:
|
|
|
|
|
return queryset.none()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class DeviceBayFilter(DeviceComponentFilterSet):
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceBay
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
2017-03-21 12:54:08 -04:00
|
|
|
class InventoryItemFilter(DeviceComponentFilterSet):
|
2018-01-30 17:46:00 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2018-11-06 09:24:05 -05:00
|
|
|
device_id = django_filters.ModelChoiceFilter(
|
|
|
|
|
queryset=Device.objects.all(),
|
|
|
|
|
label='Device (ID)',
|
|
|
|
|
)
|
|
|
|
|
device = django_filters.ModelChoiceFilter(
|
|
|
|
|
queryset=Device.objects.all(),
|
|
|
|
|
to_field_name='name',
|
|
|
|
|
label='Device (name)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=InventoryItem.objects.all(),
|
|
|
|
|
label='Parent inventory item (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='manufacturer__slug',
|
|
|
|
|
queryset=Manufacturer.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2017-07-27 09:53:41 -04:00
|
|
|
asset_tag = NullableCharFieldFilter()
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
2017-03-21 12:54:08 -04:00
|
|
|
model = InventoryItem
|
2018-01-30 17:46:00 -05:00
|
|
|
fields = ['name', 'part_id', 'serial', 'asset_tag', 'discovered']
|
|
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(part_id__icontains=value) |
|
|
|
|
|
Q(serial__iexact=value) |
|
|
|
|
|
Q(asset_tag__iexact=value) |
|
|
|
|
|
Q(description__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
|
2018-01-19 13:34:37 -05:00
|
|
|
class VirtualChassisFilter(django_filters.FilterSet):
|
2018-02-21 09:53:23 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
|
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='master__site',
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='master__site__slug',
|
|
|
|
|
queryset=Site.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
|
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='master__tenant',
|
|
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
|
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
name='master__tenant__slug',
|
|
|
|
|
queryset=Tenant.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2018-07-12 11:34:35 -04:00
|
|
|
tag = django_filters.CharFilter(
|
|
|
|
|
name='tags__slug',
|
|
|
|
|
)
|
2018-01-19 13:34:37 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = VirtualChassis
|
|
|
|
|
fields = ['domain']
|
|
|
|
|
|
2018-02-21 09:53:23 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(master__name__icontains=value) |
|
|
|
|
|
Q(domain__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
2018-01-19 13:34:37 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
class ConsoleConnectionFilter(django_filters.FilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
site = django_filters.CharFilter(
|
|
|
|
|
method='filter_site',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2017-03-23 10:07:02 -04:00
|
|
|
device = django_filters.CharFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
label='Device',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-04-05 11:29:12 -04:00
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePort
|
|
|
|
|
fields = ['name', 'connection_status']
|
|
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def filter_site(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
2016-03-01 11:23:03 -05:00
|
|
|
return queryset
|
2017-03-01 13:09:19 -05:00
|
|
|
return queryset.filter(cs_port__device__site__slug=value)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-23 10:07:02 -04:00
|
|
|
def filter_device(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(device__name__icontains=value) |
|
|
|
|
|
Q(cs_port__device__name__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class PowerConnectionFilter(django_filters.FilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
site = django_filters.CharFilter(
|
|
|
|
|
method='filter_site',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2017-03-23 10:07:02 -04:00
|
|
|
device = django_filters.CharFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
label='Device',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-04-05 11:29:12 -04:00
|
|
|
class Meta:
|
|
|
|
|
model = PowerPort
|
|
|
|
|
fields = ['name', 'connection_status']
|
|
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def filter_site(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
2016-03-01 11:23:03 -05:00
|
|
|
return queryset
|
2017-03-01 13:09:19 -05:00
|
|
|
return queryset.filter(power_outlet__device__site__slug=value)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-23 10:07:02 -04:00
|
|
|
def filter_device(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(device__name__icontains=value) |
|
|
|
|
|
Q(power_outlet__device__name__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class InterfaceConnectionFilter(django_filters.FilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
site = django_filters.CharFilter(
|
|
|
|
|
method='filter_site',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2017-03-23 10:07:02 -04:00
|
|
|
device = django_filters.CharFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
label='Device',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-04-10 16:15:36 -04:00
|
|
|
class Meta:
|
|
|
|
|
model = InterfaceConnection
|
|
|
|
|
fields = ['connection_status']
|
|
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def filter_site(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
2016-03-01 11:23:03 -05:00
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
2017-03-01 13:09:19 -05:00
|
|
|
Q(interface_a__device__site__slug=value) |
|
|
|
|
|
Q(interface_b__device__site__slug=value)
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-03-23 10:07:02 -04:00
|
|
|
|
|
|
|
|
def filter_device(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(interface_a__device__name__icontains=value) |
|
|
|
|
|
Q(interface_b__device__name__icontains=value)
|
|
|
|
|
)
|