Coverage for wireless/filtersets.py: 79%

54 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1import django_filters 

2from django.db.models import Q 

3 

4from dcim.base_filtersets import ScopedFilterSet 

5from dcim.choices import LinkStatusChoices 

6from dcim.models import Interface 

7from ipam.models import VLAN 

8from netbox.filtersets import NestedGroupModelFilterSet, PrimaryModelFilterSet 

9from tenancy.filtersets import TenancyFilterSet 

10from utilities.filters import TreeNodeMultipleChoiceFilter 

11from utilities.filtersets import register_filterset 

12 

13from .choices import * 

14from .models import * 

15 

16__all__ = ( 

17 'WirelessLANFilterSet', 

18 'WirelessLANGroupFilterSet', 

19 'WirelessLinkFilterSet', 

20) 

21 

22 

23@register_filterset 

24class WirelessLANGroupFilterSet(NestedGroupModelFilterSet): 

25 parent_id = django_filters.ModelMultipleChoiceFilter( 

26 queryset=WirelessLANGroup.objects.all(), 

27 distinct=False, 

28 ) 

29 parent = django_filters.ModelMultipleChoiceFilter( 

30 field_name='parent__slug', 

31 queryset=WirelessLANGroup.objects.all(), 

32 distinct=False, 

33 to_field_name='slug' 

34 ) 

35 ancestor_id = TreeNodeMultipleChoiceFilter( 

36 queryset=WirelessLANGroup.objects.all(), 

37 field_name='parent', 

38 lookup_expr='in' 

39 ) 

40 ancestor = TreeNodeMultipleChoiceFilter( 

41 queryset=WirelessLANGroup.objects.all(), 

42 field_name='parent', 

43 lookup_expr='in', 

44 to_field_name='slug' 

45 ) 

46 

47 class Meta: 

48 model = WirelessLANGroup 

49 fields = ('id', 'name', 'slug', 'description') 

50 

51 

52@register_filterset 

53class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet): 

54 group_id = TreeNodeMultipleChoiceFilter( 

55 queryset=WirelessLANGroup.objects.all(), 

56 field_name='group', 

57 lookup_expr='in' 

58 ) 

59 group = TreeNodeMultipleChoiceFilter( 

60 queryset=WirelessLANGroup.objects.all(), 

61 field_name='group', 

62 lookup_expr='in', 

63 to_field_name='slug' 

64 ) 

65 status = django_filters.MultipleChoiceFilter( 

66 choices=WirelessLANStatusChoices, 

67 distinct=False, 

68 ) 

69 vlan_id = django_filters.ModelMultipleChoiceFilter( 

70 queryset=VLAN.objects.all(), 

71 distinct=False, 

72 ) 

73 interface_id = django_filters.ModelMultipleChoiceFilter( 

74 queryset=Interface.objects.all(), 

75 field_name='interfaces' 

76 ) 

77 auth_type = django_filters.MultipleChoiceFilter( 

78 choices=WirelessAuthTypeChoices, 

79 distinct=False, 

80 ) 

81 auth_cipher = django_filters.MultipleChoiceFilter( 

82 choices=WirelessAuthCipherChoices, 

83 distinct=False, 

84 ) 

85 

86 class Meta: 

87 model = WirelessLAN 

88 fields = ('id', 'ssid', 'auth_psk', 'scope_id', 'description') 

89 

90 def search(self, queryset, name, value): 

91 if not value.strip(): 

92 return queryset 

93 qs_filter = ( 

94 Q(ssid__icontains=value) | 

95 Q(description__icontains=value) 

96 ) 

97 return queryset.filter(qs_filter) 

98 

99 

100@register_filterset 

101class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet): 

102 interface_a_id = django_filters.ModelMultipleChoiceFilter( 

103 queryset=Interface.objects.all(), 

104 distinct=False, 

105 ) 

106 interface_b_id = django_filters.ModelMultipleChoiceFilter( 

107 queryset=Interface.objects.all(), 

108 distinct=False, 

109 ) 

110 status = django_filters.MultipleChoiceFilter( 

111 choices=LinkStatusChoices, 

112 distinct=False, 

113 ) 

114 auth_type = django_filters.MultipleChoiceFilter( 

115 choices=WirelessAuthTypeChoices, 

116 distinct=False, 

117 ) 

118 auth_cipher = django_filters.MultipleChoiceFilter( 

119 choices=WirelessAuthCipherChoices, 

120 distinct=False, 

121 ) 

122 

123 class Meta: 

124 model = WirelessLink 

125 fields = ('id', 'ssid', 'auth_psk', 'distance', 'distance_unit', 'description') 

126 

127 def search(self, queryset, name, value): 

128 if not value.strip(): 

129 return queryset 

130 qs_filter = ( 

131 Q(ssid__icontains=value) | 

132 Q(description__icontains=value) 

133 ) 

134 return queryset.filter(qs_filter)