filters.py 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. from typing import Annotated, TYPE_CHECKING
  2. from django.db.models import Q
  3. import strawberry
  4. import strawberry_django
  5. from strawberry.scalars import ID
  6. from strawberry_django import ComparisonFilterLookup, FilterLookup
  7. from core.graphql.filter_mixins import ChangeLogFilterMixin
  8. from dcim import models
  9. from dcim.constants import *
  10. from dcim.graphql.enums import InterfaceKindEnum
  11. from extras.graphql.filter_mixins import ConfigContextFilterMixin
  12. from netbox.graphql.filter_mixins import (
  13. PrimaryModelFilterMixin,
  14. OrganizationalModelFilterMixin,
  15. NestedGroupModelFilterMixin,
  16. ImageAttachmentFilterMixin,
  17. WeightFilterMixin,
  18. )
  19. from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
  20. from virtualization.models import VMInterface
  21. from .filter_mixins import (
  22. CabledObjectModelFilterMixin,
  23. ComponentModelFilterMixin,
  24. ComponentTemplateFilterMixin,
  25. InterfaceBaseFilterMixin,
  26. ModularComponentModelFilterMixin,
  27. ModularComponentTemplateFilterMixin,
  28. RackBaseFilterMixin,
  29. RenderConfigFilterMixin,
  30. )
  31. if TYPE_CHECKING:
  32. from core.graphql.filters import ContentTypeFilter
  33. from extras.graphql.filters import ConfigTemplateFilter, ImageAttachmentFilter
  34. from ipam.graphql.filters import (
  35. ASNFilter, FHRPGroupAssignmentFilter, IPAddressFilter, PrefixFilter, VLANGroupFilter, VRFFilter,
  36. )
  37. from netbox.graphql.enums import ColorEnum
  38. from netbox.graphql.filter_lookups import FloatLookup, IntegerArrayLookup, IntegerLookup, TreeNodeFilter
  39. from users.graphql.filters import UserFilter
  40. from virtualization.graphql.filters import ClusterFilter
  41. from vpn.graphql.filters import L2VPNFilter, TunnelTerminationFilter
  42. from wireless.graphql.enums import WirelessChannelEnum, WirelessRoleEnum
  43. from wireless.graphql.filters import WirelessLANFilter, WirelessLinkFilter
  44. from .enums import *
  45. __all__ = (
  46. 'CableFilter',
  47. 'CableTerminationFilter',
  48. 'ConsolePortFilter',
  49. 'ConsolePortTemplateFilter',
  50. 'ConsoleServerPortFilter',
  51. 'ConsoleServerPortTemplateFilter',
  52. 'DeviceFilter',
  53. 'DeviceBayFilter',
  54. 'DeviceBayTemplateFilter',
  55. 'DeviceRoleFilter',
  56. 'DeviceTypeFilter',
  57. 'FrontPortFilter',
  58. 'FrontPortTemplateFilter',
  59. 'InterfaceFilter',
  60. 'InterfaceTemplateFilter',
  61. 'InventoryItemFilter',
  62. 'InventoryItemRoleFilter',
  63. 'InventoryItemTemplateFilter',
  64. 'LocationFilter',
  65. 'MACAddressFilter',
  66. 'ManufacturerFilter',
  67. 'ModuleFilter',
  68. 'ModuleBayFilter',
  69. 'ModuleBayTemplateFilter',
  70. 'ModuleTypeFilter',
  71. 'ModuleTypeProfileFilter',
  72. 'PlatformFilter',
  73. 'PowerFeedFilter',
  74. 'PowerOutletFilter',
  75. 'PowerOutletTemplateFilter',
  76. 'PowerPanelFilter',
  77. 'PowerPortFilter',
  78. 'PowerPortTemplateFilter',
  79. 'RackFilter',
  80. 'RackReservationFilter',
  81. 'RackRoleFilter',
  82. 'RackTypeFilter',
  83. 'RearPortFilter',
  84. 'RearPortTemplateFilter',
  85. 'RegionFilter',
  86. 'SiteFilter',
  87. 'SiteGroupFilter',
  88. 'VirtualChassisFilter',
  89. 'VirtualDeviceContextFilter',
  90. )
  91. @strawberry_django.filter_type(models.Cable, lookups=True)
  92. class CableFilter(PrimaryModelFilterMixin, TenancyFilterMixin):
  93. type: FilterLookup[Annotated['CableTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  94. strawberry_django.filter_field()
  95. )
  96. status: FilterLookup[Annotated['LinkStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  97. strawberry_django.filter_field()
  98. )
  99. label: FilterLookup[str] | None = strawberry_django.filter_field()
  100. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  101. strawberry_django.filter_field()
  102. )
  103. length: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  104. strawberry_django.filter_field()
  105. )
  106. length_unit: FilterLookup[Annotated['CableLengthUnitEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  107. strawberry_django.filter_field()
  108. )
  109. terminations: Annotated['CableTerminationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  110. strawberry_django.filter_field()
  111. )
  112. @strawberry_django.filter_type(models.CableTermination, lookups=True)
  113. class CableTerminationFilter(ChangeLogFilterMixin):
  114. cable: Annotated['CableFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  115. cable_id: ID | None = strawberry_django.filter_field()
  116. cable_end: FilterLookup[Annotated['CableEndEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  117. strawberry_django.filter_field()
  118. )
  119. termination_type: Annotated['CableTerminationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  120. strawberry_django.filter_field()
  121. )
  122. termination_id: ID | None = strawberry_django.filter_field()
  123. @strawberry_django.filter_type(models.ConsolePort, lookups=True)
  124. class ConsolePortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  125. type: FilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  126. strawberry_django.filter_field()
  127. )
  128. speed: FilterLookup[Annotated['ConsolePortSpeedEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  129. strawberry_django.filter_field()
  130. )
  131. @strawberry_django.filter_type(models.ConsolePortTemplate, lookups=True)
  132. class ConsolePortTemplateFilter(ModularComponentTemplateFilterMixin):
  133. type: FilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  134. strawberry_django.filter_field()
  135. )
  136. @strawberry_django.filter_type(models.ConsoleServerPort, lookups=True)
  137. class ConsoleServerPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  138. type: FilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  139. strawberry_django.filter_field()
  140. )
  141. speed: FilterLookup[Annotated['ConsolePortSpeedEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  142. strawberry_django.filter_field()
  143. )
  144. @strawberry_django.filter_type(models.ConsoleServerPortTemplate, lookups=True)
  145. class ConsoleServerPortTemplateFilter(ModularComponentTemplateFilterMixin):
  146. type: FilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  147. strawberry_django.filter_field()
  148. )
  149. @strawberry_django.filter_type(models.Device, lookups=True)
  150. class DeviceFilter(
  151. ContactFilterMixin,
  152. TenancyFilterMixin,
  153. ImageAttachmentFilterMixin,
  154. RenderConfigFilterMixin,
  155. ConfigContextFilterMixin,
  156. PrimaryModelFilterMixin,
  157. ):
  158. device_type: Annotated['DeviceTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  159. strawberry_django.filter_field()
  160. )
  161. device_type_id: ID | None = strawberry_django.filter_field()
  162. role: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  163. strawberry_django.filter_field()
  164. )
  165. role_id: ID | None = strawberry_django.filter_field()
  166. platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  167. strawberry_django.filter_field()
  168. )
  169. name: FilterLookup[str] | None = strawberry_django.filter_field()
  170. serial: FilterLookup[str] | None = strawberry_django.filter_field()
  171. asset_tag: FilterLookup[str] | None = strawberry_django.filter_field()
  172. site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  173. site_id: ID | None = strawberry_django.filter_field()
  174. location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  175. strawberry_django.filter_field()
  176. )
  177. location_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  178. strawberry_django.filter_field()
  179. )
  180. rack: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  181. rack_id: ID | None = strawberry_django.filter_field()
  182. position: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  183. strawberry_django.filter_field()
  184. )
  185. face: FilterLookup[Annotated['DeviceFaceEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  186. strawberry_django.filter_field()
  187. )
  188. status: FilterLookup[Annotated['DeviceStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  189. strawberry_django.filter_field()
  190. )
  191. airflow: FilterLookup[Annotated['DeviceAirflowEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  192. strawberry_django.filter_field()
  193. )
  194. primary_ip4: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  195. strawberry_django.filter_field()
  196. )
  197. primary_ip4_id: ID | None = strawberry_django.filter_field()
  198. primary_ip6: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  199. strawberry_django.filter_field()
  200. )
  201. primary_ip6_id: ID | None = strawberry_django.filter_field()
  202. oob_ip: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  203. strawberry_django.filter_field()
  204. )
  205. oob_ip_id: ID | None = strawberry_django.filter_field()
  206. cluster: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  207. strawberry_django.filter_field()
  208. )
  209. cluster_id: ID | None = strawberry_django.filter_field()
  210. virtual_chassis: Annotated['VirtualChassisFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  211. strawberry_django.filter_field()
  212. )
  213. virtual_chassis_id: ID | None = strawberry_django.filter_field()
  214. vc_position: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  215. strawberry_django.filter_field()
  216. )
  217. vc_priority: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  218. strawberry_django.filter_field()
  219. )
  220. latitude: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  221. strawberry_django.filter_field()
  222. )
  223. longitude: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  224. strawberry_django.filter_field()
  225. )
  226. console_ports: Annotated['ConsolePortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  227. strawberry_django.filter_field()
  228. )
  229. console_server_ports: Annotated['ConsoleServerPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  230. strawberry_django.filter_field()
  231. )
  232. power_outlets: Annotated['PowerOutletFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  233. strawberry_django.filter_field()
  234. )
  235. power_ports: Annotated['PowerPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  236. strawberry_django.filter_field()
  237. )
  238. interfaces: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  239. strawberry_django.filter_field()
  240. )
  241. front_ports: Annotated['FrontPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  242. strawberry_django.filter_field()
  243. )
  244. rear_ports: Annotated['RearPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  245. strawberry_django.filter_field()
  246. )
  247. device_bays: Annotated['DeviceBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  248. strawberry_django.filter_field()
  249. )
  250. module_bays: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  251. strawberry_django.filter_field()
  252. )
  253. modules: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  254. strawberry_django.filter_field()
  255. )
  256. console_port_count: FilterLookup[int] | None = strawberry_django.filter_field()
  257. console_server_port_count: FilterLookup[int] | None = strawberry_django.filter_field()
  258. power_port_count: FilterLookup[int] | None = strawberry_django.filter_field()
  259. power_outlet_count: FilterLookup[int] | None = strawberry_django.filter_field()
  260. interface_count: FilterLookup[int] | None = strawberry_django.filter_field()
  261. front_port_count: FilterLookup[int] | None = strawberry_django.filter_field()
  262. rear_port_count: FilterLookup[int] | None = strawberry_django.filter_field()
  263. device_bay_count: FilterLookup[int] | None = strawberry_django.filter_field()
  264. module_bay_count: FilterLookup[int] | None = strawberry_django.filter_field()
  265. inventory_item_count: FilterLookup[int] | None = strawberry_django.filter_field()
  266. @strawberry_django.filter_type(models.DeviceBay, lookups=True)
  267. class DeviceBayFilter(ComponentModelFilterMixin):
  268. installed_device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  269. strawberry_django.filter_field()
  270. )
  271. installed_device_id: ID | None = strawberry_django.filter_field()
  272. @strawberry_django.filter_type(models.DeviceBayTemplate, lookups=True)
  273. class DeviceBayTemplateFilter(ComponentTemplateFilterMixin):
  274. pass
  275. @strawberry_django.filter_type(models.InventoryItemTemplate, lookups=True)
  276. class InventoryItemTemplateFilter(ComponentTemplateFilterMixin):
  277. parent: Annotated['InventoryItemTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  278. strawberry_django.filter_field()
  279. )
  280. component_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  281. strawberry_django.filter_field()
  282. )
  283. component_id: ID | None = strawberry_django.filter_field()
  284. role: Annotated['InventoryItemRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  285. strawberry_django.filter_field()
  286. )
  287. role_id: ID | None = strawberry_django.filter_field()
  288. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  289. strawberry_django.filter_field()
  290. )
  291. manufacturer_id: ID | None = strawberry_django.filter_field()
  292. part_id: FilterLookup[str] | None = strawberry_django.filter_field()
  293. @strawberry_django.filter_type(models.DeviceRole, lookups=True)
  294. class DeviceRoleFilter(OrganizationalModelFilterMixin, RenderConfigFilterMixin):
  295. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  296. strawberry_django.filter_field()
  297. )
  298. vm_role: FilterLookup[bool] | None = strawberry_django.filter_field()
  299. @strawberry_django.filter_type(models.DeviceType, lookups=True)
  300. class DeviceTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilterMixin, WeightFilterMixin):
  301. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  302. strawberry_django.filter_field()
  303. )
  304. manufacturer_id: ID | None = strawberry_django.filter_field()
  305. model: FilterLookup[str] | None = strawberry_django.filter_field()
  306. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  307. default_platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  308. strawberry_django.filter_field()
  309. )
  310. default_platform_id: ID | None = strawberry_django.filter_field()
  311. part_number: FilterLookup[str] | None = strawberry_django.filter_field()
  312. instances: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  313. strawberry_django.filter_field()
  314. )
  315. u_height: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  316. strawberry_django.filter_field()
  317. )
  318. exclude_from_utilization: FilterLookup[bool] | None = strawberry_django.filter_field()
  319. is_full_depth: FilterLookup[bool] | None = strawberry_django.filter_field()
  320. subdevice_role: FilterLookup[Annotated['SubdeviceRoleEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  321. strawberry_django.filter_field()
  322. )
  323. airflow: FilterLookup[Annotated['DeviceAirflowEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  324. strawberry_django.filter_field()
  325. )
  326. front_image: Annotated['ImageAttachmentFilter', strawberry.lazy('extras.graphql.filters')] | None = (
  327. strawberry_django.filter_field()
  328. )
  329. rear_image: Annotated['ImageAttachmentFilter', strawberry.lazy('extras.graphql.filters')] | None = (
  330. strawberry_django.filter_field()
  331. )
  332. console_port_templates: (
  333. Annotated['ConsolePortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  334. ) = strawberry_django.filter_field()
  335. console_server_port_templates: (
  336. Annotated['ConsoleServerPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  337. ) = strawberry_django.filter_field()
  338. power_port_templates: (
  339. Annotated['PowerPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  340. ) = strawberry_django.filter_field()
  341. power_outlet_templates: (
  342. Annotated['PowerOutletTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  343. ) = strawberry_django.filter_field()
  344. interface_templates: (
  345. Annotated['InterfaceTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  346. ) = strawberry_django.filter_field()
  347. front_port_templates: (
  348. Annotated['FrontPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  349. ) = strawberry_django.filter_field()
  350. rear_port_templates: (
  351. Annotated['RearPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  352. ) = strawberry_django.filter_field()
  353. device_bay_templates: (
  354. Annotated['DeviceBayTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  355. ) = strawberry_django.filter_field()
  356. module_bay_templates: (
  357. Annotated['ModuleBayTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  358. ) = strawberry_django.filter_field()
  359. inventory_item_templates: (
  360. Annotated['InventoryItemTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  361. ) = strawberry_django.filter_field()
  362. console_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  363. console_server_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  364. power_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  365. power_outlet_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  366. interface_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  367. front_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  368. rear_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  369. device_bay_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  370. module_bay_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  371. inventory_item_template_count: FilterLookup[int] | None = strawberry_django.filter_field()
  372. device_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field()
  373. @strawberry_django.filter_type(models.FrontPort, lookups=True)
  374. class FrontPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  375. type: FilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  376. strawberry_django.filter_field()
  377. )
  378. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  379. strawberry_django.filter_field()
  380. )
  381. rear_port: Annotated['RearPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  382. strawberry_django.filter_field()
  383. )
  384. rear_port_id: ID | None = strawberry_django.filter_field()
  385. rear_port_position: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  386. strawberry_django.filter_field()
  387. )
  388. @strawberry_django.filter_type(models.FrontPortTemplate, lookups=True)
  389. class FrontPortTemplateFilter(ModularComponentTemplateFilterMixin):
  390. type: FilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  391. strawberry_django.filter_field()
  392. )
  393. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  394. strawberry_django.filter_field()
  395. )
  396. rear_port: Annotated['RearPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  397. strawberry_django.filter_field()
  398. )
  399. rear_port_id: ID | None = strawberry_django.filter_field()
  400. rear_port_position: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  401. strawberry_django.filter_field()
  402. )
  403. @strawberry_django.filter_type(models.MACAddress, lookups=True)
  404. class MACAddressFilter(PrimaryModelFilterMixin):
  405. mac_address: FilterLookup[str] | None = strawberry_django.filter_field()
  406. assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  407. strawberry_django.filter_field()
  408. )
  409. assigned_object_id: ID | None = strawberry_django.filter_field()
  410. @strawberry_django.filter_field()
  411. def assigned(self, value: bool, prefix) -> Q:
  412. return Q(**{f'{prefix}assigned_object_id__isnull': (not value)})
  413. @strawberry_django.filter_field()
  414. def primary(self, value: bool, prefix) -> Q:
  415. interface_mac_ids = models.Interface.objects.filter(primary_mac_address_id__isnull=False).values_list(
  416. 'primary_mac_address_id', flat=True
  417. )
  418. vminterface_mac_ids = VMInterface.objects.filter(primary_mac_address_id__isnull=False).values_list(
  419. 'primary_mac_address_id', flat=True
  420. )
  421. query = Q(**{f'{prefix}pk__in': interface_mac_ids}) | Q(**{f'{prefix}pk__in': vminterface_mac_ids})
  422. if value:
  423. return Q(query)
  424. else:
  425. return ~Q(query)
  426. @strawberry_django.filter_type(models.Interface, lookups=True)
  427. class InterfaceFilter(ModularComponentModelFilterMixin, InterfaceBaseFilterMixin, CabledObjectModelFilterMixin):
  428. vcdcs: Annotated['VirtualDeviceContextFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  429. strawberry_django.filter_field()
  430. )
  431. lag: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  432. lag_id: ID | None = strawberry_django.filter_field()
  433. type: FilterLookup[Annotated['InterfaceTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  434. strawberry_django.filter_field()
  435. )
  436. mgmt_only: FilterLookup[bool] | None = strawberry_django.filter_field()
  437. speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  438. strawberry_django.filter_field()
  439. )
  440. duplex: FilterLookup[Annotated['InterfaceDuplexEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  441. strawberry_django.filter_field()
  442. )
  443. wwn: FilterLookup[str] | None = strawberry_django.filter_field()
  444. parent: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  445. strawberry_django.filter_field()
  446. )
  447. parent_id: ID | None = strawberry_django.filter_field()
  448. rf_role: FilterLookup[Annotated['WirelessRoleEnum', strawberry.lazy('wireless.graphql.enums')]] | None = (
  449. strawberry_django.filter_field()
  450. )
  451. rf_channel: FilterLookup[Annotated['WirelessChannelEnum', strawberry.lazy('wireless.graphql.enums')]] | None = (
  452. strawberry_django.filter_field()
  453. )
  454. rf_channel_frequency: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  455. strawberry_django.filter_field()
  456. )
  457. rf_channel_width: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  458. strawberry_django.filter_field()
  459. )
  460. tx_power: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  461. strawberry_django.filter_field()
  462. )
  463. poe_mode: FilterLookup[Annotated['InterfacePoEModeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  464. strawberry_django.filter_field()
  465. )
  466. poe_type: FilterLookup[Annotated['InterfacePoETypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  467. strawberry_django.filter_field()
  468. )
  469. wireless_link: Annotated['WirelessLinkFilter', strawberry.lazy('wireless.graphql.filters')] | None = (
  470. strawberry_django.filter_field()
  471. )
  472. wireless_link_id: ID | None = strawberry_django.filter_field()
  473. wireless_lans: Annotated['WirelessLANFilter', strawberry.lazy('wireless.graphql.filters')] | None = (
  474. strawberry_django.filter_field()
  475. )
  476. vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
  477. vrf_id: ID | None = strawberry_django.filter_field()
  478. ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  479. strawberry_django.filter_field()
  480. )
  481. mac_addresses: Annotated['MACAddressFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  482. strawberry_django.filter_field()
  483. )
  484. fhrp_group_assignments: Annotated['FHRPGroupAssignmentFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  485. strawberry_django.filter_field()
  486. )
  487. tunnel_terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  488. strawberry_django.filter_field()
  489. )
  490. l2vpn_terminations: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  491. strawberry_django.filter_field()
  492. )
  493. @strawberry_django.filter_field
  494. def connected(self, queryset, value: bool, prefix: str):
  495. if value is True:
  496. return queryset, Q(**{f"{prefix}_path__is_active": True})
  497. else:
  498. return queryset, Q(**{f"{prefix}_path__isnull": True}) | Q(**{f"{prefix}_path__is_active": False})
  499. @strawberry_django.filter_field
  500. def kind(
  501. self,
  502. queryset,
  503. value: Annotated['InterfaceKindEnum', strawberry.lazy('dcim.graphql.enums')],
  504. prefix: str
  505. ):
  506. if value == InterfaceKindEnum.KIND_PHYSICAL:
  507. return queryset, ~Q(**{f"{prefix}type__in": NONCONNECTABLE_IFACE_TYPES})
  508. elif value == InterfaceKindEnum.KIND_VIRTUAL:
  509. return queryset, Q(**{f"{prefix}type__in": VIRTUAL_IFACE_TYPES})
  510. elif value == InterfaceKindEnum.KIND_WIRELESS:
  511. return queryset, Q(**{f"{prefix}type__in": WIRELESS_IFACE_TYPES})
  512. @strawberry_django.filter_type(models.InterfaceTemplate, lookups=True)
  513. class InterfaceTemplateFilter(ModularComponentTemplateFilterMixin):
  514. type: FilterLookup[Annotated['InterfaceTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  515. strawberry_django.filter_field()
  516. )
  517. enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
  518. mgmt_only: FilterLookup[bool] | None = strawberry_django.filter_field()
  519. bridge: Annotated['InterfaceTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  520. strawberry_django.filter_field()
  521. )
  522. bridge_id: ID | None = strawberry_django.filter_field()
  523. poe_mode: FilterLookup[Annotated['InterfacePoEModeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  524. strawberry_django.filter_field()
  525. )
  526. poe_type: FilterLookup[Annotated['InterfacePoETypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  527. strawberry_django.filter_field()
  528. )
  529. rf_role: FilterLookup[Annotated['WirelessRoleEnum', strawberry.lazy('wireless.graphql.enums')]] | None = (
  530. strawberry_django.filter_field()
  531. )
  532. @strawberry_django.filter_type(models.InventoryItem, lookups=True)
  533. class InventoryItemFilter(ComponentModelFilterMixin):
  534. parent: Annotated['InventoryItemFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  535. strawberry_django.filter_field()
  536. )
  537. parent_id: ID | None = strawberry_django.filter_field()
  538. component_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  539. strawberry_django.filter_field()
  540. )
  541. component_id: ID | None = strawberry_django.filter_field()
  542. status: FilterLookup[Annotated['InventoryItemStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  543. strawberry_django.filter_field()
  544. )
  545. role: Annotated['InventoryItemRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  546. strawberry_django.filter_field()
  547. )
  548. role_id: ID | None = strawberry_django.filter_field()
  549. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  550. strawberry_django.filter_field()
  551. )
  552. manufacturer_id: ID | None = strawberry_django.filter_field()
  553. part_id: FilterLookup[str] | None = strawberry_django.filter_field()
  554. serial: FilterLookup[str] | None = strawberry_django.filter_field()
  555. asset_tag: FilterLookup[str] | None = strawberry_django.filter_field()
  556. discovered: FilterLookup[bool] | None = strawberry_django.filter_field()
  557. @strawberry_django.filter_type(models.InventoryItemRole, lookups=True)
  558. class InventoryItemRoleFilter(OrganizationalModelFilterMixin):
  559. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  560. strawberry_django.filter_field()
  561. )
  562. @strawberry_django.filter_type(models.Location, lookups=True)
  563. class LocationFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMixin, NestedGroupModelFilterMixin):
  564. site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  565. site_id: ID | None = strawberry_django.filter_field()
  566. status: FilterLookup[Annotated['LocationStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  567. strawberry_django.filter_field()
  568. )
  569. facility: FilterLookup[str] | None = strawberry_django.filter_field()
  570. prefixes: Annotated['PrefixFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  571. strawberry_django.filter_field()
  572. )
  573. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  574. strawberry_django.filter_field()
  575. )
  576. @strawberry_django.filter_type(models.Manufacturer, lookups=True)
  577. class ManufacturerFilter(ContactFilterMixin, OrganizationalModelFilterMixin):
  578. pass
  579. @strawberry_django.filter_type(models.Module, lookups=True)
  580. class ModuleFilter(PrimaryModelFilterMixin, ConfigContextFilterMixin):
  581. device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  582. device_id: ID | None = strawberry_django.filter_field()
  583. module_bay: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  584. strawberry_django.filter_field()
  585. )
  586. module_bay_id: ID | None = strawberry_django.filter_field()
  587. module_type: Annotated['ModuleTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  588. strawberry_django.filter_field()
  589. )
  590. module_type_id: ID | None = strawberry_django.filter_field()
  591. status: FilterLookup[Annotated['ModuleStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  592. strawberry_django.filter_field()
  593. )
  594. serial: FilterLookup[str] | None = strawberry_django.filter_field()
  595. asset_tag: FilterLookup[str] | None = strawberry_django.filter_field()
  596. console_ports: Annotated['ConsolePortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  597. strawberry_django.filter_field()
  598. )
  599. console_server_ports: Annotated['ConsoleServerPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  600. strawberry_django.filter_field()
  601. )
  602. power_outlets: Annotated['PowerOutletFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  603. strawberry_django.filter_field()
  604. )
  605. power_ports: Annotated['PowerPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  606. strawberry_django.filter_field()
  607. )
  608. interfaces: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  609. strawberry_django.filter_field()
  610. )
  611. front_ports: Annotated['FrontPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  612. strawberry_django.filter_field()
  613. )
  614. rear_ports: Annotated['RearPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  615. strawberry_django.filter_field()
  616. )
  617. device_bays: Annotated['DeviceBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  618. strawberry_django.filter_field()
  619. )
  620. module_bays: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  621. strawberry_django.filter_field()
  622. )
  623. modules: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  624. strawberry_django.filter_field()
  625. )
  626. @strawberry_django.filter_type(models.ModuleBay, lookups=True)
  627. class ModuleBayFilter(ModularComponentModelFilterMixin):
  628. parent: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  629. strawberry_django.filter_field()
  630. )
  631. parent_id: ID | None = strawberry_django.filter_field()
  632. position: FilterLookup[str] | None = strawberry_django.filter_field()
  633. @strawberry_django.filter_type(models.ModuleBayTemplate, lookups=True)
  634. class ModuleBayTemplateFilter(ModularComponentTemplateFilterMixin):
  635. position: FilterLookup[str] | None = strawberry_django.filter_field()
  636. @strawberry_django.filter_type(models.ModuleTypeProfile, lookups=True)
  637. class ModuleTypeProfileFilter(PrimaryModelFilterMixin):
  638. name: FilterLookup[str] | None = strawberry_django.filter_field()
  639. @strawberry_django.filter_type(models.ModuleType, lookups=True)
  640. class ModuleTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilterMixin, WeightFilterMixin):
  641. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  642. strawberry_django.filter_field()
  643. )
  644. manufacturer_id: ID | None = strawberry_django.filter_field()
  645. profile: Annotated['ModuleTypeProfileFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  646. strawberry_django.filter_field()
  647. )
  648. profile_id: ID | None = strawberry_django.filter_field()
  649. model: FilterLookup[str] | None = strawberry_django.filter_field()
  650. part_number: FilterLookup[str] | None = strawberry_django.filter_field()
  651. instances: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  652. strawberry_django.filter_field()
  653. )
  654. airflow: FilterLookup[Annotated['ModuleAirflowEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  655. strawberry_django.filter_field()
  656. )
  657. console_port_templates: (
  658. Annotated['ConsolePortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  659. ) = strawberry_django.filter_field()
  660. console_server_port_templates: (
  661. Annotated['ConsoleServerPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  662. ) = strawberry_django.filter_field()
  663. power_port_templates: (
  664. Annotated['PowerPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  665. ) = strawberry_django.filter_field()
  666. power_outlet_templates: (
  667. Annotated['PowerOutletTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  668. ) = strawberry_django.filter_field()
  669. interface_templates: (
  670. Annotated['InterfaceTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  671. ) = strawberry_django.filter_field()
  672. front_port_templates: (
  673. Annotated['FrontPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  674. ) = strawberry_django.filter_field()
  675. rear_port_templates: (
  676. Annotated['RearPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  677. ) = strawberry_django.filter_field()
  678. device_bay_templates: (
  679. Annotated['DeviceBayTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  680. ) = strawberry_django.filter_field()
  681. module_bay_templates: (
  682. Annotated['ModuleBayTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  683. ) = strawberry_django.filter_field()
  684. inventory_item_templates: (
  685. Annotated['InventoryItemTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None
  686. ) = strawberry_django.filter_field()
  687. module_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field()
  688. @strawberry_django.filter_type(models.Platform, lookups=True)
  689. class PlatformFilter(OrganizationalModelFilterMixin):
  690. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  691. strawberry_django.filter_field()
  692. )
  693. manufacturer_id: ID | None = strawberry_django.filter_field()
  694. config_template: Annotated['ConfigTemplateFilter', strawberry.lazy('extras.graphql.filters')] | None = (
  695. strawberry_django.filter_field()
  696. )
  697. config_template_id: ID | None = strawberry_django.filter_field()
  698. @strawberry_django.filter_type(models.PowerFeed, lookups=True)
  699. class PowerFeedFilter(CabledObjectModelFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
  700. power_panel: Annotated['PowerPanelFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  701. strawberry_django.filter_field()
  702. )
  703. power_panel_id: ID | None = strawberry_django.filter_field()
  704. rack: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  705. rack_id: ID | None = strawberry_django.filter_field()
  706. name: FilterLookup[str] | None = strawberry_django.filter_field()
  707. status: FilterLookup[Annotated['PowerFeedStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  708. strawberry_django.filter_field()
  709. )
  710. type: FilterLookup[Annotated['PowerFeedTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  711. strawberry_django.filter_field()
  712. )
  713. supply: FilterLookup[Annotated['PowerFeedSupplyEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  714. strawberry_django.filter_field()
  715. )
  716. phase: FilterLookup[Annotated['PowerFeedPhaseEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  717. strawberry_django.filter_field()
  718. )
  719. voltage: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  720. strawberry_django.filter_field()
  721. )
  722. amperage: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  723. strawberry_django.filter_field()
  724. )
  725. max_utilization: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  726. strawberry_django.filter_field()
  727. )
  728. available_power: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  729. strawberry_django.filter_field()
  730. )
  731. @strawberry_django.filter_type(models.PowerOutlet, lookups=True)
  732. class PowerOutletFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  733. type: FilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  734. strawberry_django.filter_field()
  735. )
  736. power_port: Annotated['PowerPortFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  737. strawberry_django.filter_field()
  738. )
  739. power_port_id: ID | None = strawberry_django.filter_field()
  740. feed_leg: FilterLookup[Annotated['PowerOutletFeedLegEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  741. strawberry_django.filter_field()
  742. )
  743. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  744. strawberry_django.filter_field()
  745. )
  746. @strawberry_django.filter_type(models.PowerOutletTemplate, lookups=True)
  747. class PowerOutletTemplateFilter(ModularComponentModelFilterMixin):
  748. type: FilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  749. strawberry_django.filter_field()
  750. )
  751. power_port: Annotated['PowerPortTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  752. strawberry_django.filter_field()
  753. )
  754. power_port_id: ID | None = strawberry_django.filter_field()
  755. feed_leg: FilterLookup[Annotated['PowerOutletFeedLegEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  756. strawberry_django.filter_field()
  757. )
  758. @strawberry_django.filter_type(models.PowerPanel, lookups=True)
  759. class PowerPanelFilter(ContactFilterMixin, ImageAttachmentFilterMixin, PrimaryModelFilterMixin):
  760. site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  761. site_id: ID | None = strawberry_django.filter_field()
  762. location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  763. strawberry_django.filter_field()
  764. )
  765. location_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  766. strawberry_django.filter_field()
  767. )
  768. name: FilterLookup[str] | None = strawberry_django.filter_field()
  769. @strawberry_django.filter_type(models.PowerPort, lookups=True)
  770. class PowerPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  771. type: FilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  772. strawberry_django.filter_field()
  773. )
  774. maximum_draw: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  775. strawberry_django.filter_field()
  776. )
  777. allocated_draw: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  778. strawberry_django.filter_field()
  779. )
  780. @strawberry_django.filter_type(models.PowerPortTemplate, lookups=True)
  781. class PowerPortTemplateFilter(ModularComponentTemplateFilterMixin):
  782. type: FilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  783. strawberry_django.filter_field()
  784. )
  785. maximum_draw: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  786. strawberry_django.filter_field()
  787. )
  788. allocated_draw: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  789. strawberry_django.filter_field()
  790. )
  791. @strawberry_django.filter_type(models.RackType, lookups=True)
  792. class RackTypeFilter(RackBaseFilterMixin):
  793. form_factor: FilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  794. strawberry_django.filter_field()
  795. )
  796. manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  797. strawberry_django.filter_field()
  798. )
  799. manufacturer_id: ID | None = strawberry_django.filter_field()
  800. model: FilterLookup[str] | None = strawberry_django.filter_field()
  801. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  802. racks: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  803. rack_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field()
  804. @strawberry_django.filter_type(models.Rack, lookups=True)
  805. class RackFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMixin, RackBaseFilterMixin):
  806. form_factor: FilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  807. strawberry_django.filter_field()
  808. )
  809. rack_type: Annotated['RackTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  810. strawberry_django.filter_field()
  811. )
  812. rack_type_id: ID | None = strawberry_django.filter_field()
  813. name: FilterLookup[str] | None = strawberry_django.filter_field()
  814. facility_id: FilterLookup[str] | None = strawberry_django.filter_field()
  815. site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  816. site_id: ID | None = strawberry_django.filter_field()
  817. location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  818. strawberry_django.filter_field()
  819. )
  820. location_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  821. strawberry_django.filter_field()
  822. )
  823. status: FilterLookup[Annotated['RackStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  824. strawberry_django.filter_field()
  825. )
  826. role: Annotated['RackRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  827. role_id: ID | None = strawberry_django.filter_field()
  828. serial: FilterLookup[str] | None = strawberry_django.filter_field()
  829. asset_tag: FilterLookup[str] | None = strawberry_django.filter_field()
  830. airflow: FilterLookup[Annotated['RackAirflowEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  831. strawberry_django.filter_field()
  832. )
  833. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  834. strawberry_django.filter_field()
  835. )
  836. @strawberry_django.filter_type(models.RackReservation, lookups=True)
  837. class RackReservationFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
  838. rack: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  839. rack_id: ID | None = strawberry_django.filter_field()
  840. units: Annotated['IntegerArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  841. strawberry_django.filter_field()
  842. )
  843. user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
  844. user_id: ID | None = strawberry_django.filter_field()
  845. description: FilterLookup[str] | None = strawberry_django.filter_field()
  846. @strawberry_django.filter_type(models.RackRole, lookups=True)
  847. class RackRoleFilter(OrganizationalModelFilterMixin):
  848. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  849. strawberry_django.filter_field()
  850. )
  851. @strawberry_django.filter_type(models.RearPort, lookups=True)
  852. class RearPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin):
  853. type: FilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  854. strawberry_django.filter_field()
  855. )
  856. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  857. strawberry_django.filter_field()
  858. )
  859. positions: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  860. strawberry_django.filter_field()
  861. )
  862. @strawberry_django.filter_type(models.RearPortTemplate, lookups=True)
  863. class RearPortTemplateFilter(ModularComponentTemplateFilterMixin):
  864. type: FilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  865. strawberry_django.filter_field()
  866. )
  867. color: FilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
  868. strawberry_django.filter_field()
  869. )
  870. positions: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  871. strawberry_django.filter_field()
  872. )
  873. @strawberry_django.filter_type(models.Region, lookups=True)
  874. class RegionFilter(ContactFilterMixin, NestedGroupModelFilterMixin):
  875. prefixes: Annotated['PrefixFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  876. strawberry_django.filter_field()
  877. )
  878. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  879. strawberry_django.filter_field()
  880. )
  881. @strawberry_django.filter_type(models.Site, lookups=True)
  882. class SiteFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
  883. name: FilterLookup[str] | None = strawberry_django.filter_field()
  884. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  885. status: FilterLookup[Annotated['SiteStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  886. strawberry_django.filter_field()
  887. )
  888. region: Annotated['RegionFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  889. region_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  890. strawberry_django.filter_field()
  891. )
  892. group: Annotated['SiteGroupFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  893. strawberry_django.filter_field()
  894. )
  895. group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  896. strawberry_django.filter_field()
  897. )
  898. facility: FilterLookup[str] | None = strawberry_django.filter_field()
  899. asns: Annotated['ASNFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
  900. time_zone: FilterLookup[str] | None = strawberry_django.filter_field()
  901. physical_address: FilterLookup[str] | None = strawberry_django.filter_field()
  902. shipping_address: FilterLookup[str] | None = strawberry_django.filter_field()
  903. latitude: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  904. strawberry_django.filter_field()
  905. )
  906. longitude: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  907. strawberry_django.filter_field()
  908. )
  909. prefixes: Annotated['PrefixFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  910. strawberry_django.filter_field()
  911. )
  912. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  913. strawberry_django.filter_field()
  914. )
  915. @strawberry_django.filter_type(models.SiteGroup, lookups=True)
  916. class SiteGroupFilter(ContactFilterMixin, NestedGroupModelFilterMixin):
  917. prefixes: Annotated['PrefixFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  918. strawberry_django.filter_field()
  919. )
  920. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  921. strawberry_django.filter_field()
  922. )
  923. @strawberry_django.filter_type(models.VirtualChassis, lookups=True)
  924. class VirtualChassisFilter(PrimaryModelFilterMixin):
  925. master: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  926. master_id: ID | None = strawberry_django.filter_field()
  927. name: FilterLookup[str] | None = strawberry_django.filter_field()
  928. domain: FilterLookup[str] | None = strawberry_django.filter_field()
  929. members: (
  930. Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None
  931. ) = strawberry_django.filter_field()
  932. member_count: FilterLookup[int] | None = strawberry_django.filter_field()
  933. @strawberry_django.filter_type(models.VirtualDeviceContext, lookups=True)
  934. class VirtualDeviceContextFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
  935. device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  936. device_id: ID | None = strawberry_django.filter_field()
  937. name: FilterLookup[str] | None = strawberry_django.filter_field()
  938. status: FilterLookup[Annotated['VirtualDeviceContextStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
  939. strawberry_django.filter_field()
  940. )
  941. identifier: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  942. strawberry_django.filter_field()
  943. )
  944. primary_ip4: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  945. strawberry_django.filter_field()
  946. )
  947. primary_ip4_id: ID | None = strawberry_django.filter_field()
  948. primary_ip6: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  949. strawberry_django.filter_field()
  950. )
  951. primary_ip6_id: ID | None = strawberry_django.filter_field()
  952. comments: FilterLookup[str] | None = strawberry_django.filter_field()
  953. interfaces: (
  954. Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None
  955. ) = strawberry_django.filter_field()