filters.py 2.5 KB

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