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

1from typing import TYPE_CHECKING, Annotated 

2 

3import strawberry 

4import strawberry_django 

5from strawberry.scalars import ID 

6from strawberry_django import BaseFilterLookup, DateFilterLookup, StrFilterLookup 

7 

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 

20 

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 

26 

27 from .enums import * 

28 

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) 

42 

43 

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() 

72 

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 ) 

89 

90 

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 ) 

123 

124 

125@register_filter(models.CircuitType, lookups=True) 

126class CircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter): 

127 pass 

128 

129 

130@register_filter(models.CircuitGroup, lookups=True) 

131class CircuitGroupFilter(TenancyFilterMixin, OrganizationalModelFilter): 

132 pass 

133 

134 

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 ) 

148 

149 

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 ) 

158 

159 

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() 

168 

169 

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() 

178 

179 

180@register_filter(models.VirtualCircuitType, lookups=True) 

181class VirtualCircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter): 

182 pass 

183 

184 

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 ) 

206 

207 

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()