Coverage for virtualization/graphql/filters.py: 93%

85 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, ComparisonFilterLookup, FilterLookup, StrFilterLookup 

7 

8from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin 

9from extras.graphql.filter_mixins import ConfigContextFilterMixin 

10from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin 

11from netbox.graphql.filters import NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter, register_filter 

12from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin 

13from virtualization import models 

14from virtualization.graphql.filter_mixins import VMComponentFilterMixin 

15 

16if TYPE_CHECKING: 16 ↛ 17line 16 didn't jump to line 17 because the condition on line 16 was never true

17 from dcim.graphql.filters import DeviceFilter, DeviceRoleFilter, MACAddressFilter, PlatformFilter, SiteFilter 

18 from ipam.graphql.filters import ( 

19 FHRPGroupAssignmentFilter, 

20 IPAddressFilter, 

21 ServiceFilter, 

22 VLANGroupFilter, 

23 VRFFilter, 

24 ) 

25 from netbox.graphql.filter_lookups import FloatLookup, IntegerLookup 

26 from vpn.graphql.filters import L2VPNFilter, TunnelTerminationFilter 

27 

28 from .enums import * 

29 

30__all__ = ( 

31 'ClusterFilter', 

32 'ClusterGroupFilter', 

33 'ClusterTypeFilter', 

34 'VMInterfaceFilter', 

35 'VirtualDiskFilter', 

36 'VirtualMachineFilter', 

37 'VirtualMachineTypeFilter', 

38) 

39 

40 

41@register_filter(models.Cluster, lookups=True) 

42class ClusterFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilter): 

43 name: StrFilterLookup | None = strawberry_django.filter_field() 

44 type: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

45 strawberry_django.filter_field() 

46 ) 

47 type_id: ID | None = strawberry_django.filter_field() 

48 group: Annotated['ClusterGroupFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

49 strawberry_django.filter_field() 

50 ) 

51 group_id: ID | None = strawberry_django.filter_field() 

52 status: BaseFilterLookup[Annotated['ClusterStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None = ( 

53 strawberry_django.filter_field() 

54 ) 

55 vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

56 strawberry_django.filter_field() 

57 ) 

58 

59 

60@register_filter(models.ClusterGroup, lookups=True) 

61class ClusterGroupFilter(ContactFilterMixin, OrganizationalModelFilter): 

62 vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

63 strawberry_django.filter_field() 

64 ) 

65 

66 

67@register_filter(models.ClusterType, lookups=True) 

68class ClusterTypeFilter(OrganizationalModelFilter): 

69 pass 

70 

71 

72@register_filter(models.VirtualMachineType, lookups=True) 

73class VirtualMachineTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilter): 

74 default_platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( 

75 strawberry_django.filter_field() 

76 ) 

77 default_platform_id: ID | None = strawberry_django.filter_field() 

78 default_vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

79 strawberry_django.filter_field() 

80 ) 

81 default_memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

82 strawberry_django.filter_field() 

83 ) 

84 instances: Annotated['VirtualMachineFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

85 strawberry_django.filter_field() 

86 ) 

87 virtual_machine_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field() 

88 

89 

90@register_filter(models.VirtualMachine, lookups=True) 

91class VirtualMachineFilter( 

92 ContactFilterMixin, 

93 ImageAttachmentFilterMixin, 

94 RenderConfigFilterMixin, 

95 ConfigContextFilterMixin, 

96 TenancyFilterMixin, 

97 PrimaryModelFilter, 

98): 

99 name: StrFilterLookup | None = strawberry_django.filter_field() 

100 virtual_machine_type: ( 

101 Annotated['VirtualMachineTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None 

102 ) = strawberry_django.filter_field() 

103 site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() 

104 site_id: ID | None = strawberry_django.filter_field() 

105 cluster: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

106 strawberry_django.filter_field() 

107 ) 

108 cluster_id: ID | None = strawberry_django.filter_field() 

109 device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() 

110 device_id: ID | None = strawberry_django.filter_field() 

111 platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( 

112 strawberry_django.filter_field() 

113 ) 

114 platform_id: ID | None = strawberry_django.filter_field() 

115 status: ( 

116 BaseFilterLookup[Annotated['VirtualMachineStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None 

117 ) = ( 

118 strawberry_django.filter_field() 

119 ) 

120 role: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( 

121 strawberry_django.filter_field() 

122 ) 

123 role_id: ID | None = strawberry_django.filter_field() 

124 primary_ip4: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

125 strawberry_django.filter_field() 

126 ) 

127 primary_ip4_id: ID | None = strawberry_django.filter_field() 

128 primary_ip6: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

129 strawberry_django.filter_field() 

130 ) 

131 primary_ip6_id: ID | None = strawberry_django.filter_field() 

132 vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

133 strawberry_django.filter_field() 

134 ) 

135 memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

136 strawberry_django.filter_field() 

137 ) 

138 disk: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

139 strawberry_django.filter_field() 

140 ) 

141 serial: StrFilterLookup | None = strawberry_django.filter_field() 

142 interface_count: FilterLookup[int] | None = strawberry_django.filter_field() 

143 virtual_disk_count: FilterLookup[int] | None = strawberry_django.filter_field() 

144 interfaces: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

145 strawberry_django.filter_field() 

146 ) 

147 services: Annotated['ServiceFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

148 strawberry_django.filter_field() 

149 ) 

150 virtual_disks: Annotated['VirtualDiskFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

151 strawberry_django.filter_field() 

152 ) 

153 start_on_boot: ( 

154 BaseFilterLookup[Annotated['VirtualMachineStartOnBootEnum', strawberry.lazy('virtualization.graphql.enums')] 

155 ] | None) = ( 

156 strawberry_django.filter_field() 

157 ) 

158 

159 

160@register_filter(models.VMInterface, lookups=True) 

161class VMInterfaceFilter(InterfaceBaseFilterMixin, VMComponentFilterMixin, NetBoxModelFilter): 

162 ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

163 strawberry_django.filter_field() 

164 ) 

165 vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() 

166 vrf_id: ID | None = strawberry_django.filter_field() 

167 parent: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( 

168 strawberry_django.filter_field() 

169 ) 

170 parent_id: ID | None = strawberry_django.filter_field() 

171 fhrp_group_assignments: Annotated['FHRPGroupAssignmentFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( 

172 strawberry_django.filter_field() 

173 ) 

174 tunnel_terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = ( 

175 strawberry_django.filter_field() 

176 ) 

177 l2vpn_terminations: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = ( 

178 strawberry_django.filter_field() 

179 ) 

180 mac_addresses: Annotated['MACAddressFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( 

181 strawberry_django.filter_field() 

182 ) 

183 

184 

185@register_filter(models.VirtualDisk, lookups=True) 

186class VirtualDiskFilter(VMComponentFilterMixin, NetBoxModelFilter): 

187 size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( 

188 strawberry_django.filter_field() 

189 )