Coverage for core/forms/filtersets.py: 100%

53 statements  

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

1from django import forms 

2from django.utils.translation import gettext_lazy as _ 

3 

4from core.choices import * 

5from core.models import * 

6from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm 

7from netbox.forms.mixins import SavedFiltersMixin 

8from netbox.utils import get_data_backend_choices 

9from users.models import User 

10from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice 

11from utilities.forms.fields import ( 

12 ContentTypeChoiceField, 

13 ContentTypeMultipleChoiceField, 

14 DynamicModelMultipleChoiceField, 

15 TagFilterField, 

16) 

17from utilities.forms.rendering import FieldSet 

18from utilities.forms.widgets import DateTimePicker 

19 

20__all__ = ( 

21 'ConfigRevisionFilterForm', 

22 'DataFileFilterForm', 

23 'DataSourceFilterForm', 

24 'JobFilterForm', 

25 'ObjectChangeFilterForm', 

26) 

27 

28 

29class DataSourceFilterForm(PrimaryModelFilterSetForm): 

30 model = DataSource 

31 fieldsets = ( 

32 FieldSet('q', 'filter_id', 'tag'), 

33 FieldSet('type', 'status', 'enabled', 'sync_interval', name=_('Data Source')), 

34 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')), 

35 ) 

36 type = forms.MultipleChoiceField( 

37 label=_('Type'), 

38 choices=get_data_backend_choices, 

39 required=False 

40 ) 

41 status = forms.MultipleChoiceField( 

42 label=_('Status'), 

43 choices=DataSourceStatusChoices, 

44 required=False 

45 ) 

46 enabled = forms.NullBooleanField( 

47 label=_('Enabled'), 

48 required=False, 

49 widget=forms.Select( 

50 choices=BOOLEAN_WITH_BLANK_CHOICES 

51 ) 

52 ) 

53 sync_interval = forms.ChoiceField( 

54 label=_('Sync interval'), 

55 choices=JobIntervalChoices, 

56 required=False 

57 ) 

58 tag = TagFilterField(model) 

59 

60 

61class DataFileFilterForm(NetBoxModelFilterSetForm): 

62 model = DataFile 

63 fieldsets = ( 

64 FieldSet('q', 'filter_id'), 

65 FieldSet('source_id', name=_('File')), 

66 ) 

67 source_id = DynamicModelMultipleChoiceField( 

68 queryset=DataSource.objects.all(), 

69 required=False, 

70 label=_('Data source') 

71 ) 

72 

73 

74class JobFilterForm(SavedFiltersMixin, FilterForm): 

75 model = Job 

76 fieldsets = ( 

77 FieldSet('q', 'filter_id'), 

78 FieldSet('object_type_id', 'status', 'queue_name', 'user_id', name=_('Attributes')), 

79 FieldSet( 

80 'created__before', 'created__after', 'scheduled__before', 'scheduled__after', 'started__before', 

81 'started__after', 'completed__before', 'completed__after', name=_('Scheduling') 

82 ), 

83 FieldSet('execution_time__gte', 'execution_time__lte', name=_('Execution')), 

84 ) 

85 object_type_id = ContentTypeChoiceField( 

86 label=_('Object Type'), 

87 queryset=ObjectType.objects.with_feature('jobs'), 

88 required=False, 

89 ) 

90 status = forms.MultipleChoiceField( 

91 label=_('Status'), 

92 choices=JobStatusChoices, 

93 required=False 

94 ) 

95 queue_name = forms.CharField( 

96 label=_('Queue'), 

97 required=False 

98 ) 

99 created__after = forms.DateTimeField( 

100 label=_('Created after'), 

101 required=False, 

102 widget=DateTimePicker() 

103 ) 

104 created__before = forms.DateTimeField( 

105 label=_('Created before'), 

106 required=False, 

107 widget=DateTimePicker() 

108 ) 

109 scheduled__after = forms.DateTimeField( 

110 label=_('Scheduled after'), 

111 required=False, 

112 widget=DateTimePicker() 

113 ) 

114 scheduled__before = forms.DateTimeField( 

115 label=_('Scheduled before'), 

116 required=False, 

117 widget=DateTimePicker() 

118 ) 

119 started__after = forms.DateTimeField( 

120 label=_('Started after'), 

121 required=False, 

122 widget=DateTimePicker() 

123 ) 

124 started__before = forms.DateTimeField( 

125 label=_('Started before'), 

126 required=False, 

127 widget=DateTimePicker() 

128 ) 

129 completed__after = forms.DateTimeField( 

130 label=_('Completed after'), 

131 required=False, 

132 widget=DateTimePicker() 

133 ) 

134 completed__before = forms.DateTimeField( 

135 label=_('Completed before'), 

136 required=False, 

137 widget=DateTimePicker() 

138 ) 

139 user_id = DynamicModelMultipleChoiceField( 

140 queryset=User.objects.all(), 

141 required=False, 

142 label=_('User') 

143 ) 

144 execution_time__gte = forms.DurationField( 

145 label=_('Execution time (minimum)'), 

146 required=False, 

147 help_text=_('Seconds, or HH:MM:SS') 

148 ) 

149 execution_time__lte = forms.DurationField( 

150 label=_('Execution time (maximum)'), 

151 required=False, 

152 help_text=_('Seconds, or HH:MM:SS') 

153 ) 

154 

155 

156class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm): 

157 model = ObjectChange 

158 fieldsets = ( 

159 FieldSet('q', 'filter_id'), 

160 FieldSet('time_before', 'time_after', name=_('Time')), 

161 FieldSet('action', 'user_id', 'changed_object_type_id', name=_('Attributes')), 

162 ) 

163 time_after = forms.DateTimeField( 

164 required=False, 

165 label=_('After'), 

166 widget=DateTimePicker() 

167 ) 

168 time_before = forms.DateTimeField( 

169 required=False, 

170 label=_('Before'), 

171 widget=DateTimePicker() 

172 ) 

173 action = forms.ChoiceField( 

174 label=_('Action'), 

175 choices=add_blank_choice(ObjectChangeActionChoices), 

176 required=False 

177 ) 

178 user_id = DynamicModelMultipleChoiceField( 

179 queryset=User.objects.all(), 

180 required=False, 

181 label=_('User') 

182 ) 

183 changed_object_type_id = ContentTypeMultipleChoiceField( 

184 queryset=ObjectType.objects.with_feature('change_logging'), 

185 required=False, 

186 label=_('Object Type'), 

187 ) 

188 

189 

190class ConfigRevisionFilterForm(SavedFiltersMixin, FilterForm): 

191 model = ConfigRevision 

192 fieldsets = ( 

193 FieldSet('q', 'filter_id'), 

194 )