@@ -104,27 +104,6 @@ class SegmentFilter(NetBoxModelFilterMixin):
104104 # Custom filter for checking if segment has type-specific data
105105 has_type_specific_data : Optional [bool ] = None
106106
107- # Type-specific field filters - Dark Fiber
108- fiber_type : FilterLookup [str ] | None = None
109- fiber_attenuation_max : Optional [TypeSpecificNumericFilter ] = None
110- total_loss : Optional [TypeSpecificNumericFilter ] = None
111- total_length : Optional [TypeSpecificNumericFilter ] = None
112- number_of_fibers : Optional [TypeSpecificIntegerFilter ] = None
113- connector_type : FilterLookup [str ] | None = None
114-
115- # Type-specific field filters - Optical Spectrum
116- wavelength : Optional [TypeSpecificNumericFilter ] = None
117- spectral_slot_width : Optional [TypeSpecificNumericFilter ] = None
118- itu_grid_position : Optional [TypeSpecificIntegerFilter ] = None
119- modulation_format : FilterLookup [str ] | None = None
120-
121- # Type-specific field filters - Ethernet Service
122- port_speed : Optional [TypeSpecificIntegerFilter ] = None
123- vlan_id : Optional [TypeSpecificIntegerFilter ] = None
124- mtu_size : Optional [TypeSpecificIntegerFilter ] = None
125- encapsulation_type : FilterLookup [str ] | None = None
126- interface_type : FilterLookup [str ] | None = None
127-
128107 def filter_has_path_data (self , queryset , info ):
129108 if self .has_path_data is None :
130109 return queryset
@@ -141,167 +120,6 @@ def filter_has_type_specific_data(self, queryset, info):
141120 else :
142121 return queryset .filter (type_specific_data = {})
143122
144- def filter_fiber_type (self , queryset , info ):
145- if self .fiber_type is None :
146- return queryset
147- return queryset .filter (type_specific_data__fiber_type = self .fiber_type )
148-
149- def filter_connector_type (self , queryset , info ):
150- if self .connector_type is None :
151- return queryset
152- return queryset .filter (type_specific_data__connector_type = self .connector_type )
153-
154- def filter_modulation_format (self , queryset , info ):
155- if self .modulation_format is None :
156- return queryset
157- return queryset .filter (type_specific_data__modulation_format = self .modulation_format )
158-
159- def filter_encapsulation_type (self , queryset , info ):
160- if self .encapsulation_type is None :
161- return queryset
162- return queryset .filter (type_specific_data__encapsulation_type = self .encapsulation_type )
163-
164- def filter_interface_type (self , queryset , info ):
165- if self .interface_type is None :
166- return queryset
167- return queryset .filter (type_specific_data__interface_type = self .interface_type )
168-
169- def _filter_numeric_field (self , queryset , field_name : str , filter_input : TypeSpecificNumericFilter ):
170- """Helper method to filter numeric type-specific fields"""
171- if filter_input is None :
172- return queryset
173-
174- conditions = Q (type_specific_data__has_key = field_name )
175-
176- if filter_input .exact is not None :
177- conditions &= Q (
178- pk__in = queryset .extra (
179- where = ["(type_specific_data->>%s)::decimal = %s" ], params = [field_name , filter_input .exact ]
180- ).values ("pk" )
181- )
182-
183- if filter_input .gt is not None :
184- conditions &= Q (
185- pk__in = queryset .extra (
186- where = ["(type_specific_data->>%s)::decimal > %s" ], params = [field_name , filter_input .gt ]
187- ).values ("pk" )
188- )
189-
190- if filter_input .gte is not None :
191- conditions &= Q (
192- pk__in = queryset .extra (
193- where = ["(type_specific_data->>%s)::decimal >= %s" ], params = [field_name , filter_input .gte ]
194- ).values ("pk" )
195- )
196-
197- if filter_input .lt is not None :
198- conditions &= Q (
199- pk__in = queryset .extra (
200- where = ["(type_specific_data->>%s)::decimal < %s" ], params = [field_name , filter_input .lt ]
201- ).values ("pk" )
202- )
203-
204- if filter_input .lte is not None :
205- conditions &= Q (
206- pk__in = queryset .extra (
207- where = ["(type_specific_data->>%s)::decimal <= %s" ], params = [field_name , filter_input .lte ]
208- ).values ("pk" )
209- )
210-
211- if filter_input .range_min is not None and filter_input .range_max is not None :
212- conditions &= Q (
213- pk__in = queryset .extra (
214- where = ["(type_specific_data->>%s)::decimal BETWEEN %s AND %s" ],
215- params = [field_name , filter_input .range_min , filter_input .range_max ],
216- ).values ("pk" )
217- )
218-
219- return queryset .filter (conditions )
220-
221- def _filter_integer_field (self , queryset , field_name : str , filter_input : TypeSpecificIntegerFilter ):
222- """Helper method to filter integer type-specific fields"""
223- if filter_input is None :
224- return queryset
225-
226- conditions = Q (type_specific_data__has_key = field_name )
227-
228- if filter_input .exact is not None :
229- conditions &= Q (
230- pk__in = queryset .extra (
231- where = ["(type_specific_data->>%s)::integer = %s" ], params = [field_name , filter_input .exact ]
232- ).values ("pk" )
233- )
234-
235- if filter_input .gt is not None :
236- conditions &= Q (
237- pk__in = queryset .extra (
238- where = ["(type_specific_data->>%s)::integer > %s" ], params = [field_name , filter_input .gt ]
239- ).values ("pk" )
240- )
241-
242- if filter_input .gte is not None :
243- conditions &= Q (
244- pk__in = queryset .extra (
245- where = ["(type_specific_data->>%s)::integer >= %s" ], params = [field_name , filter_input .gte ]
246- ).values ("pk" )
247- )
248-
249- if filter_input .lt is not None :
250- conditions &= Q (
251- pk__in = queryset .extra (
252- where = ["(type_specific_data->>%s)::integer < %s" ], params = [field_name , filter_input .lt ]
253- ).values ("pk" )
254- )
255-
256- if filter_input .lte is not None :
257- conditions &= Q (
258- pk__in = queryset .extra (
259- where = ["(type_specific_data->>%s)::integer <= %s" ], params = [field_name , filter_input .lte ]
260- ).values ("pk" )
261- )
262-
263- if filter_input .range_min is not None and filter_input .range_max is not None :
264- conditions &= Q (
265- pk__in = queryset .extra (
266- where = ["(type_specific_data->>%s)::integer BETWEEN %s AND %s" ],
267- params = [field_name , filter_input .range_min , filter_input .range_max ],
268- ).values ("pk" )
269- )
270-
271- return queryset .filter (conditions )
272-
273- # Apply filters for numeric fields
274- def filter_fiber_attenuation_max (self , queryset , info ):
275- return self ._filter_numeric_field (queryset , "fiber_attenuation_max" , self .fiber_attenuation_max )
276-
277- def filter_total_loss (self , queryset , info ):
278- return self ._filter_numeric_field (queryset , "total_loss" , self .total_loss )
279-
280- def filter_total_length (self , queryset , info ):
281- return self ._filter_numeric_field (queryset , "total_length" , self .total_length )
282-
283- def filter_wavelength (self , queryset , info ):
284- return self ._filter_numeric_field (queryset , "wavelength" , self .wavelength )
285-
286- def filter_spectral_slot_width (self , queryset , info ):
287- return self ._filter_numeric_field (queryset , "spectral_slot_width" , self .spectral_slot_width )
288-
289- # Apply filters for integer fields
290- def filter_number_of_fibers (self , queryset , info ):
291- return self ._filter_integer_field (queryset , "number_of_fibers" , self .number_of_fibers )
292-
293- def filter_itu_grid_position (self , queryset , info ):
294- return self ._filter_integer_field (queryset , "itu_grid_position" , self .itu_grid_position )
295-
296- def filter_port_speed (self , queryset , info ):
297- return self ._filter_integer_field (queryset , "port_speed" , self .port_speed )
298-
299- def filter_vlan_id (self , queryset , info ):
300- return self ._filter_integer_field (queryset , "vlan_id" , self .vlan_id )
301-
302- def filter_mtu_size (self , queryset , info ):
303- return self ._filter_integer_field (queryset , "mtu_size" , self .mtu_size )
304-
305123
306124@strawberry_django .filter (ServicePath , lookups = True )
307125class ServicePathFilter (NetBoxModelFilterMixin ):
0 commit comments