filters.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. from typing import Annotated, TYPE_CHECKING
  2. import strawberry
  3. import strawberry_django
  4. from strawberry.scalars import ID
  5. from strawberry_django import FilterLookup
  6. from core.graphql.filter_mixins import BaseObjectTypeFilterMixin, ChangeLogFilterMixin
  7. from extras import models
  8. from extras.graphql.filter_mixins import TagBaseFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin
  9. from netbox.graphql.filter_mixins import PrimaryModelFilterMixin, SyncedDataFilterMixin
  10. if TYPE_CHECKING:
  11. from core.graphql.filters import ContentTypeFilter
  12. from dcim.graphql.filters import (
  13. DeviceRoleFilter, DeviceTypeFilter, LocationFilter, PlatformFilter, RegionFilter, SiteFilter, SiteGroupFilter,
  14. )
  15. from tenancy.graphql.filters import TenantFilter, TenantGroupFilter
  16. from netbox.graphql.enums import ColorEnum
  17. from netbox.graphql.filter_lookups import IntegerLookup, JSONFilter, StringArrayLookup, TreeNodeFilter
  18. from users.graphql.filters import GroupFilter, UserFilter
  19. from virtualization.graphql.filters import ClusterFilter, ClusterGroupFilter, ClusterTypeFilter
  20. from .enums import *
  21. __all__ = (
  22. 'ConfigContextFilter',
  23. 'ConfigContextProfileFilter',
  24. 'ConfigTemplateFilter',
  25. 'CustomFieldFilter',
  26. 'CustomFieldChoiceSetFilter',
  27. 'CustomLinkFilter',
  28. 'EventRuleFilter',
  29. 'ExportTemplateFilter',
  30. 'ImageAttachmentFilter',
  31. 'JournalEntryFilter',
  32. 'NotificationGroupFilter',
  33. 'SavedFilterFilter',
  34. 'TableConfigFilter',
  35. 'TagFilter',
  36. 'WebhookFilter',
  37. )
  38. @strawberry_django.filter_type(models.ConfigContext, lookups=True)
  39. class ConfigContextFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLogFilterMixin):
  40. name: FilterLookup[str] = strawberry_django.filter_field()
  41. weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  42. strawberry_django.filter_field()
  43. )
  44. description: FilterLookup[str] = strawberry_django.filter_field()
  45. is_active: FilterLookup[bool] = strawberry_django.filter_field()
  46. regions: Annotated['RegionFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  47. strawberry_django.filter_field()
  48. )
  49. region_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  50. strawberry_django.filter_field()
  51. )
  52. site_groups: Annotated['SiteGroupFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  53. strawberry_django.filter_field()
  54. )
  55. site_group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  56. strawberry_django.filter_field()
  57. )
  58. sites: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  59. locations: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  60. strawberry_django.filter_field()
  61. )
  62. device_types: Annotated['DeviceTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  63. strawberry_django.filter_field()
  64. )
  65. roles: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  66. strawberry_django.filter_field()
  67. )
  68. platforms: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  69. strawberry_django.filter_field()
  70. )
  71. cluster_types: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  72. strawberry_django.filter_field()
  73. )
  74. cluster_groups: Annotated['ClusterGroupFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  75. strawberry_django.filter_field()
  76. )
  77. clusters: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  78. strawberry_django.filter_field()
  79. )
  80. tenant_groups: Annotated['TenantGroupFilter', strawberry.lazy('tenancy.graphql.filters')] | None = (
  81. strawberry_django.filter_field()
  82. )
  83. tenant_group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  84. strawberry_django.filter_field()
  85. )
  86. tenants: Annotated['TenantFilter', strawberry.lazy('tenancy.graphql.filters')] | None = (
  87. strawberry_django.filter_field()
  88. )
  89. tags: Annotated['TagFilter', strawberry.lazy('extras.graphql.filters')] | None = strawberry_django.filter_field()
  90. data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  91. strawberry_django.filter_field()
  92. )
  93. @strawberry_django.filter_type(models.ConfigContextProfile, lookups=True)
  94. class ConfigContextProfileFilter(SyncedDataFilterMixin, PrimaryModelFilterMixin):
  95. name: FilterLookup[str] = strawberry_django.filter_field()
  96. description: FilterLookup[str] = strawberry_django.filter_field()
  97. tags: Annotated['TagFilter', strawberry.lazy('extras.graphql.filters')] | None = strawberry_django.filter_field()
  98. @strawberry_django.filter_type(models.ConfigTemplate, lookups=True)
  99. class ConfigTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLogFilterMixin):
  100. name: FilterLookup[str] | None = strawberry_django.filter_field()
  101. description: FilterLookup[str] | None = strawberry_django.filter_field()
  102. template_code: FilterLookup[str] | None = strawberry_django.filter_field()
  103. environment_params: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  104. strawberry_django.filter_field()
  105. )
  106. mime_type: FilterLookup[str] | None = strawberry_django.filter_field()
  107. file_name: FilterLookup[str] | None = strawberry_django.filter_field()
  108. file_extension: FilterLookup[str] | None = strawberry_django.filter_field()
  109. as_attachment: FilterLookup[bool] | None = strawberry_django.filter_field()
  110. @strawberry_django.filter_type(models.CustomField, lookups=True)
  111. class CustomFieldFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  112. type: Annotated['CustomFieldTypeEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  113. strawberry_django.filter_field()
  114. )
  115. object_types: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  116. strawberry_django.filter_field()
  117. )
  118. related_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  119. strawberry_django.filter_field()
  120. )
  121. name: FilterLookup[str] | None = strawberry_django.filter_field()
  122. label: FilterLookup[str] | None = strawberry_django.filter_field()
  123. group_name: FilterLookup[str] | None = strawberry_django.filter_field()
  124. description: FilterLookup[str] | None = strawberry_django.filter_field()
  125. required: FilterLookup[bool] | None = strawberry_django.filter_field()
  126. unique: FilterLookup[bool] | None = strawberry_django.filter_field()
  127. search_weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  128. strawberry_django.filter_field()
  129. )
  130. filter_logic: Annotated['CustomFieldFilterLogicEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  131. strawberry_django.filter_field()
  132. )
  133. default: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  134. strawberry_django.filter_field()
  135. )
  136. related_object_filter: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  137. strawberry_django.filter_field()
  138. )
  139. weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  140. strawberry_django.filter_field()
  141. )
  142. validation_minimum: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  143. strawberry_django.filter_field()
  144. )
  145. validation_maximum: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  146. strawberry_django.filter_field()
  147. )
  148. validation_regex: FilterLookup[str] | None = strawberry_django.filter_field()
  149. choice_set: Annotated['CustomFieldChoiceSetFilter', strawberry.lazy('extras.graphql.filters')] | None = (
  150. strawberry_django.filter_field()
  151. )
  152. choice_set_id: ID | None = strawberry_django.filter_field()
  153. ui_visible: Annotated['CustomFieldUIVisibleEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  154. strawberry_django.filter_field()
  155. )
  156. ui_editable: Annotated['CustomFieldUIEditableEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  157. strawberry_django.filter_field()
  158. )
  159. is_cloneable: FilterLookup[bool] | None = strawberry_django.filter_field()
  160. comments: FilterLookup[str] | None = strawberry_django.filter_field()
  161. @strawberry_django.filter_type(models.CustomFieldChoiceSet, lookups=True)
  162. class CustomFieldChoiceSetFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  163. name: FilterLookup[str] | None = strawberry_django.filter_field()
  164. description: FilterLookup[str] | None = strawberry_django.filter_field()
  165. base_choices: Annotated['CustomFieldChoiceSetBaseEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  166. strawberry_django.filter_field()
  167. )
  168. extra_choices: Annotated['StringArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  169. strawberry_django.filter_field()
  170. )
  171. order_alphabetically: FilterLookup[bool] | None = strawberry_django.filter_field()
  172. @strawberry_django.filter_type(models.CustomLink, lookups=True)
  173. class CustomLinkFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  174. name: FilterLookup[str] | None = strawberry_django.filter_field()
  175. enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
  176. link_text: FilterLookup[str] | None = strawberry_django.filter_field()
  177. link_url: FilterLookup[str] | None = strawberry_django.filter_field()
  178. weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  179. strawberry_django.filter_field()
  180. )
  181. group_name: FilterLookup[str] | None = strawberry_django.filter_field()
  182. button_class: Annotated['CustomLinkButtonClassEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  183. strawberry_django.filter_field()
  184. )
  185. new_window: FilterLookup[bool] | None = strawberry_django.filter_field()
  186. @strawberry_django.filter_type(models.ExportTemplate, lookups=True)
  187. class ExportTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLogFilterMixin):
  188. name: FilterLookup[str] | None = strawberry_django.filter_field()
  189. description: FilterLookup[str] | None = strawberry_django.filter_field()
  190. template_code: FilterLookup[str] | None = strawberry_django.filter_field()
  191. environment_params: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  192. strawberry_django.filter_field()
  193. )
  194. mime_type: FilterLookup[str] | None = strawberry_django.filter_field()
  195. file_name: FilterLookup[str] | None = strawberry_django.filter_field()
  196. file_extension: FilterLookup[str] | None = strawberry_django.filter_field()
  197. as_attachment: FilterLookup[bool] | None = strawberry_django.filter_field()
  198. @strawberry_django.filter_type(models.ImageAttachment, lookups=True)
  199. class ImageAttachmentFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  200. object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  201. strawberry_django.filter_field()
  202. )
  203. object_id: ID | None = strawberry_django.filter_field()
  204. image_height: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  205. strawberry_django.filter_field()
  206. )
  207. image_width: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  208. strawberry_django.filter_field()
  209. )
  210. name: FilterLookup[str] | None = strawberry_django.filter_field()
  211. @strawberry_django.filter_type(models.JournalEntry, lookups=True)
  212. class JournalEntryFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin):
  213. assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  214. strawberry_django.filter_field()
  215. )
  216. assigned_object_type_id: ID | None = strawberry_django.filter_field()
  217. assigned_object_id: ID | None = strawberry_django.filter_field()
  218. created_by: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = (
  219. strawberry_django.filter_field()
  220. )
  221. kind: Annotated['JournalEntryKindEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  222. strawberry_django.filter_field()
  223. )
  224. comments: FilterLookup[str] | None = strawberry_django.filter_field()
  225. @strawberry_django.filter_type(models.NotificationGroup, lookups=True)
  226. class NotificationGroupFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  227. name: FilterLookup[str] | None = strawberry_django.filter_field()
  228. description: FilterLookup[str] | None = strawberry_django.filter_field()
  229. groups: Annotated['GroupFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
  230. users: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
  231. @strawberry_django.filter_type(models.SavedFilter, lookups=True)
  232. class SavedFilterFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  233. name: FilterLookup[str] | None = strawberry_django.filter_field()
  234. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  235. description: FilterLookup[str] | None = strawberry_django.filter_field()
  236. user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
  237. user_id: ID | None = strawberry_django.filter_field()
  238. weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  239. strawberry_django.filter_field()
  240. )
  241. enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
  242. shared: FilterLookup[bool] | None = strawberry_django.filter_field()
  243. parameters: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  244. strawberry_django.filter_field()
  245. )
  246. @strawberry_django.filter_type(models.TableConfig, lookups=True)
  247. class TableConfigFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
  248. name: FilterLookup[str] | None = strawberry_django.filter_field()
  249. description: FilterLookup[str] | None = strawberry_django.filter_field()
  250. user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
  251. user_id: ID | None = strawberry_django.filter_field()
  252. weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  253. strawberry_django.filter_field()
  254. )
  255. enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
  256. shared: FilterLookup[bool] | None = strawberry_django.filter_field()
  257. @strawberry_django.filter_type(models.Tag, lookups=True)
  258. class TagFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin, TagBaseFilterMixin):
  259. color: Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')] | None = strawberry_django.filter_field()
  260. description: FilterLookup[str] | None = strawberry_django.filter_field()
  261. @strawberry_django.filter_type(models.Webhook, lookups=True)
  262. class WebhookFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin):
  263. name: FilterLookup[str] | None = strawberry_django.filter_field()
  264. description: FilterLookup[str] | None = strawberry_django.filter_field()
  265. payload_url: FilterLookup[str] | None = strawberry_django.filter_field()
  266. http_method: Annotated['WebhookHttpMethodEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  267. strawberry_django.filter_field()
  268. )
  269. http_content_type: FilterLookup[str] | None = strawberry_django.filter_field()
  270. additional_headers: FilterLookup[str] | None = strawberry_django.filter_field()
  271. body_template: FilterLookup[str] | None = strawberry_django.filter_field()
  272. secret: FilterLookup[str] | None = strawberry_django.filter_field()
  273. ssl_verification: FilterLookup[bool] | None = strawberry_django.filter_field()
  274. ca_file_path: FilterLookup[str] | None = strawberry_django.filter_field()
  275. events: Annotated['EventRuleFilter', strawberry.lazy('extras.graphql.filters')] | None = (
  276. strawberry_django.filter_field()
  277. )
  278. @strawberry_django.filter_type(models.EventRule, lookups=True)
  279. class EventRuleFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin):
  280. name: FilterLookup[str] | None = strawberry_django.filter_field()
  281. description: FilterLookup[str] | None = strawberry_django.filter_field()
  282. event_types: Annotated['StringArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  283. strawberry_django.filter_field()
  284. )
  285. enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
  286. conditions: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  287. strawberry_django.filter_field()
  288. )
  289. action_type: Annotated['EventRuleActionEnum', strawberry.lazy('extras.graphql.enums')] | None = (
  290. strawberry_django.filter_field()
  291. )
  292. action_object_type: FilterLookup[str] | None = strawberry_django.filter_field()
  293. action_object_type_id: ID | None = strawberry_django.filter_field()
  294. action_object_id: ID | None = strawberry_django.filter_field()
  295. action_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  296. strawberry_django.filter_field()
  297. )
  298. comments: FilterLookup[str] | None = strawberry_django.filter_field()