filters.py 48 KB

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