class WirelessLANFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) group_id = TreeNodeMultipleChoiceFilter( queryset=WirelessLANGroup.objects.all(), field_name='group', lookup_expr='in') group = TreeNodeMultipleChoiceFilter( queryset=WirelessLANGroup.objects.all(), field_name='group', lookup_expr='in', to_field_name='slug') vlan_id = django_filters.ModelMultipleChoiceFilter( queryset=VLAN.objects.all()) auth_type = django_filters.MultipleChoiceFilter( choices=WirelessAuthTypeChoices) auth_cipher = django_filters.MultipleChoiceFilter( choices=WirelessAuthCipherChoices) tag = TagFilter() class Meta: model = WirelessLAN fields = ['id', 'ssid', 'auth_psk'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = (Q(ssid__icontains=value) | Q(description__icontains=value)) return queryset.filter(qs_filter)
class DeviceComponentFilterSet(django_filters.FilterSet): q = django_filters.CharFilter( method='search', label='Search', ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='device__site__group', lookup_expr='in', label='Site group (ID)', ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='device__site__group', lookup_expr='in', to_field_name='slug', label='Site group (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='device__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='device__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) tag = TagFilter() def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(label__icontains=value) | Q(description__icontains=value))
class ContactFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) group_id = TreeNodeMultipleChoiceFilter( queryset=ContactGroup.objects.all(), field_name='group', lookup_expr='in', label='Contact group (ID)', ) group = TreeNodeMultipleChoiceFilter( queryset=ContactGroup.objects.all(), field_name='group', lookup_expr='in', to_field_name='slug', label='Contact group (slug)', ) tag = TagFilter() class Meta: model = Contact fields = ['id', 'name', 'title', 'phone', 'email', 'address'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(title__icontains=value) | Q(phone__icontains=value) | Q(email__icontains=value) | Q(address__icontains=value) | Q(comments__icontains=value))
class ProviderNetworkFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) provider_id = django_filters.ModelMultipleChoiceFilter( queryset=Provider.objects.all(), label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( field_name='provider__slug', queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', ) tag = TagFilter() class Meta: model = ProviderNetwork fields = ['id', '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)).distinct()
class DummyFilterSet(BaseFilterSet): charfield = django_filters.CharFilter() macaddressfield = MACAddressFilter() modelchoicefield = django_filters.ModelChoiceFilter( field_name= 'integerfield', # We're pretending this is a ForeignKey field queryset=Site.objects.all()) modelmultiplechoicefield = django_filters.ModelMultipleChoiceFilter( field_name= 'integerfield', # We're pretending this is a ForeignKey field queryset=Site.objects.all()) multiplechoicefield = django_filters.MultipleChoiceFilter( field_name='choicefield') multivaluecharfield = MultiValueCharFilter(field_name='charfield') tagfield = TagFilter() treeforeignkeyfield = TreeNodeMultipleChoiceFilter( queryset=DummyModel.objects.all()) class Meta: model = DummyModel fields = ( 'charfield', 'choicefield', 'datefield', 'datetimefield', 'integerfield', 'macaddressfield', 'modelchoicefield', 'modelmultiplechoicefield', 'multiplechoicefield', 'tagfield', 'timefield', 'treeforeignkeyfield', )
class VLANGroupFilterSet(OrganizationalModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) scope_type = ContentTypeFilter() region = django_filters.NumberFilter(method='filter_scope') sitegroup = django_filters.NumberFilter(method='filter_scope') site = django_filters.NumberFilter(method='filter_scope') location = django_filters.NumberFilter(method='filter_scope') rack = django_filters.NumberFilter(method='filter_scope') clustergroup = django_filters.NumberFilter(method='filter_scope') cluster = django_filters.NumberFilter(method='filter_scope') tag = TagFilter() class Meta: model = VLANGroup fields = ['id', 'name', 'slug', 'description', 'scope_id'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = (Q(name__icontains=value) | Q(description__icontains=value)) return queryset.filter(qs_filter) def filter_scope(self, queryset, name, value): return queryset.filter(scope_type=ContentType.objects.get(model=name), scope_id=value)
class TenantFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) group_id = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name='group', lookup_expr='in', label='Tenant group (ID)', ) group = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name='group', lookup_expr='in', to_field_name='slug', label='Tenant group (slug)', ) tag = TagFilter() class Meta: model = Tenant fields = ['id', 'name', 'slug'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value))
class PowerPanelFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='site__group', lookup_expr='in', label='Site group (ID)', ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='site__group', lookup_expr='in', to_field_name='slug', label='Site group (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) location_id = TreeNodeMultipleChoiceFilter( queryset=Location.objects.all(), field_name='location', lookup_expr='in', label='Location (ID)', ) tag = TagFilter() class Meta: model = PowerPanel fields = ['id', 'name'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = ( Q(name__icontains=value) ) return queryset.filter(qs_filter)
class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet): 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( field_name='rack__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='rack__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) location_id = TreeNodeMultipleChoiceFilter( queryset=Location.objects.all(), field_name='rack__location', lookup_expr='in', label='Location (ID)', ) location = TreeNodeMultipleChoiceFilter( queryset=Location.objects.all(), field_name='rack__location', lookup_expr='in', to_field_name='slug', label='Location (slug)', ) user_id = django_filters.ModelMultipleChoiceFilter( queryset=User.objects.all(), label='User (ID)', ) user = django_filters.ModelMultipleChoiceFilter( field_name='user__username', queryset=User.objects.all(), to_field_name='username', label='User (name)', ) tag = TagFilter() class Meta: model = RackReservation fields = ['id', '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 RoleFilterSet(OrganizationalModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) tag = TagFilter() class Meta: model = Role fields = ['id', 'name', 'slug']
class ProviderFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='circuits__terminations__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='circuits__terminations__site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='circuits__terminations__site__group', lookup_expr='in', label='Site group (ID)', ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='circuits__terminations__site__group', lookup_expr='in', to_field_name='slug', label='Site group (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='circuits__terminations__site', queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( field_name='circuits__terminations__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) tag = TagFilter() class Meta: model = Provider fields = ['id', 'name', 'slug', 'asn', 'account'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(account__icontains=value) | Q(noc_contact__icontains=value) | Q(admin_contact__icontains=value) | Q(comments__icontains=value))
class WirelessLANGroupFilterSet(OrganizationalModelFilterSet): parent_id = django_filters.ModelMultipleChoiceFilter( queryset=WirelessLANGroup.objects.all()) parent = django_filters.ModelMultipleChoiceFilter( field_name='parent__slug', queryset=WirelessLANGroup.objects.all(), to_field_name='slug') tag = TagFilter() class Meta: model = WirelessLANGroup fields = ['id', 'name', 'slug', 'description']
class ServiceMappingFilter(PrimaryModelFilterSet, TenancyFilterSet): """Filter for template-compliance records.""" q = django_filters.CharFilter( method='search', label='Search device or service', ) device_type_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceType.objects.all(), label='Device type (ID)', ) role_id = django_filters.ModelMultipleChoiceFilter( field_name='device_role_id', queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='device_role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) device_model = django_filters.ModelMultipleChoiceFilter( field_name='device_type__slug', queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', ) status = django_filters.MultipleChoiceFilter( field_name='compliance__status', choices=ServiceComplianceChoices, null_value=None) tag = TagFilter() class Meta: model = Device fields = ['id', 'status', 'name', 'asset_tag', 'device_model'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(asset_tag__icontains=value.strip()) | Q(compliance__services__contains=value.strip().splitlines()) ).distinct()
class SecretFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) role_id = django_filters.ModelMultipleChoiceFilter( queryset=SecretRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', queryset=SecretRole.objects.all(), to_field_name='slug', label='Role (slug)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) device_id = django_filters.ModelMultipleChoiceFilter( field_name='device', queryset=Device.objects.all(), label='Device (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine (name)', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine', queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) tag = TagFilter() class Meta: model = Secret fields = ['id', 'name'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(device__name__icontains=value))
class TenantGroupFilterSet(OrganizationalModelFilterSet): parent_id = django_filters.ModelMultipleChoiceFilter( queryset=TenantGroup.objects.all(), label='Tenant group (ID)', ) parent = django_filters.ModelMultipleChoiceFilter( field_name='parent__slug', queryset=TenantGroup.objects.all(), to_field_name='slug', label='Tenant group (slug)', ) tag = TagFilter() class Meta: model = TenantGroup fields = ['id', 'name', 'slug', 'description']
class AggregateFilterSet(PrimaryModelFilterSet, TenancyFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) family = django_filters.NumberFilter(field_name='prefix', lookup_expr='family') prefix = django_filters.CharFilter( method='filter_prefix', label='Prefix', ) rir_id = django_filters.ModelMultipleChoiceFilter( queryset=RIR.objects.all(), label='RIR (ID)', ) rir = django_filters.ModelMultipleChoiceFilter( field_name='rir__slug', queryset=RIR.objects.all(), to_field_name='slug', label='RIR (slug)', ) tag = TagFilter() class Meta: model = Aggregate fields = ['id', 'date_added'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(description__icontains=value) try: prefix = str(netaddr.IPNetwork(value.strip()).cidr) qs_filter |= Q(prefix__net_contains_or_equals=prefix) except (AddrFormatError, ValueError): pass return queryset.filter(qs_filter) def filter_prefix(self, queryset, name, value): if not value.strip(): return queryset try: query = str(netaddr.IPNetwork(value).cidr) return queryset.filter(prefix=query) except (AddrFormatError, ValueError): return queryset.none()
class CableFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) termination_a_type = ContentTypeFilter() termination_a_id = MultiValueNumberFilter() termination_b_type = ContentTypeFilter() termination_b_id = MultiValueNumberFilter() type = django_filters.MultipleChoiceFilter(choices=CableTypeChoices) status = django_filters.MultipleChoiceFilter(choices=CableStatusChoices) color = django_filters.MultipleChoiceFilter(choices=ColorChoices) device_id = MultiValueNumberFilter(method='filter_device') device = MultiValueCharFilter(method='filter_device', field_name='device__name') rack_id = MultiValueNumberFilter(method='filter_device', field_name='device__rack_id') rack = MultiValueNumberFilter(method='filter_device', field_name='device__rack__name') site_id = MultiValueNumberFilter(method='filter_device', field_name='device__site_id') site = MultiValueNumberFilter(method='filter_device', field_name='device__site__slug') tenant_id = MultiValueNumberFilter(method='filter_device', field_name='device__tenant_id') tenant = MultiValueNumberFilter(method='filter_device', field_name='device__tenant__slug') tag = TagFilter() class Meta: model = Cable fields = [ 'id', 'label', 'length', 'length_unit', 'termination_a_id', 'termination_b_id' ] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter(label__icontains=value) def filter_device(self, queryset, name, value): queryset = queryset.filter( Q(**{'_termination_a_{}__in'.format(name): value}) | Q(**{'_termination_b_{}__in'.format(name): value})) return queryset
class VMInterfaceFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) cluster_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__cluster', queryset=Cluster.objects.all(), label='Cluster (ID)', ) cluster = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__cluster__name', queryset=Cluster.objects.all(), to_field_name='name', label='Cluster', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine', queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine', ) parent_id = django_filters.ModelMultipleChoiceFilter( field_name='parent', queryset=VMInterface.objects.all(), label='Parent interface (ID)', ) mac_address = MultiValueMACAddressFilter(label='MAC address', ) tag = TagFilter() class Meta: model = VMInterface fields = ['id', 'name', 'enabled', 'mtu'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value))
class BGPPeerGroupFilterSet(django_filters.FilterSet): q = django_filters.CharFilter( method='search', label='Search', ) tag = TagFilter() class Meta: model = BGPPeerGroup fields = ['name', 'description'] def search(self, queryset, name, value): """Perform the filtered search.""" if not value.strip(): return queryset qs_filter = ( Q(name__icontains=value) | Q(description__icontains=value) ) return queryset.filter(qs_filter)
class CommunityFilterSet(django_filters.FilterSet): q = django_filters.CharFilter( method='search', label='Search', ) tag = TagFilter() class Meta: model = Community fields = ['value', 'description', 'status', 'tenant'] def search(self, queryset, name, value): """Perform the filtered search.""" if not value.strip(): return queryset qs_filter = ( Q(id__icontains=value) | Q(value__icontains=value) | Q(description__icontains=value) ) return queryset.filter(qs_filter)
class VRFFilterSet(PrimaryModelFilterSet, TenancyFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) import_target_id = django_filters.ModelMultipleChoiceFilter( field_name='import_targets', queryset=RouteTarget.objects.all(), label='Import target', ) import_target = django_filters.ModelMultipleChoiceFilter( field_name='import_targets__name', queryset=RouteTarget.objects.all(), to_field_name='name', label='Import target (name)', ) export_target_id = django_filters.ModelMultipleChoiceFilter( field_name='export_targets', queryset=RouteTarget.objects.all(), label='Export target', ) export_target = django_filters.ModelMultipleChoiceFilter( field_name='export_targets__name', queryset=RouteTarget.objects.all(), to_field_name='name', label='Export target (name)', ) tag = TagFilter() 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 = ['id', 'name', 'rd', 'enforce_unique']
class FHRPGroupFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) protocol = django_filters.MultipleChoiceFilter( choices=FHRPGroupProtocolChoices) auth_type = django_filters.MultipleChoiceFilter( choices=FHRPGroupAuthTypeChoices) related_ip = django_filters.ModelMultipleChoiceFilter( queryset=IPAddress.objects.all(), method='filter_related_ip') tag = TagFilter() class Meta: model = FHRPGroup fields = ['id', 'group_id', 'auth_key'] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter(Q(description__icontains=value)) def filter_related_ip(self, queryset, name, value): """ Filter by VRF & prefix of assigned IP addresses. """ ip_filter = Q() for ipaddress in value: if ipaddress.vrf: q = Q(ip_addresses__address__net_contained_or_equal=ipaddress. address, ip_addresses__vrf=ipaddress.vrf) else: q = Q(ip_addresses__address__net_contained_or_equal=ipaddress. address, ip_addresses__vrf__isnull=True) ip_filter |= q return queryset.filter(ip_filter)
class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) importing_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name='importing_vrfs', queryset=VRF.objects.all(), label='Importing VRF', ) importing_vrf = django_filters.ModelMultipleChoiceFilter( field_name='importing_vrfs__rd', queryset=VRF.objects.all(), to_field_name='rd', label='Import VRF (RD)', ) exporting_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name='exporting_vrfs', queryset=VRF.objects.all(), label='Exporting VRF', ) exporting_vrf = django_filters.ModelMultipleChoiceFilter( field_name='exporting_vrfs__rd', queryset=VRF.objects.all(), to_field_name='rd', label='Export VRF (RD)', ) tag = TagFilter() def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value)) class Meta: model = RouteTarget fields = ['id', 'name']
class ServiceFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine (name)', ) port = NumericArrayFilter(field_name='ports', lookup_expr='contains') tag = TagFilter() class Meta: model = Service fields = ['id', 'name', 'protocol'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q(description__icontains=value) return queryset.filter(qs_filter)
class WirelessLinkFilterSet(PrimaryModelFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) interface_a_id = MultiValueNumberFilter() interface_b_id = MultiValueNumberFilter() status = django_filters.MultipleChoiceFilter(choices=LinkStatusChoices) auth_type = django_filters.MultipleChoiceFilter( choices=WirelessAuthTypeChoices) auth_cipher = django_filters.MultipleChoiceFilter( choices=WirelessAuthCipherChoices) tag = TagFilter() class Meta: model = WirelessLink fields = ['id', 'ssid', 'auth_psk'] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = (Q(ssid__icontains=value) | Q(description__icontains=value)) return queryset.filter(qs_filter)
class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) provider_id = django_filters.ModelMultipleChoiceFilter( queryset=Provider.objects.all(), label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( field_name='provider__slug', queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', ) provider_network_id = django_filters.ModelMultipleChoiceFilter( field_name='terminations__provider_network', queryset=ProviderNetwork.objects.all(), label='ProviderNetwork (ID)', ) type_id = django_filters.ModelMultipleChoiceFilter( queryset=CircuitType.objects.all(), label='Circuit type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( field_name='type__slug', queryset=CircuitType.objects.all(), to_field_name='slug', label='Circuit type (slug)', ) status = django_filters.MultipleChoiceFilter(choices=CircuitStatusChoices, null_value=None) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='terminations__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='terminations__site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='terminations__site__group', lookup_expr='in', label='Site group (ID)', ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='terminations__site__group', lookup_expr='in', to_field_name='slug', label='Site group (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='terminations__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='terminations__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) tag = TagFilter() class Meta: model = Circuit fields = ['id', 'cid', 'install_date', 'commit_rate'] 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(terminations__description__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value)).distinct()
class CircuitTypeFilterSet(OrganizationalModelFilterSet): tag = TagFilter() class Meta: model = CircuitType fields = ['id', 'name', 'slug']
class DeviceFilterSet(PrimaryModelFilterSet, TenancyFilterSet, LocalConfigContextFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name='device_type__manufacturer', queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_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( field_name='device_role_id', queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='device_role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label='Platform (ID)', ) platform = django_filters.ModelMultipleChoiceFilter( field_name='platform__slug', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='site__group', lookup_expr='in', label='Site group (ID)', ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), field_name='site__group', lookup_expr='in', to_field_name='slug', label='Site group (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) location_id = TreeNodeMultipleChoiceFilter( queryset=Location.objects.all(), field_name='location', lookup_expr='in', label='Location (ID)', ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name='rack', queryset=Rack.objects.all(), label='Rack (ID)', ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label='VM cluster (ID)', ) model = django_filters.ModelMultipleChoiceFilter( field_name='device_type__slug', queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', ) status = django_filters.MultipleChoiceFilter(choices=DeviceStatusChoices, null_value=None) is_full_depth = django_filters.BooleanFilter( field_name='device_type__is_full_depth', label='Is full depth', ) mac_address = MultiValueMACAddressFilter( field_name='interfaces__mac_address', label='MAC address', ) serial = django_filters.CharFilter(lookup_expr='iexact') has_primary_ip = django_filters.BooleanFilter( method='_has_primary_ip', label='Has a primary IP', ) virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_chassis', queryset=VirtualChassis.objects.all(), label='Virtual chassis (ID)', ) virtual_chassis_member = django_filters.BooleanFilter( method='_virtual_chassis_member', label='Is a virtual chassis member') console_ports = django_filters.BooleanFilter( method='_console_ports', label='Has console ports', ) console_server_ports = django_filters.BooleanFilter( method='_console_server_ports', label='Has console server ports', ) power_ports = django_filters.BooleanFilter( method='_power_ports', label='Has power ports', ) power_outlets = django_filters.BooleanFilter( method='_power_outlets', label='Has power outlets', ) interfaces = django_filters.BooleanFilter( method='_interfaces', label='Has interfaces', ) pass_through_ports = django_filters.BooleanFilter( method='_pass_through_ports', label='Has pass-through ports', ) device_bays = django_filters.BooleanFilter( method='_device_bays', label='Has device bays', ) tag = TagFilter() class Meta: model = Device fields = [ 'id', 'name', 'asset_tag', 'face', 'position', 'vc_position', 'vc_priority' ] 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(inventoryitems__serial__icontains=value.strip()) | Q(asset_tag__icontains=value.strip()) | Q(comments__icontains=value)).distinct() def _has_primary_ip(self, queryset, name, value): params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False) if value: return queryset.filter(params) return queryset.exclude(params) def _virtual_chassis_member(self, queryset, name, value): return queryset.exclude(virtual_chassis__isnull=value) def _console_ports(self, queryset, name, value): return queryset.exclude(consoleports__isnull=value) def _console_server_ports(self, queryset, name, value): return queryset.exclude(consoleserverports__isnull=value) def _power_ports(self, queryset, name, value): return queryset.exclude(powerports__isnull=value) def _power_outlets(self, queryset, name, value): return queryset.exclude(poweroutlets__isnull=value) def _interfaces(self, queryset, name, value): return queryset.exclude(interfaces__isnull=value) def _pass_through_ports(self, queryset, name, value): return queryset.exclude(frontports__isnull=value, rearports__isnull=value) def _device_bays(self, queryset, name, value): return queryset.exclude(devicebays__isnull=value)
class InterfaceFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet): q = django_filters.CharFilter( method='search', label='Search', ) # Override device and device_id filters from DeviceComponentFilterSet to match against any peer virtual chassis # members device = MultiValueCharFilter( method='filter_device', field_name='name', label='Device', ) device_id = MultiValueNumberFilter( method='filter_device_id', field_name='pk', label='Device (ID)', ) kind = django_filters.CharFilter( method='filter_kind', label='Kind of interface', ) parent_id = django_filters.ModelMultipleChoiceFilter( field_name='parent', queryset=Interface.objects.all(), label='Parent interface (ID)', ) lag_id = django_filters.ModelMultipleChoiceFilter( field_name='lag', queryset=Interface.objects.all(), label='LAG interface (ID)', ) mac_address = MultiValueMACAddressFilter() tag = TagFilter() vlan_id = django_filters.CharFilter(method='filter_vlan_id', label='Assigned VLAN') vlan = django_filters.CharFilter(method='filter_vlan', label='Assigned VID') type = django_filters.MultipleChoiceFilter(choices=InterfaceTypeChoices, null_value=None) class Meta: model = Interface fields = [ 'id', 'name', 'label', 'type', 'enabled', 'mtu', 'mgmt_only', 'mode', 'description' ] def filter_device(self, queryset, name, value): try: devices = Device.objects.filter(**{'{}__in'.format(name): value}) vc_interface_ids = [] for device in devices: vc_interface_ids.extend(device.vc_interfaces().values_list( 'id', flat=True)) return queryset.filter(pk__in=vc_interface_ids) except Device.DoesNotExist: return queryset.none() def filter_device_id(self, queryset, name, id_list): # Include interfaces belonging to peer virtual chassis members vc_interface_ids = [] try: devices = Device.objects.filter(pk__in=id_list) for device in devices: vc_interface_ids += device.vc_interfaces().values_list( 'id', flat=True) return queryset.filter(pk__in=vc_interface_ids) except Device.DoesNotExist: return queryset.none() 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)) 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)) def filter_kind(self, queryset, name, value): value = value.strip().lower() return { 'physical': queryset.exclude(type__in=NONCONNECTABLE_IFACE_TYPES), 'virtual': queryset.filter(type__in=VIRTUAL_IFACE_TYPES), 'wireless': queryset.filter(type__in=WIRELESS_IFACE_TYPES), }.get(value, queryset.none())
class ContactRoleFilterSet(OrganizationalModelFilterSet): tag = TagFilter() class Meta: model = ContactRole fields = ['id', 'name', 'slug']