From 8894c35e8499f2e83d7266ae25cfeb9e10734da6 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 6 Mar 2025 14:52:33 -0500 Subject: [PATCH] Add missing GraphQL filters --- netbox/circuits/graphql/filters.py | 2 +- netbox/core/graphql/filters.py | 4 +++- netbox/dcim/graphql/filters.py | 23 ++++++++++++++++++++++- netbox/extras/graphql/filter_mixins.py | 5 +---- netbox/extras/graphql/filters.py | 10 +++++++++- netbox/ipam/graphql/filters.py | 2 +- netbox/tenancy/graphql/filters.py | 3 +++ netbox/users/graphql/filters.py | 2 ++ netbox/virtualization/graphql/filters.py | 3 +++ netbox/wireless/graphql/filters.py | 3 +++ 10 files changed, 48 insertions(+), 9 deletions(-) diff --git a/netbox/circuits/graphql/filters.py b/netbox/circuits/graphql/filters.py index a3f2f2e85..d8154368b 100644 --- a/netbox/circuits/graphql/filters.py +++ b/netbox/circuits/graphql/filters.py @@ -121,7 +121,7 @@ class CircuitGroupAssignmentFilter( member_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) - member_type_id: ID | None = strawberry_django.filter_field() + member_id: ID | None = strawberry_django.filter_field() group: Annotated['CircuitGroupFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/core/graphql/filters.py b/netbox/core/graphql/filters.py index e1feac715..476e69533 100644 --- a/netbox/core/graphql/filters.py +++ b/netbox/core/graphql/filters.py @@ -75,7 +75,9 @@ class ObjectChangeFilter(BaseFilterMixin): ) changed_object_type_id: ID | None = strawberry_django.filter_field() changed_object_id: ID | None = strawberry_django.filter_field() - related_object_type_id: ID | None = strawberry_django.filter_field() + related_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) related_object_id: ID | None = strawberry_django.filter_field() object_repr: FilterLookup[str] | None = strawberry_django.filter_field() prechange_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py index 1a146f82d..5d9e84aff 100644 --- a/netbox/dcim/graphql/filters.py +++ b/netbox/dcim/graphql/filters.py @@ -47,7 +47,6 @@ __all__ = ( 'DeviceFilter', 'DeviceBayFilter', 'DeviceBayTemplateFilter', - 'InventoryItemTemplateFilter', 'DeviceRoleFilter', 'DeviceTypeFilter', 'FrontPortFilter', @@ -56,6 +55,7 @@ __all__ = ( 'InterfaceTemplateFilter', 'InventoryItemFilter', 'InventoryItemRoleFilter', + 'InventoryItemTemplateFilter', 'LocationFilter', 'MACAddressFilter', 'ManufacturerFilter', @@ -253,6 +253,16 @@ class DeviceFilter( modules: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) + console_port_count: FilterLookup[int] | None = strawberry_django.filter_field() + console_server_port_count: FilterLookup[int] | None = strawberry_django.filter_field() + power_port_count: FilterLookup[int] | None = strawberry_django.filter_field() + power_outlet_count: FilterLookup[int] | None = strawberry_django.filter_field() + interface_count: FilterLookup[int] | None = strawberry_django.filter_field() + front_port_count: FilterLookup[int] | None = strawberry_django.filter_field() + rear_port_count: FilterLookup[int] | None = strawberry_django.filter_field() + device_bay_count: FilterLookup[int] | None = strawberry_django.filter_field() + module_bay_count: FilterLookup[int] | None = strawberry_django.filter_field() + inventory_item_count: FilterLookup[int] | None = strawberry_django.filter_field() @strawberry_django.filter(models.DeviceBay, lookups=True) @@ -324,6 +334,16 @@ class DeviceTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilterMixin, Weig rear_image: Annotated['ImageAttachmentFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) + console_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + console_server_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + power_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + power_outlet_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + interface_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + front_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + rear_port_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + device_bay_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + module_bay_template_count: FilterLookup[int] | None = strawberry_django.filter_field() + inventory_item_template_count: FilterLookup[int] | None = strawberry_django.filter_field() @strawberry_django.filter(models.FrontPort, lookups=True) @@ -802,6 +822,7 @@ class VirtualChassisFilter(PrimaryModelFilterMixin): master_id: ID | None = strawberry_django.filter_field() name: FilterLookup[str] | None = strawberry_django.filter_field() domain: FilterLookup[str] | None = strawberry_django.filter_field() + member_count: FilterLookup[int] | None = strawberry_django.filter_field() @strawberry_django.filter(models.VirtualDeviceContext, lookups=True) diff --git a/netbox/extras/graphql/filter_mixins.py b/netbox/extras/graphql/filter_mixins.py index b0e8d3c53..228f78b3c 100644 --- a/netbox/extras/graphql/filter_mixins.py +++ b/netbox/extras/graphql/filter_mixins.py @@ -39,10 +39,7 @@ class TagsFilterMixin(BaseFilterMixin): @dataclass class ConfigContextFilterMixin(BaseFilterMixin): - local_config_context: Annotated['ConfigContextFilter', strawberry.lazy('extras.graphql.filters')] | None = ( - strawberry_django.filter_field() - ) - config_context: Annotated['ConfigContextFilter', strawberry.lazy('extras.graphql.filters')] | None = ( + local_context_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/extras/graphql/filters.py b/netbox/extras/graphql/filters.py index 733fb6423..f7fb8ec96 100644 --- a/netbox/extras/graphql/filters.py +++ b/netbox/extras/graphql/filters.py @@ -118,7 +118,12 @@ class CustomFieldFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin): type: Annotated['CustomFieldTypeEnum', strawberry.lazy('extras.graphql.enums')] | None = ( strawberry_django.filter_field() ) - related_object_type_id: ID | None = strawberry_django.filter_field() + object_types: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) + related_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) name: FilterLookup[str] | None = strawberry_django.filter_field() label: FilterLookup[str] | None = strawberry_django.filter_field() group_name: FilterLookup[str] | None = strawberry_django.filter_field() @@ -202,6 +207,9 @@ class ExportTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, Cha @strawberry_django.filter(models.ImageAttachment, lookups=True) class ImageAttachmentFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin): + object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) object_id: ID | None = strawberry_django.filter_field() image_height: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py index 385f48cce..e45e406ee 100644 --- a/netbox/ipam/graphql/filters.py +++ b/netbox/ipam/graphql/filters.py @@ -107,7 +107,7 @@ class FHRPGroupFilter(PrimaryModelFilterMixin): @strawberry_django.filter(models.FHRPGroupAssignment, lookups=True) class FHRPGroupAssignmentFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin): - inteface_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + interface_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) interface_id: FilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/tenancy/graphql/filters.py b/netbox/tenancy/graphql/filters.py index a63f8da60..597784457 100644 --- a/netbox/tenancy/graphql/filters.py +++ b/netbox/tenancy/graphql/filters.py @@ -150,6 +150,9 @@ class ContactGroupFilter(NestedGroupModelFilterMixin): @strawberry_django.filter(models.ContactAssignment, lookups=True) class ContactAssignmentFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLogFilterMixin): + object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) object_id: ID | None = strawberry_django.filter_field() contact: Annotated['ContactFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( strawberry_django.filter_field() diff --git a/netbox/users/graphql/filters.py b/netbox/users/graphql/filters.py index 1027c7c39..8ead12213 100644 --- a/netbox/users/graphql/filters.py +++ b/netbox/users/graphql/filters.py @@ -45,7 +45,9 @@ class UserFilter(BaseObjectTypeFilterMixin): first_name: FilterLookup[str] | None = strawberry_django.filter_field() last_name: FilterLookup[str] | None = strawberry_django.filter_field() email: FilterLookup[str] | None = strawberry_django.filter_field() + is_superuser: FilterLookup[bool] | None = strawberry_django.filter_field() is_staff: FilterLookup[bool] | None = strawberry_django.filter_field() is_active: FilterLookup[bool] | None = strawberry_django.filter_field() date_joined: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() + last_login: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() groups: Annotated['GroupFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() diff --git a/netbox/virtualization/graphql/filters.py b/netbox/virtualization/graphql/filters.py index c9bd96418..66c0e7139 100644 --- a/netbox/virtualization/graphql/filters.py +++ b/netbox/virtualization/graphql/filters.py @@ -79,6 +79,7 @@ class VirtualMachineFilter( TenancyFilterMixin, PrimaryModelFilterMixin, ): + name: FilterLookup[str] | None = strawberry_django.filter_field() site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() site_id: ID | None = strawberry_django.filter_field() cluster: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( @@ -116,6 +117,8 @@ class VirtualMachineFilter( strawberry_django.filter_field() ) serial: FilterLookup[str] | None = strawberry_django.filter_field() + interface_count: FilterLookup[int] | None = strawberry_django.filter_field() + virtual_disk_count: FilterLookup[int] | None = strawberry_django.filter_field() interfaces: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/wireless/graphql/filters.py b/netbox/wireless/graphql/filters.py index 198f0862a..cdbf715a2 100644 --- a/netbox/wireless/graphql/filters.py +++ b/netbox/wireless/graphql/filters.py @@ -49,6 +49,9 @@ class WirelessLANFilter( PrimaryModelFilterMixin ): ssid: FilterLookup[str] | None = strawberry_django.filter_field() + status: Annotated['WirelessLANStatusEnum', strawberry.lazy('wireless.graphql.enums')] | None = ( + strawberry_django.filter_field() + ) group: Annotated['WirelessLANGroupFilter', strawberry.lazy('wireless.graphql.filters')] | None = ( strawberry_django.filter_field() )