filters.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. from datetime import date
  2. from typing import Annotated, TYPE_CHECKING
  3. import strawberry
  4. import strawberry_django
  5. from strawberry.scalars import ID
  6. from strawberry_django import FilterLookup, DateFilterLookup
  7. from circuits import models
  8. from core.graphql.filter_mixins import BaseObjectTypeFilterMixin, ChangeLogFilterMixin
  9. from dcim.graphql.filter_mixins import CabledObjectModelFilterMixin
  10. from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin
  11. from netbox.graphql.filter_mixins import (
  12. DistanceFilterMixin,
  13. ImageAttachmentFilterMixin,
  14. OrganizationalModelFilterMixin,
  15. PrimaryModelFilterMixin,
  16. )
  17. from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
  18. from .filter_mixins import BaseCircuitTypeFilterMixin
  19. if TYPE_CHECKING:
  20. from core.graphql.filters import ContentTypeFilter
  21. from dcim.graphql.filters import InterfaceFilter, LocationFilter, RegionFilter, SiteFilter, SiteGroupFilter
  22. from ipam.graphql.filters import ASNFilter
  23. from netbox.graphql.filter_lookups import IntegerLookup
  24. from .enums import *
  25. __all__ = (
  26. 'CircuitFilter',
  27. 'CircuitGroupAssignmentFilter',
  28. 'CircuitGroupFilter',
  29. 'CircuitTerminationFilter',
  30. 'CircuitTypeFilter',
  31. 'ProviderFilter',
  32. 'ProviderAccountFilter',
  33. 'ProviderNetworkFilter',
  34. 'VirtualCircuitFilter',
  35. 'VirtualCircuitTerminationFilter',
  36. 'VirtualCircuitTypeFilter',
  37. )
  38. @strawberry_django.filter(models.CircuitTermination, lookups=True)
  39. class CircuitTerminationFilter(
  40. BaseObjectTypeFilterMixin,
  41. CustomFieldsFilterMixin,
  42. TagsFilterMixin,
  43. ChangeLogFilterMixin,
  44. CabledObjectModelFilterMixin,
  45. ):
  46. circuit: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  47. strawberry_django.filter_field()
  48. )
  49. term_side: Annotated['CircuitTerminationSideEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
  50. strawberry_django.filter_field()
  51. )
  52. termination_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  53. strawberry_django.filter_field()
  54. )
  55. termination_id: ID | None = strawberry_django.filter_field()
  56. port_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  57. strawberry_django.filter_field()
  58. )
  59. upstream_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  60. strawberry_django.filter_field()
  61. )
  62. xconnect_id: FilterLookup[str] | None = strawberry_django.filter_field()
  63. pp_info: FilterLookup[str] | None = strawberry_django.filter_field()
  64. description: FilterLookup[str] | None = strawberry_django.filter_field()
  65. # Cached relations
  66. _provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  67. strawberry_django.filter_field(name='provider_network')
  68. )
  69. _location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  70. strawberry_django.filter_field(name='location')
  71. )
  72. _region: Annotated['RegionFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  73. strawberry_django.filter_field(name='region')
  74. )
  75. _site_group: Annotated['SiteGroupFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  76. strawberry_django.filter_field(name='site_group')
  77. )
  78. _site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  79. strawberry_django.filter_field(name='site')
  80. )
  81. @strawberry_django.filter(models.Circuit, lookups=True)
  82. class CircuitFilter(
  83. ContactFilterMixin,
  84. ImageAttachmentFilterMixin,
  85. DistanceFilterMixin,
  86. TenancyFilterMixin,
  87. PrimaryModelFilterMixin
  88. ):
  89. cid: FilterLookup[str] | None = strawberry_django.filter_field()
  90. provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  91. strawberry_django.filter_field()
  92. )
  93. provider_id: ID | None = strawberry_django.filter_field()
  94. provider_account: Annotated['ProviderAccountFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  95. strawberry_django.filter_field()
  96. )
  97. provider_account_id: ID | None = strawberry_django.filter_field()
  98. type: Annotated['CircuitTypeFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  99. strawberry_django.filter_field()
  100. )
  101. type_id: ID | None = strawberry_django.filter_field()
  102. status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
  103. strawberry_django.filter_field()
  104. )
  105. install_date: DateFilterLookup[date] | None = strawberry_django.filter_field()
  106. termination_date: DateFilterLookup[date] | None = strawberry_django.filter_field()
  107. commit_rate: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  108. strawberry_django.filter_field()
  109. )
  110. terminations: Annotated['CircuitTerminationFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  111. strawberry_django.filter_field()
  112. )
  113. @strawberry_django.filter(models.CircuitType, lookups=True)
  114. class CircuitTypeFilter(BaseCircuitTypeFilterMixin):
  115. pass
  116. @strawberry_django.filter(models.CircuitGroup, lookups=True)
  117. class CircuitGroupFilter(TenancyFilterMixin, OrganizationalModelFilterMixin):
  118. pass
  119. @strawberry_django.filter(models.CircuitGroupAssignment, lookups=True)
  120. class CircuitGroupAssignmentFilter(
  121. BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin
  122. ):
  123. member_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
  124. strawberry_django.filter_field()
  125. )
  126. member_id: ID | None = strawberry_django.filter_field()
  127. group: Annotated['CircuitGroupFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  128. strawberry_django.filter_field()
  129. )
  130. group_id: ID | None = strawberry_django.filter_field()
  131. priority: Annotated['CircuitPriorityEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
  132. strawberry_django.filter_field()
  133. )
  134. @strawberry_django.filter(models.Provider, lookups=True)
  135. class ProviderFilter(ContactFilterMixin, PrimaryModelFilterMixin):
  136. name: FilterLookup[str] | None = strawberry_django.filter_field()
  137. slug: FilterLookup[str] | None = strawberry_django.filter_field()
  138. asns: Annotated['ASNFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
  139. circuits: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  140. strawberry_django.filter_field()
  141. )
  142. @strawberry_django.filter(models.ProviderAccount, lookups=True)
  143. class ProviderAccountFilter(ContactFilterMixin, PrimaryModelFilterMixin):
  144. provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  145. strawberry_django.filter_field()
  146. )
  147. provider_id: ID | None = strawberry_django.filter_field()
  148. account: FilterLookup[str] | None = strawberry_django.filter_field()
  149. name: FilterLookup[str] | None = strawberry_django.filter_field()
  150. @strawberry_django.filter(models.ProviderNetwork, lookups=True)
  151. class ProviderNetworkFilter(PrimaryModelFilterMixin):
  152. name: FilterLookup[str] | None = strawberry_django.filter_field()
  153. provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  154. strawberry_django.filter_field()
  155. )
  156. provider_id: ID | None = strawberry_django.filter_field()
  157. service_id: FilterLookup[str] | None = strawberry_django.filter_field()
  158. @strawberry_django.filter(models.VirtualCircuitType, lookups=True)
  159. class VirtualCircuitTypeFilter(BaseCircuitTypeFilterMixin):
  160. pass
  161. @strawberry_django.filter(models.VirtualCircuit, lookups=True)
  162. class VirtualCircuitFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
  163. cid: FilterLookup[str] | None = strawberry_django.filter_field()
  164. provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  165. strawberry_django.filter_field()
  166. )
  167. provider_network_id: ID | None = strawberry_django.filter_field()
  168. provider_account: Annotated['ProviderAccountFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  169. strawberry_django.filter_field()
  170. )
  171. provider_account_id: ID | None = strawberry_django.filter_field()
  172. type: Annotated['VirtualCircuitTypeFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  173. strawberry_django.filter_field()
  174. )
  175. type_id: ID | None = strawberry_django.filter_field()
  176. status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
  177. strawberry_django.filter_field()
  178. )
  179. group_assignments: Annotated['CircuitGroupAssignmentFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  180. strawberry_django.filter_field()
  181. )
  182. @strawberry_django.filter(models.VirtualCircuitTermination, lookups=True)
  183. class VirtualCircuitTerminationFilter(
  184. BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin
  185. ):
  186. virtual_circuit: Annotated['VirtualCircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
  187. strawberry_django.filter_field()
  188. )
  189. virtual_circuit_id: ID | None = strawberry_django.filter_field()
  190. role: Annotated['VirtualCircuitTerminationRoleEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
  191. strawberry_django.filter_field()
  192. )
  193. interface: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  194. strawberry_django.filter_field()
  195. )
  196. interface_id: ID | None = strawberry_django.filter_field()
  197. description: FilterLookup[str] | None = strawberry_django.filter_field()