filters.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import TYPE_CHECKING, Annotated
  2. import strawberry
  3. import strawberry_django
  4. from strawberry.scalars import ID
  5. from strawberry_django import BaseFilterLookup, FilterLookup
  6. from dcim.graphql.filter_mixins import ScopedFilterMixin
  7. from netbox.graphql.filter_mixins import DistanceFilterMixin
  8. from netbox.graphql.filters import NestedGroupModelFilter, PrimaryModelFilter
  9. from tenancy.graphql.filter_mixins import TenancyFilterMixin
  10. from wireless import models
  11. from .filter_mixins import WirelessAuthenticationFilterMixin
  12. if TYPE_CHECKING:
  13. from dcim.graphql.filters import InterfaceFilter
  14. from ipam.graphql.filters import VLANFilter
  15. from .enums import *
  16. __all__ = (
  17. 'WirelessLANFilter',
  18. 'WirelessLANGroupFilter',
  19. 'WirelessLinkFilter',
  20. )
  21. @strawberry_django.filter_type(models.WirelessLANGroup, lookups=True)
  22. class WirelessLANGroupFilter(NestedGroupModelFilter):
  23. pass
  24. @strawberry_django.filter_type(models.WirelessLAN, lookups=True)
  25. class WirelessLANFilter(
  26. WirelessAuthenticationFilterMixin,
  27. ScopedFilterMixin,
  28. TenancyFilterMixin,
  29. PrimaryModelFilter
  30. ):
  31. ssid: FilterLookup[str] | None = strawberry_django.filter_field()
  32. status: BaseFilterLookup[Annotated['WirelessLANStatusEnum', strawberry.lazy('wireless.graphql.enums')]] | None = (
  33. strawberry_django.filter_field()
  34. )
  35. group: Annotated['WirelessLANGroupFilter', strawberry.lazy('wireless.graphql.filters')] | None = (
  36. strawberry_django.filter_field()
  37. )
  38. group_id: ID | None = strawberry_django.filter_field()
  39. vlan: Annotated['VLANFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
  40. vlan_id: ID | None = strawberry_django.filter_field()
  41. @strawberry_django.filter_type(models.WirelessLink, lookups=True)
  42. class WirelessLinkFilter(
  43. WirelessAuthenticationFilterMixin,
  44. DistanceFilterMixin,
  45. TenancyFilterMixin,
  46. PrimaryModelFilter
  47. ):
  48. interface_a: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  49. strawberry_django.filter_field()
  50. )
  51. interface_a_id: ID | None = strawberry_django.filter_field()
  52. interface_b: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  53. strawberry_django.filter_field()
  54. )
  55. interface_b_id: ID | None = strawberry_django.filter_field()
  56. ssid: FilterLookup[str] | None = strawberry_django.filter_field()
  57. status: BaseFilterLookup[Annotated['WirelessLANStatusEnum', strawberry.lazy('wireless.graphql.enums')]] | None = (
  58. strawberry_django.filter_field()
  59. )