From f362522590ca4b8be0851cb34c146e858134e265 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 21 Mar 2025 07:32:48 -0700 Subject: [PATCH] 18245 graphql --- netbox/dcim/graphql/filters.py | 15 +++++++++++++++ netbox/dcim/graphql/schema.py | 3 +++ netbox/dcim/graphql/types.py | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py index 4203517cc..1b09a87e5 100644 --- a/netbox/dcim/graphql/filters.py +++ b/netbox/dcim/graphql/filters.py @@ -53,6 +53,7 @@ __all__ = ( 'DeviceBayFilter', 'DeviceBayTemplateFilter', 'DeviceRoleFilter', + 'DeviceRoleGroupFilter', 'DeviceTypeFilter', 'FrontPortFilter', 'FrontPortTemplateFilter', @@ -309,6 +310,20 @@ class DeviceRoleFilter(OrganizationalModelFilterMixin, RenderConfigFilterMixin): vm_role: FilterLookup[bool] | None = strawberry_django.filter_field() +@strawberry_django.filter(models.DeviceRoleGroup, lookups=True) +class DeviceRoleGroupFilter(OrganizationalModelFilterMixin): + parent: Annotated['DeviceRoleGroupFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) + parent_id: ID | None = strawberry.UNSET + roles: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) + children: Annotated['DeviceRoleGroupFilter', strawberry.lazy('dcim.graphql.filters'), True] | None = ( + strawberry_django.filter_field() + ) + + @strawberry_django.filter(models.DeviceType, lookups=True) class DeviceTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilterMixin, WeightFilterMixin): manufacturer: Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( diff --git a/netbox/dcim/graphql/schema.py b/netbox/dcim/graphql/schema.py index 011a2b58b..5b2cd1fb7 100644 --- a/netbox/dcim/graphql/schema.py +++ b/netbox/dcim/graphql/schema.py @@ -35,6 +35,9 @@ class DCIMQuery: device_role: DeviceRoleType = strawberry_django.field() device_role_list: List[DeviceRoleType] = strawberry_django.field() + device_role_group: DeviceRoleGroupType = strawberry_django.field() + device_role_group_list: List[DeviceRoleGroupType] = strawberry_django.field() + device_type: DeviceTypeType = strawberry_django.field() device_type_list: List[DeviceTypeType] = strawberry_django.field() diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 6cd072479..78e6badac 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -46,6 +46,7 @@ __all__ = ( 'DeviceBayType', 'DeviceBayTemplateType', 'DeviceRoleType', + 'DeviceRoleGroupType', 'DeviceTypeType', 'FrontPortType', 'FrontPortTemplateType', @@ -334,6 +335,14 @@ class DeviceRoleType(OrganizationalObjectType): devices: List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]] +@strawberry_django.type(models.DeviceRoleGroup, fields='__all__', filters=DeviceRoleGroupFilter) +class DeviceRoleGroupType(OrganizationalObjectType): + parent: Annotated['DeviceRoleGroupType', strawberry.lazy('dcim.graphql.types')] | None + + roles: List[DeviceRoleType] + children: List[Annotated['DeviceRoleGroupType', strawberry.lazy('dcim.graphql.types')]] + + @strawberry_django.type( models.DeviceType, fields='__all__',