class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) name = django_filters.CharFilter( name='name', lookup_type='icontains', label='Name', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) def search(self, queryset, value): return queryset.filter( Q(name__icontains=value) | Q(rd__icontains=value) | Q(description__icontains=value)) class Meta: model = VRF fields = ['name', 'rd']
class TenantFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) group_id = NullableModelMultipleChoiceFilter( name='group', queryset=TenantGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=TenantGroup.objects.all(), to_field_name='slug', label='Group (slug)', ) class Meta: model = Tenant fields = ['q', 'group_id', 'group', 'name'] def search(self, queryset, value): return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value) )
class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) class Meta: model = Site fields = ['q', 'name', 'facility', 'asn'] def search(self, queryset, value): qs_filter = Q(name__icontains=value) | Q(facility__icontains=value) | Q(physical_address__icontains=value) | \ Q(shipping_address__icontains=value) | Q(comments__icontains=value) try: qs_filter |= Q(asn=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)
class TenantFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) group_id = NullableModelMultipleChoiceFilter( name='group', queryset=TenantGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=TenantGroup.objects.all(), to_field_name='slug', label='Group (slug)', ) class Meta: model = Tenant fields = ['name'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value))
class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(rd__icontains=value) | Q(description__icontains=value)) class Meta: model = VRF fields = ['name', 'rd']
class RackReservationFilter(django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) rack_id = django_filters.ModelMultipleChoiceFilter( queryset=Rack.objects.all(), label='Rack (ID)', ) 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)', ) group_id = NullableModelMultipleChoiceFilter( name='rack__group', queryset=RackGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='rack__group', queryset=RackGroup.objects.all(), to_field_name='slug', label='Group', ) user_id = django_filters.ModelMultipleChoiceFilter( queryset=User.objects.all(), label='User (ID)', ) user = django_filters.ModelMultipleChoiceFilter( name='user', queryset=User.objects.all(), to_field_name='username', label='User (name)', ) class Meta: model = RackReservation fields = ['created'] 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) )
class RegionFilter(django_filters.FilterSet): parent_id = NullableModelMultipleChoiceFilter( queryset=Region.objects.all(), label='Parent region (ID)', ) parent = NullableModelMultipleChoiceFilter( queryset=Region.objects.all(), to_field_name='slug', label='Parent region (slug)', ) class Meta: model = Region fields = ['name', 'slug']
class MathFilter(django_filters.FilterSet): parent_id = NullableModelMultipleChoiceFilter( queryset=Math.objects.all(), label='Parent region (ID)', ) parent = NullableModelMultipleChoiceFilter( queryset=Math.objects.all(), to_field_name='slug', label='Parent region (slug)', ) class Meta: model = Math fields = ['stem', 'keys']
class VirtualMachineFilter(CustomFieldFilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) status = django_filters.MultipleChoiceFilter(choices=STATUS_CHOICES) cluster_group_id = NullableModelMultipleChoiceFilter( name='cluster__group', queryset=ClusterGroup.objects.all(), label='Cluster group (ID)', ) cluster_group = NullableModelMultipleChoiceFilter( name='cluster__group', queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Cluster group (slug)', ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label='Cluster (ID)', ) role_id = NullableModelMultipleChoiceFilter( queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) platform_id = NullableModelMultipleChoiceFilter( queryset=Platform.objects.all(), label='Platform (ID)', ) platform = NullableModelMultipleChoiceFilter( queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) class Meta: model = VirtualMachine fields = ['name', 'cluster'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(comments__icontains=value))
class VLANGroupFilter(django_filters.FilterSet): site_id = NullableModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) class Meta: model = VLANGroup fields = ['name', 'slug']
class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) region_id = NullableModelMultipleChoiceFilter( name='region', queryset=Region.objects.all(), label='Region (ID)', ) region = NullableModelMultipleChoiceFilter( name='region', queryset=Region.objects.all(), to_field_name='slug', label='Region (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) class Meta: model = Site fields = ['q', 'name', 'facility', 'asn'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = ( Q(name__icontains=value) | Q(facility__icontains=value) | Q(physical_address__icontains=value) | Q(shipping_address__icontains=value) | Q(comments__icontains=value) ) try: qs_filter |= Q(asn=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)
class ClusterFilter(CustomFieldFilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) group_id = NullableModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), label='Parent group (ID)', ) group = NullableModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Parent group (slug)', ) type_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterType.objects.all(), label='Cluster type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( name='type__slug', queryset=ClusterType.objects.all(), to_field_name='slug', label='Cluster type (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) class Meta: model = Cluster fields = ['name'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(comments__icontains=value))
class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) facility_id = NullableCharFieldFilter() site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = NullableModelMultipleChoiceFilter( queryset=RackGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=RackGroup.objects.all(), to_field_name='slug', label='Group', ) tenant_id = NullableModelMultipleChoiceFilter( queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) role_id = NullableModelMultipleChoiceFilter( queryset=RackRole.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=RackRole.objects.all(), to_field_name='slug', label='Role (slug)', ) class Meta: model = Rack fields = ['type', 'width', 'u_height', 'desc_units'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(facility_id__icontains=value) | Q(comments__icontains=value) )
class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) site_id = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = NullableModelMultipleChoiceFilter( name='group', queryset=RackGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=RackGroup.objects.all(), to_field_name='slug', label='Group', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) role_id = NullableModelMultipleChoiceFilter( name='role', queryset=RackRole.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=RackRole.objects.all(), to_field_name='slug', label='Role (slug)', ) class Meta: model = Rack fields = ['q', 'site_id', 'site', 'u_height'] def search(self, queryset, value): return queryset.filter( Q(name__icontains=value) | Q(facility_id__icontains=value) | Q(comments__icontains=value) )
class InventoryItemFilter(DeviceComponentFilterSet): parent_id = NullableModelMultipleChoiceFilter( 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)', ) class Meta: model = InventoryItem fields = ['name', 'part_id', 'serial', 'asset_tag', 'discovered']
class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) parent = django_filters.MethodFilter( action='search_by_parent', label='Parent prefix', ) vrf_id = NullableModelMultipleChoiceFilter( name='vrf_id', queryset=VRF.objects.all(), label='VRF', ) vrf = NullableModelMultipleChoiceFilter( name='vrf', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) device_id = django_filters.ModelMultipleChoiceFilter( name='interface__device', queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( name='interface__device', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) interface_id = django_filters.ModelMultipleChoiceFilter( name='interface', queryset=Interface.objects.all(), label='Interface (ID)', ) class Meta: model = IPAddress fields = [ 'q', 'family', 'status', 'device_id', 'device', 'interface_id' ] def search(self, queryset, value): qs_filter = Q(description__icontains=value) try: ipaddress = str(IPNetwork(value.strip())) qs_filter |= Q(address__net_host=ipaddress) except AddrFormatError: pass return queryset.filter(qs_filter) def search_by_parent(self, queryset, value): value = value.strip() if not value: return queryset try: query = str(IPNetwork(value).cidr) return queryset.filter(address__net_contained_or_equal=query) except AddrFormatError: return queryset.none()
class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( name='device_type__manufacturer', queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( name='device_type__manufacturer__slug', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) device_type_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceType.objects.all(), label='Device type (ID)', ) role_id = django_filters.ModelMultipleChoiceFilter( name='device_role_id', queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( name='device_role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) platform_id = NullableModelMultipleChoiceFilter( queryset=Platform.objects.all(), label='Platform (ID)', ) platform = NullableModelMultipleChoiceFilter( name='platform', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) name = NullableCharFieldFilter() asset_tag = NullableCharFieldFilter() site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) rack_group_id = django_filters.ModelMultipleChoiceFilter( name='rack__group', queryset=RackGroup.objects.all(), label='Rack group (ID)', ) rack_id = NullableModelMultipleChoiceFilter( name='rack', queryset=Rack.objects.all(), label='Rack (ID)', ) model = django_filters.ModelMultipleChoiceFilter( name='device_type__slug', queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', ) status = django_filters.MultipleChoiceFilter(choices=STATUS_CHOICES) is_full_depth = django_filters.BooleanFilter( name='device_type__is_full_depth', label='Is full depth', ) 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', ) mac_address = django_filters.CharFilter( method='_mac_address', label='MAC address', ) has_primary_ip = django_filters.BooleanFilter( method='_has_primary_ip', label='Has a primary IP', ) class Meta: model = Device fields = ['serial'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(serial__icontains=value.strip()) | Q(inventory_items__serial__icontains=value.strip()) | Q(asset_tag=value.strip()) | Q(comments__icontains=value)).distinct() def _mac_address(self, queryset, name, value): value = value.strip() if not value: return queryset try: mac = EUI(value.strip()) return queryset.filter(interfaces__mac_address=mac).distinct() except AddrFormatError: return queryset.none() 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))
class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) parent = django_filters.CharFilter( method='search_by_parent', label='Parent prefix', ) mask_length = django_filters.NumberFilter( method='filter_mask_length', label='Mask length', ) vrf_id = NullableModelMultipleChoiceFilter( name='vrf_id', queryset=VRF.objects.all(), label='VRF', ) vrf = NullableModelMultipleChoiceFilter( name='vrf', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) site_id = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) vlan_id = NullableModelMultipleChoiceFilter( name='vlan', queryset=VLAN.objects.all(), label='VLAN (ID)', ) vlan_vid = django_filters.NumberFilter( name='vlan__vid', label='VLAN number (1-4095)', ) role_id = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) status = django_filters.MultipleChoiceFilter(choices=PREFIX_STATUS_CHOICES) class Meta: model = Prefix fields = ['family'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(description__icontains=value) try: prefix = str(IPNetwork(value.strip()).cidr) qs_filter |= Q(prefix__net_contains_or_equals=prefix) except AddrFormatError: pass return queryset.filter(qs_filter) def search_by_parent(self, queryset, name, value): value = value.strip() if not value: return queryset try: query = str(IPNetwork(value).cidr) return queryset.filter(prefix__net_contained_or_equal=query) except AddrFormatError: return queryset.none() def filter_mask_length(self, queryset, name, value): if not value: return queryset return queryset.filter(prefix__net_mask_length=value)
class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) mac_address = django_filters.MethodFilter( action='_mac_address', label='MAC address', ) site_id = django_filters.ModelMultipleChoiceFilter( name='rack__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='rack__site', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) rack_group_id = django_filters.ModelMultipleChoiceFilter( name='rack__group', queryset=RackGroup.objects.all(), label='Rack group (ID)', ) rack_id = django_filters.ModelMultipleChoiceFilter( name='rack', queryset=Rack.objects.all(), label='Rack (ID)', ) role_id = django_filters.ModelMultipleChoiceFilter( name='device_role', queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( name='device_role', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) device_type_id = django_filters.ModelMultipleChoiceFilter( name='device_type', queryset=DeviceType.objects.all(), label='Device type (ID)', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( name='device_type__manufacturer', queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( name='device_type__manufacturer', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) model = django_filters.ModelMultipleChoiceFilter( name='device_type', queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', ) platform_id = NullableModelMultipleChoiceFilter( name='platform', queryset=Platform.objects.all(), label='Platform (ID)', ) platform = NullableModelMultipleChoiceFilter( name='platform', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) status = django_filters.BooleanFilter( name='status', label='Status', ) 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', ) class Meta: model = Device fields = ['q', 'name', 'serial', 'asset_tag', 'site_id', 'site', 'rack_id', 'role_id', 'role', 'device_type_id', 'manufacturer_id', 'manufacturer', 'model', 'platform_id', 'platform', 'status', 'is_console_server', 'is_pdu', 'is_network_device'] def search(self, queryset, value): return queryset.filter( Q(name__icontains=value) | Q(serial__icontains=value.strip()) | Q(modules__serial__icontains=value.strip()) | Q(asset_tag=value.strip()) | Q(comments__icontains=value) ).distinct() def _mac_address(self, queryset, value): value = value.strip() if not value: return queryset try: return queryset.filter(interfaces__mac_address=value).distinct() except AddrFormatError: return queryset.none()
class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) parent = django_filters.CharFilter( method='search_by_parent', label='Parent prefix', ) mask_length = django_filters.NumberFilter( method='filter_mask_length', label='Mask length', ) vrf_id = NullableModelMultipleChoiceFilter( name='vrf_id', queryset=VRF.objects.all(), label='VRF', ) vrf = NullableModelMultipleChoiceFilter( name='vrf', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) device_id = django_filters.ModelMultipleChoiceFilter( name='interface__device', queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( name='interface__device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) interface_id = django_filters.ModelMultipleChoiceFilter( name='interface', queryset=Interface.objects.all(), label='Interface (ID)', ) status = django_filters.MultipleChoiceFilter( choices=IPADDRESS_STATUS_CHOICES) class Meta: model = IPAddress fields = ['family'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(description__icontains=value) try: ipaddress = str(IPNetwork(value.strip())) qs_filter |= Q(address__net_host=ipaddress) except AddrFormatError: pass return queryset.filter(qs_filter) def search_by_parent(self, queryset, name, value): value = value.strip() if not value: return queryset try: query = str(IPNetwork(value.strip()).cidr) return queryset.filter(address__net_host_contained=query) except AddrFormatError: return queryset.none() def filter_mask_length(self, queryset, name, value): if not value: return queryset return queryset.filter(address__net_mask_length=value)
class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) parent = django_filters.MethodFilter( action='search_by_parent', label='Parent prefix', ) vrf_id = NullableModelMultipleChoiceFilter( name='vrf_id', queryset=VRF.objects.all(), label='VRF', ) vrf = NullableModelMultipleChoiceFilter( name='vrf', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) site_id = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) vlan_id = django_filters.ModelMultipleChoiceFilter( name='vlan', queryset=VLAN.objects.all(), label='VLAN (ID)', ) vlan_vid = django_filters.NumberFilter( name='vlan__vid', label='VLAN number (1-4095)', ) role_id = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) class Meta: model = Prefix fields = [ 'family', 'site_id', 'site', 'vlan_id', 'vlan_vid', 'status', 'role_id', 'role' ] def search(self, queryset, value): qs_filter = Q(description__icontains=value) try: prefix = str(IPNetwork(value.strip()).cidr) qs_filter |= Q(prefix__net_contains_or_equals=prefix) except AddrFormatError: pass return queryset.filter(qs_filter) def search_by_parent(self, queryset, value): value = value.strip() if not value: return queryset try: query = str(IPNetwork(value).cidr) return queryset.filter(prefix__net_contained_or_equal=query) except AddrFormatError: return queryset.none() def _tenant(self, queryset, value): if str(value) == '': return queryset return queryset.filter( Q(tenant__slug=value) | Q(tenant__isnull=True, vrf__tenant__slug=value)) def _tenant_id(self, queryset, value): try: value = int(value) except ValueError: return queryset.none() return queryset.filter( Q(tenant__pk=value) | Q(tenant__isnull=True, vrf__tenant__pk=value))
class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) site_id = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = NullableModelMultipleChoiceFilter( name='group', queryset=VLANGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=VLANGroup.objects.all(), to_field_name='slug', label='Group', ) name = django_filters.CharFilter( name='name', lookup_type='icontains', label='Name', ) vid = django_filters.NumberFilter( name='vid', label='VLAN number (1-4095)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) role_id = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) class Meta: model = VLAN fields = [ 'site_id', 'site', 'vid', 'name', 'status', 'role_id', 'role' ] def search(self, queryset, value): qs_filter = Q(name__icontains=value) | Q(description__icontains=value) try: qs_filter |= Q(vid=int(value)) except ValueError: pass return queryset.filter(qs_filter)
class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): q = django_filters.MethodFilter( action='search', label='Search', ) provider_id = django_filters.ModelMultipleChoiceFilter( name='provider', queryset=Provider.objects.all(), label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( name='provider', queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', ) type_id = django_filters.ModelMultipleChoiceFilter( name='type', queryset=CircuitType.objects.all(), label='Circuit type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( name='type', queryset=CircuitType.objects.all(), to_field_name='slug', label='Circuit type (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) class Meta: model = Circuit fields = [ 'q', 'provider_id', 'provider', 'type_id', 'type', 'site_id', 'site', 'interface', 'install_date' ] def search(self, queryset, value): return queryset.filter( Q(cid__icontains=value) | Q(xconnect_id__icontains=value) | Q(pp_info__icontains=value) | Q(comments__icontains=value))
class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) provider_id = django_filters.ModelMultipleChoiceFilter( name='provider', queryset=Provider.objects.all(), label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( name='provider__slug', queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', ) type_id = django_filters.ModelMultipleChoiceFilter( name='type', queryset=CircuitType.objects.all(), label='Circuit type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( name='type__slug', queryset=CircuitType.objects.all(), to_field_name='slug', label='Circuit type (slug)', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( name='terminations__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( name='terminations__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) class Meta: model = Circuit fields = ['install_date'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(cid__icontains=value) | Q(terminations__xconnect_id__icontains=value) | Q(terminations__pp_info__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value)).distinct()
class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): id__in = NumericInFilter(name='id', lookup_expr='in') q = django_filters.CharFilter( method='search', label='Search', ) site_id = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), label='Site (ID)', ) site = NullableModelMultipleChoiceFilter( name='site', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = NullableModelMultipleChoiceFilter( name='group', queryset=VLANGroup.objects.all(), label='Group (ID)', ) group = NullableModelMultipleChoiceFilter( name='group', queryset=VLANGroup.objects.all(), to_field_name='slug', label='Group', ) tenant_id = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = NullableModelMultipleChoiceFilter( name='tenant', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) role_id = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), label='Role (ID)', ) role = NullableModelMultipleChoiceFilter( name='role', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) status = django_filters.MultipleChoiceFilter(choices=VLAN_STATUS_CHOICES) class Meta: model = VLAN fields = ['name', 'vid'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q(description__icontains=value) try: qs_filter |= Q(vid=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)