types.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import strawberry
  2. import strawberry_django
  3. from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
  4. from tenancy import models
  5. from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
  6. from .filters import *
  7. __all__ = (
  8. 'ContactAssignmentType',
  9. 'ContactGroupType',
  10. 'ContactRoleType',
  11. 'ContactType',
  12. 'TenantType',
  13. 'TenantGroupType',
  14. )
  15. class ContactAssignmentsMixin:
  16. # assignments = graphene.List('tenancy.graphql.types.ContactAssignmentType')
  17. def resolve_assignments(self, info):
  18. return self.assignments.restrict(info.context.user, 'view')
  19. #
  20. # Tenants
  21. #
  22. @strawberry_django.type(
  23. models.Tenant,
  24. fields='__all__',
  25. # filters=TenantFilter
  26. )
  27. class TenantType(NetBoxObjectType):
  28. pass
  29. @strawberry_django.type(
  30. models.TenantGroup,
  31. fields='__all__',
  32. # filters=TenantGroupFilter
  33. )
  34. class TenantGroupType(OrganizationalObjectType):
  35. pass
  36. #
  37. # Contacts
  38. #
  39. @strawberry_django.type(
  40. models.Contact,
  41. fields='__all__',
  42. # filters=ContactFilter
  43. )
  44. class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
  45. pass
  46. @strawberry_django.type(
  47. models.ContactRole,
  48. fields='__all__',
  49. # filters=ContactRoleFilter
  50. )
  51. class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
  52. pass
  53. @strawberry_django.type(
  54. models.ContactGroup,
  55. fields='__all__',
  56. # filters=ContactGroupFilter
  57. )
  58. class ContactGroupType(OrganizationalObjectType):
  59. pass
  60. @strawberry_django.type(
  61. models.ContactAssignment,
  62. fields='__all__',
  63. # filters=ContactAssignmentFilter
  64. )
  65. class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
  66. pass