Coverage for circuits/graphql/filters.py: 94%
102 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from typing import TYPE_CHECKING, Annotated
3import strawberry
4import strawberry_django
5from strawberry.scalars import ID
6from strawberry_django import BaseFilterLookup, DateFilterLookup, StrFilterLookup
8from circuits import models
9from circuits.graphql.filter_mixins import CircuitTypeFilterMixin
10from dcim.graphql.filter_mixins import CabledObjectModelFilterMixin
11from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin
12from netbox.graphql.filter_mixins import DistanceFilterMixin, ImageAttachmentFilterMixin
13from netbox.graphql.filters import (
14 ChangeLoggedModelFilter,
15 OrganizationalModelFilter,
16 PrimaryModelFilter,
17 register_filter,
18)
19from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
21if TYPE_CHECKING: 21 ↛ 22line 21 didn't jump to line 22 because the condition on line 21 was never true
22 from core.graphql.filters import ContentTypeFilter
23 from dcim.graphql.filters import InterfaceFilter, LocationFilter, RegionFilter, SiteFilter, SiteGroupFilter
24 from ipam.graphql.filters import ASNFilter
25 from netbox.graphql.filter_lookups import IntegerLookup
27 from .enums import *
29__all__ = (
30 'CircuitFilter',
31 'CircuitGroupAssignmentFilter',
32 'CircuitGroupFilter',
33 'CircuitTerminationFilter',
34 'CircuitTypeFilter',
35 'ProviderAccountFilter',
36 'ProviderFilter',
37 'ProviderNetworkFilter',
38 'VirtualCircuitFilter',
39 'VirtualCircuitTerminationFilter',
40 'VirtualCircuitTypeFilter',
41)
44@register_filter(models.CircuitTermination, lookups=True)
45class CircuitTerminationFilter(
46 CustomFieldsFilterMixin,
47 TagsFilterMixin,
48 ChangeLoggedModelFilter,
49 CabledObjectModelFilterMixin,
50):
51 circuit: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
52 strawberry_django.filter_field()
53 )
54 term_side: (
55 BaseFilterLookup[Annotated['CircuitTerminationSideEnum', strawberry.lazy('circuits.graphql.enums')]] | None
56 ) = (
57 strawberry_django.filter_field()
58 )
59 termination_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
60 strawberry_django.filter_field()
61 )
62 termination_id: ID | None = strawberry_django.filter_field()
63 port_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
64 strawberry_django.filter_field()
65 )
66 upstream_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
67 strawberry_django.filter_field()
68 )
69 xconnect_id: StrFilterLookup | None = strawberry_django.filter_field()
70 pp_info: StrFilterLookup | None = strawberry_django.filter_field()
71 description: StrFilterLookup | None = strawberry_django.filter_field()
73 # Cached relations
74 _provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
75 strawberry_django.filter_field(name='provider_network')
76 )
77 _location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
78 strawberry_django.filter_field(name='location')
79 )
80 _region: Annotated['RegionFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
81 strawberry_django.filter_field(name='region')
82 )
83 _site_group: Annotated['SiteGroupFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
84 strawberry_django.filter_field(name='site_group')
85 )
86 _site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
87 strawberry_django.filter_field(name='site')
88 )
91@register_filter(models.Circuit, lookups=True)
92class CircuitFilter(
93 ContactFilterMixin,
94 ImageAttachmentFilterMixin,
95 DistanceFilterMixin,
96 TenancyFilterMixin,
97 PrimaryModelFilter
98):
99 cid: StrFilterLookup | None = strawberry_django.filter_field()
100 provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
101 strawberry_django.filter_field()
102 )
103 provider_id: ID | None = strawberry_django.filter_field()
104 provider_account: Annotated['ProviderAccountFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
105 strawberry_django.filter_field()
106 )
107 provider_account_id: ID | None = strawberry_django.filter_field()
108 type: Annotated['CircuitTypeFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
109 strawberry_django.filter_field()
110 )
111 type_id: ID | None = strawberry_django.filter_field()
112 status: BaseFilterLookup[Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
113 strawberry_django.filter_field()
114 )
115 install_date: DateFilterLookup | None = strawberry_django.filter_field()
116 termination_date: DateFilterLookup | None = strawberry_django.filter_field()
117 commit_rate: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
118 strawberry_django.filter_field()
119 )
120 terminations: Annotated['CircuitTerminationFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
121 strawberry_django.filter_field()
122 )
125@register_filter(models.CircuitType, lookups=True)
126class CircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter):
127 pass
130@register_filter(models.CircuitGroup, lookups=True)
131class CircuitGroupFilter(TenancyFilterMixin, OrganizationalModelFilter):
132 pass
135@register_filter(models.CircuitGroupAssignment, lookups=True)
136class CircuitGroupAssignmentFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter):
137 member_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
138 strawberry_django.filter_field()
139 )
140 member_id: ID | None = strawberry_django.filter_field()
141 group: Annotated['CircuitGroupFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
142 strawberry_django.filter_field()
143 )
144 group_id: ID | None = strawberry_django.filter_field()
145 priority: BaseFilterLookup[Annotated['CircuitPriorityEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
146 strawberry_django.filter_field()
147 )
150@register_filter(models.Provider, lookups=True)
151class ProviderFilter(ContactFilterMixin, PrimaryModelFilter):
152 name: StrFilterLookup | None = strawberry_django.filter_field()
153 slug: StrFilterLookup | None = strawberry_django.filter_field()
154 asns: Annotated['ASNFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
155 circuits: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
156 strawberry_django.filter_field()
157 )
160@register_filter(models.ProviderAccount, lookups=True)
161class ProviderAccountFilter(ContactFilterMixin, PrimaryModelFilter):
162 provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
163 strawberry_django.filter_field()
164 )
165 provider_id: ID | None = strawberry_django.filter_field()
166 account: StrFilterLookup | None = strawberry_django.filter_field()
167 name: StrFilterLookup | None = strawberry_django.filter_field()
170@register_filter(models.ProviderNetwork, lookups=True)
171class ProviderNetworkFilter(PrimaryModelFilter):
172 name: StrFilterLookup | None = strawberry_django.filter_field()
173 provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
174 strawberry_django.filter_field()
175 )
176 provider_id: ID | None = strawberry_django.filter_field()
177 service_id: StrFilterLookup | None = strawberry_django.filter_field()
180@register_filter(models.VirtualCircuitType, lookups=True)
181class VirtualCircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter):
182 pass
185@register_filter(models.VirtualCircuit, lookups=True)
186class VirtualCircuitFilter(TenancyFilterMixin, PrimaryModelFilter):
187 cid: StrFilterLookup | None = strawberry_django.filter_field()
188 provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
189 strawberry_django.filter_field()
190 )
191 provider_network_id: ID | None = strawberry_django.filter_field()
192 provider_account: Annotated['ProviderAccountFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
193 strawberry_django.filter_field()
194 )
195 provider_account_id: ID | None = strawberry_django.filter_field()
196 type: Annotated['VirtualCircuitTypeFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
197 strawberry_django.filter_field()
198 )
199 type_id: ID | None = strawberry_django.filter_field()
200 status: BaseFilterLookup[Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
201 strawberry_django.filter_field()
202 )
203 group_assignments: Annotated['CircuitGroupAssignmentFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
204 strawberry_django.filter_field()
205 )
208@register_filter(models.VirtualCircuitTermination, lookups=True)
209class VirtualCircuitTerminationFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter):
210 virtual_circuit: Annotated['VirtualCircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
211 strawberry_django.filter_field()
212 )
213 virtual_circuit_id: ID | None = strawberry_django.filter_field()
214 role: (
215 BaseFilterLookup[
216 Annotated['VirtualCircuitTerminationRoleEnum', strawberry.lazy('circuits.graphql.enums')]
217 ] | None
218 ) = (
219 strawberry_django.filter_field()
220 )
221 interface: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
222 strawberry_django.filter_field()
223 )
224 interface_id: ID | None = strawberry_django.filter_field()
225 description: StrFilterLookup | None = strawberry_django.filter_field()