diff --git a/base_requirements.txt b/base_requirements.txt index a4e396135..7f276eb9c 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -157,8 +157,7 @@ strawberry-graphql # Strawberry GraphQL Django extension # https://github.com/strawberry-graphql/strawberry-django/releases -# Blocked by #21450 -strawberry-graphql-django==0.75.0 +strawberry-graphql-django # SVG image rendering (used for rack elevations) # https://github.com/mozman/svgwrite/blob/master/NEWS.rst diff --git a/netbox/circuits/graphql/filters.py b/netbox/circuits/graphql/filters.py index f531a16ff..94ec9fec2 100644 --- a/netbox/circuits/graphql/filters.py +++ b/netbox/circuits/graphql/filters.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, DateFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, DateFilterLookup, StrFilterLookup from circuits import models from circuits.graphql.filter_mixins import CircuitTypeFilterMixin @@ -62,9 +62,9 @@ class CircuitTerminationFilter( upstream_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - xconnect_id: FilterLookup[str] | None = strawberry_django.filter_field() - pp_info: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + xconnect_id: StrFilterLookup[str] | None = strawberry_django.filter_field() + pp_info: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() # Cached relations _provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( @@ -92,7 +92,7 @@ class CircuitFilter( TenancyFilterMixin, PrimaryModelFilter ): - cid: FilterLookup[str] | None = strawberry_django.filter_field() + cid: StrFilterLookup[str] | None = strawberry_django.filter_field() provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -145,8 +145,8 @@ class CircuitGroupAssignmentFilter(CustomFieldsFilterMixin, TagsFilterMixin, Cha @strawberry_django.filter_type(models.Provider, lookups=True) class ProviderFilter(ContactFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() asns: Annotated['ASNFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() circuits: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() @@ -159,18 +159,18 @@ class ProviderAccountFilter(ContactFilterMixin, PrimaryModelFilter): strawberry_django.filter_field() ) provider_id: ID | None = strawberry_django.filter_field() - account: FilterLookup[str] | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() + account: StrFilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.ProviderNetwork, lookups=True) class ProviderNetworkFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() provider: Annotated['ProviderFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() ) provider_id: ID | None = strawberry_django.filter_field() - service_id: FilterLookup[str] | None = strawberry_django.filter_field() + service_id: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.VirtualCircuitType, lookups=True) @@ -180,7 +180,7 @@ class VirtualCircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter @strawberry_django.filter_type(models.VirtualCircuit, lookups=True) class VirtualCircuitFilter(TenancyFilterMixin, PrimaryModelFilter): - cid: FilterLookup[str] | None = strawberry_django.filter_field() + cid: StrFilterLookup[str] | None = strawberry_django.filter_field() provider_network: Annotated['ProviderNetworkFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -218,4 +218,4 @@ class VirtualCircuitTerminationFilter(CustomFieldsFilterMixin, TagsFilterMixin, strawberry_django.filter_field() ) interface_id: ID | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/core/graphql/filters.py b/netbox/core/graphql/filters.py index 65d10836a..3424c5737 100644 --- a/netbox/core/graphql/filters.py +++ b/netbox/core/graphql/filters.py @@ -5,7 +5,7 @@ import strawberry import strawberry_django from django.contrib.contenttypes.models import ContentType as DjangoContentType from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, DatetimeFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, DatetimeFilterLookup, FilterLookup, StrFilterLookup from core import models from netbox.graphql.filters import BaseModelFilter, PrimaryModelFilter @@ -32,23 +32,23 @@ class DataFileFilter(BaseModelFilter): strawberry_django.filter_field() ) source_id: ID | None = strawberry_django.filter_field() - path: FilterLookup[str] | None = strawberry_django.filter_field() + path: StrFilterLookup[str] | None = strawberry_django.filter_field() size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - hash: FilterLookup[str] | None = strawberry_django.filter_field() + hash: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.DataSource, lookups=True) class DataSourceFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - type: FilterLookup[str] | None = strawberry_django.filter_field() - source_url: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + type: StrFilterLookup[str] | None = strawberry_django.filter_field() + source_url: StrFilterLookup[str] | None = strawberry_django.filter_field() status: ( BaseFilterLookup[Annotated['DataSourceStatusEnum', strawberry.lazy('core.graphql.enums')]] | None ) = strawberry_django.filter_field() enabled: FilterLookup[bool] | None = strawberry_django.filter_field() - ignore_rules: FilterLookup[str] | None = strawberry_django.filter_field() + ignore_rules: StrFilterLookup[str] | None = strawberry_django.filter_field() parameters: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -62,8 +62,8 @@ class DataSourceFilter(PrimaryModelFilter): class ObjectChangeFilter(BaseModelFilter): time: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() - user_name: FilterLookup[str] | None = strawberry_django.filter_field() - request_id: FilterLookup[str] | None = strawberry_django.filter_field() + user_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + request_id: StrFilterLookup[str] | None = strawberry_django.filter_field() action: ( BaseFilterLookup[Annotated['ObjectChangeActionEnum', strawberry.lazy('core.graphql.enums')]] | None ) = strawberry_django.filter_field() @@ -76,7 +76,7 @@ class ObjectChangeFilter(BaseModelFilter): strawberry_django.filter_field() ) related_object_id: ID | None = strawberry_django.filter_field() - object_repr: FilterLookup[str] | None = strawberry_django.filter_field() + object_repr: StrFilterLookup[str] | None = strawberry_django.filter_field() prechange_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -87,5 +87,5 @@ class ObjectChangeFilter(BaseModelFilter): @strawberry_django.filter_type(DjangoContentType, lookups=True) class ContentTypeFilter(BaseModelFilter): - app_label: FilterLookup[str] | None = strawberry_django.filter_field() - model: FilterLookup[str] | None = strawberry_django.filter_field() + app_label: StrFilterLookup[str] | None = strawberry_django.filter_field() + model: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/dcim/graphql/filter_mixins.py b/netbox/dcim/graphql/filter_mixins.py index 26c3daf5f..07fa34616 100644 --- a/netbox/dcim/graphql/filter_mixins.py +++ b/netbox/dcim/graphql/filter_mixins.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, FilterLookup, StrFilterLookup from core.graphql.filters import ContentTypeFilter @@ -66,9 +66,9 @@ class ComponentModelFilterMixin: ) device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() device_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() - label: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + label: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() @dataclass @@ -96,9 +96,9 @@ class ComponentTemplateFilterMixin: strawberry_django.filter_field() ) device_type_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() - label: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + label: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() @dataclass diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py index 1bc884916..9d1d097a4 100644 --- a/netbox/dcim/graphql/filters.py +++ b/netbox/dcim/graphql/filters.py @@ -4,7 +4,7 @@ import strawberry import strawberry_django from django.db.models import Q from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, ComparisonFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, ComparisonFilterLookup, FilterLookup, StrFilterLookup from dcim import models from dcim.constants import * @@ -114,7 +114,7 @@ class CableFilter(TenancyFilterMixin, PrimaryModelFilter): status: BaseFilterLookup[Annotated['LinkStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - label: FilterLookup[str] | None = strawberry_django.filter_field() + label: StrFilterLookup[str] | None = strawberry_django.filter_field() color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -210,9 +210,9 @@ class DeviceFilter( platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) - name: FilterLookup[str] | None = strawberry_django.filter_field() - serial: FilterLookup[str] | None = strawberry_django.filter_field() - asset_tag: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + serial: StrFilterLookup[str] | None = strawberry_django.filter_field() + asset_tag: StrFilterLookup[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() location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( @@ -339,7 +339,7 @@ class InventoryItemTemplateFilter(ComponentTemplateFilterMixin, ChangeLoggedMode strawberry_django.filter_field() ) manufacturer_id: ID | None = strawberry_django.filter_field() - part_id: FilterLookup[str] | None = strawberry_django.filter_field() + part_id: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.DeviceRole, lookups=True) @@ -356,13 +356,13 @@ class DeviceTypeFilter(ImageAttachmentFilterMixin, WeightFilterMixin, PrimaryMod strawberry_django.filter_field() ) manufacturer_id: ID | None = strawberry_django.filter_field() - model: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + model: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() default_platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) default_platform_id: ID | None = strawberry_django.filter_field() - part_number: FilterLookup[str] | None = strawberry_django.filter_field() + part_number: StrFilterLookup[str] | None = strawberry_django.filter_field() instances: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -479,7 +479,7 @@ class PortTemplateMappingFilter(BaseModelFilter): @strawberry_django.filter_type(models.MACAddress, lookups=True) class MACAddressFilter(PrimaryModelFilter): - mac_address: FilterLookup[str] | None = strawberry_django.filter_field() + mac_address: StrFilterLookup[str] | None = strawberry_django.filter_field() assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -525,7 +525,7 @@ class InterfaceFilter( duplex: BaseFilterLookup[Annotated['InterfaceDuplexEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - wwn: FilterLookup[str] | None = strawberry_django.filter_field() + wwn: StrFilterLookup[str] | None = strawberry_django.filter_field() parent: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -645,9 +645,9 @@ class InventoryItemFilter(ComponentModelFilterMixin, NetBoxModelFilter): strawberry_django.filter_field() ) manufacturer_id: ID | None = strawberry_django.filter_field() - part_id: FilterLookup[str] | None = strawberry_django.filter_field() - serial: FilterLookup[str] | None = strawberry_django.filter_field() - asset_tag: FilterLookup[str] | None = strawberry_django.filter_field() + part_id: StrFilterLookup[str] | None = strawberry_django.filter_field() + serial: StrFilterLookup[str] | None = strawberry_django.filter_field() + asset_tag: StrFilterLookup[str] | None = strawberry_django.filter_field() discovered: FilterLookup[bool] | None = strawberry_django.filter_field() @@ -665,7 +665,7 @@ class LocationFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilt status: BaseFilterLookup[Annotated['LocationStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - facility: FilterLookup[str] | None = strawberry_django.filter_field() + facility: StrFilterLookup[str] | None = strawberry_django.filter_field() prefixes: Annotated['PrefixFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -694,8 +694,8 @@ class ModuleFilter(ConfigContextFilterMixin, PrimaryModelFilter): status: BaseFilterLookup[Annotated['ModuleStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - serial: FilterLookup[str] | None = strawberry_django.filter_field() - asset_tag: FilterLookup[str] | None = strawberry_django.filter_field() + serial: StrFilterLookup[str] | None = strawberry_django.filter_field() + asset_tag: StrFilterLookup[str] | None = strawberry_django.filter_field() console_ports: Annotated['ConsolePortFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -734,17 +734,17 @@ class ModuleBayFilter(ModularComponentFilterMixin, NetBoxModelFilter): strawberry_django.filter_field() ) parent_id: ID | None = strawberry_django.filter_field() - position: FilterLookup[str] | None = strawberry_django.filter_field() + position: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.ModuleBayTemplate, lookups=True) class ModuleBayTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter): - position: FilterLookup[str] | None = strawberry_django.filter_field() + position: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.ModuleTypeProfile, lookups=True) class ModuleTypeProfileFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.ModuleType, lookups=True) @@ -757,8 +757,8 @@ class ModuleTypeFilter(ImageAttachmentFilterMixin, WeightFilterMixin, PrimaryMod strawberry_django.filter_field() ) profile_id: ID | None = strawberry_django.filter_field() - model: FilterLookup[str] | None = strawberry_django.filter_field() - part_number: FilterLookup[str] | None = strawberry_django.filter_field() + model: StrFilterLookup[str] | None = strawberry_django.filter_field() + part_number: StrFilterLookup[str] | None = strawberry_django.filter_field() instances: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -818,7 +818,7 @@ class PowerFeedFilter(CabledObjectModelFilterMixin, TenancyFilterMixin, PrimaryM power_panel_id: ID | None = strawberry_django.filter_field() rack: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() rack_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['PowerFeedStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -889,7 +889,7 @@ class PowerPanelFilter(ContactFilterMixin, ImageAttachmentFilterMixin, PrimaryMo location_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.PowerPort, lookups=True) @@ -927,8 +927,8 @@ class RackTypeFilter(ImageAttachmentFilterMixin, RackFilterMixin, WeightFilterMi strawberry_django.filter_field() ) manufacturer_id: ID | None = strawberry_django.filter_field() - model: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + model: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() racks: Annotated['RackFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() rack_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field() @@ -949,8 +949,8 @@ class RackFilter( strawberry_django.filter_field() ) rack_type_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() - facility_id: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + facility_id: StrFilterLookup[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() location: Annotated['LocationFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( @@ -964,8 +964,8 @@ class RackFilter( ) role: Annotated['RackRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() role_id: ID | None = strawberry_django.filter_field() - serial: FilterLookup[str] | None = strawberry_django.filter_field() - asset_tag: FilterLookup[str] | None = strawberry_django.filter_field() + serial: StrFilterLookup[str] | None = strawberry_django.filter_field() + asset_tag: StrFilterLookup[str] | None = strawberry_django.filter_field() airflow: BaseFilterLookup[Annotated['RackAirflowEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -983,7 +983,7 @@ class RackReservationFilter(TenancyFilterMixin, PrimaryModelFilter): ) user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() user_id: ID | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['RackReservationStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -1034,8 +1034,8 @@ class RegionFilter(ContactFilterMixin, NestedGroupModelFilter): @strawberry_django.filter_type(models.Site, lookups=True) class SiteFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['SiteStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -1049,11 +1049,11 @@ class SiteFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMi group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - facility: FilterLookup[str] | None = strawberry_django.filter_field() + facility: StrFilterLookup[str] | None = strawberry_django.filter_field() asns: Annotated['ASNFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() - time_zone: FilterLookup[str] | None = strawberry_django.filter_field() - physical_address: FilterLookup[str] | None = strawberry_django.filter_field() - shipping_address: FilterLookup[str] | None = strawberry_django.filter_field() + time_zone: StrFilterLookup[str] | None = strawberry_django.filter_field() + physical_address: StrFilterLookup[str] | None = strawberry_django.filter_field() + shipping_address: StrFilterLookup[str] | None = strawberry_django.filter_field() latitude: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -1082,8 +1082,8 @@ class SiteGroupFilter(ContactFilterMixin, NestedGroupModelFilter): class VirtualChassisFilter(PrimaryModelFilter): master: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() master_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() - domain: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + domain: StrFilterLookup[str] | None = strawberry_django.filter_field() members: ( Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None ) = strawberry_django.filter_field() @@ -1094,7 +1094,7 @@ class VirtualChassisFilter(PrimaryModelFilter): class VirtualDeviceContextFilter(TenancyFilterMixin, PrimaryModelFilter): device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() device_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() status: ( BaseFilterLookup[Annotated['VirtualDeviceContextStatusEnum', strawberry.lazy('dcim.graphql.enums')]] | None ) = ( @@ -1111,7 +1111,7 @@ class VirtualDeviceContextFilter(TenancyFilterMixin, PrimaryModelFilter): strawberry_django.filter_field() ) primary_ip6_id: ID | None = strawberry_django.filter_field() - comments: FilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() interfaces: ( Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None ) = strawberry_django.filter_field() diff --git a/netbox/extras/graphql/filters.py b/netbox/extras/graphql/filters.py index ae7458b4e..7885720d5 100644 --- a/netbox/extras/graphql/filters.py +++ b/netbox/extras/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, FilterLookup, StrFilterLookup from extras import models from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin @@ -50,11 +50,11 @@ __all__ = ( @strawberry_django.filter_type(models.ConfigContext, lookups=True) class ConfigContextFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - description: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() is_active: FilterLookup[bool] | None = strawberry_django.filter_field() regions: Annotated['RegionFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( strawberry_django.filter_field() @@ -107,22 +107,22 @@ class ConfigContextFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.ConfigContextProfile, lookups=True) class ConfigContextProfileFilter(SyncedDataFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] = strawberry_django.filter_field() - description: FilterLookup[str] = strawberry_django.filter_field() + name: StrFilterLookup[str] = strawberry_django.filter_field() + description: StrFilterLookup[str] = strawberry_django.filter_field() tags: Annotated['TagFilter', strawberry.lazy('extras.graphql.filters')] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.ConfigTemplate, lookups=True) class ConfigTemplateFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() - template_code: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() + template_code: StrFilterLookup[str] | None = strawberry_django.filter_field() environment_params: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - mime_type: FilterLookup[str] | None = strawberry_django.filter_field() - file_name: FilterLookup[str] | None = strawberry_django.filter_field() - file_extension: FilterLookup[str] | None = strawberry_django.filter_field() + mime_type: StrFilterLookup[str] | None = strawberry_django.filter_field() + file_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + file_extension: StrFilterLookup[str] | None = strawberry_django.filter_field() as_attachment: FilterLookup[bool] | None = strawberry_django.filter_field() @@ -137,10 +137,10 @@ class CustomFieldFilter(ChangeLoggedModelFilter): 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() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + label: StrFilterLookup[str] | None = strawberry_django.filter_field() + group_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() required: FilterLookup[bool] | None = strawberry_django.filter_field() unique: FilterLookup[bool] | None = strawberry_django.filter_field() search_weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( @@ -166,7 +166,7 @@ class CustomFieldFilter(ChangeLoggedModelFilter): validation_maximum: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - validation_regex: FilterLookup[str] | None = strawberry_django.filter_field() + validation_regex: StrFilterLookup[str] | None = strawberry_django.filter_field() choice_set: Annotated['CustomFieldChoiceSetFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -182,13 +182,13 @@ class CustomFieldFilter(ChangeLoggedModelFilter): strawberry_django.filter_field() ) is_cloneable: FilterLookup[bool] | None = strawberry_django.filter_field() - comments: FilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.CustomFieldChoiceSet, lookups=True) class CustomFieldChoiceSetFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() base_choices: ( BaseFilterLookup[Annotated['CustomFieldChoiceSetBaseEnum', strawberry.lazy('extras.graphql.enums')]] | None ) = ( @@ -202,14 +202,14 @@ class CustomFieldChoiceSetFilter(ChangeLoggedModelFilter): @strawberry_django.filter_type(models.CustomLink, lookups=True) class CustomLinkFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() enabled: FilterLookup[bool] | None = strawberry_django.filter_field() - link_text: FilterLookup[str] | None = strawberry_django.filter_field() - link_url: FilterLookup[str] | None = strawberry_django.filter_field() + link_text: StrFilterLookup[str] | None = strawberry_django.filter_field() + link_url: StrFilterLookup[str] | None = strawberry_django.filter_field() weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - group_name: FilterLookup[str] | None = strawberry_django.filter_field() + group_name: StrFilterLookup[str] | None = strawberry_django.filter_field() button_class: ( BaseFilterLookup[Annotated['CustomLinkButtonClassEnum', strawberry.lazy('extras.graphql.enums')]] | None ) = ( @@ -220,15 +220,15 @@ class CustomLinkFilter(ChangeLoggedModelFilter): @strawberry_django.filter_type(models.ExportTemplate, lookups=True) class ExportTemplateFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() - template_code: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() + template_code: StrFilterLookup[str] | None = strawberry_django.filter_field() environment_params: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - mime_type: FilterLookup[str] | None = strawberry_django.filter_field() - file_name: FilterLookup[str] | None = strawberry_django.filter_field() - file_extension: FilterLookup[str] | None = strawberry_django.filter_field() + mime_type: StrFilterLookup[str] | None = strawberry_django.filter_field() + file_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + file_extension: StrFilterLookup[str] | None = strawberry_django.filter_field() as_attachment: FilterLookup[bool] | None = strawberry_django.filter_field() @@ -244,7 +244,7 @@ class ImageAttachmentFilter(ChangeLoggedModelFilter): image_width: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.JournalEntry, lookups=True) @@ -260,22 +260,22 @@ class JournalEntryFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedM kind: BaseFilterLookup[Annotated['JournalEntryKindEnum', strawberry.lazy('extras.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - comments: FilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.NotificationGroup, lookups=True) class NotificationGroupFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() groups: Annotated['GroupFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() users: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.SavedFilter, lookups=True) class SavedFilterFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() user_id: ID | None = strawberry_django.filter_field() weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( @@ -290,8 +290,8 @@ class SavedFilterFilter(ChangeLoggedModelFilter): @strawberry_django.filter_type(models.TableConfig, lookups=True) class TableConfigFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() user_id: ID | None = strawberry_django.filter_field() weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( @@ -303,30 +303,30 @@ class TableConfigFilter(ChangeLoggedModelFilter): @strawberry_django.filter_type(models.Tag, lookups=True) class TagFilter(ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - description: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.Webhook, lookups=True) class WebhookFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() - payload_url: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() + payload_url: StrFilterLookup[str] | None = strawberry_django.filter_field() http_method: ( BaseFilterLookup[Annotated['WebhookHttpMethodEnum', strawberry.lazy('extras.graphql.enums')]] | None ) = ( strawberry_django.filter_field() ) - http_content_type: FilterLookup[str] | None = strawberry_django.filter_field() - additional_headers: FilterLookup[str] | None = strawberry_django.filter_field() - body_template: FilterLookup[str] | None = strawberry_django.filter_field() - secret: FilterLookup[str] | None = strawberry_django.filter_field() + http_content_type: StrFilterLookup[str] | None = strawberry_django.filter_field() + additional_headers: StrFilterLookup[str] | None = strawberry_django.filter_field() + body_template: StrFilterLookup[str] | None = strawberry_django.filter_field() + secret: StrFilterLookup[str] | None = strawberry_django.filter_field() ssl_verification: FilterLookup[bool] | None = strawberry_django.filter_field() - ca_file_path: FilterLookup[str] | None = strawberry_django.filter_field() + ca_file_path: StrFilterLookup[str] | None = strawberry_django.filter_field() events: Annotated['EventRuleFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -334,8 +334,8 @@ class WebhookFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelF @strawberry_django.filter_type(models.EventRule, lookups=True) class EventRuleFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() event_types: Annotated['StringArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -346,10 +346,10 @@ class EventRuleFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedMode action_type: BaseFilterLookup[Annotated['EventRuleActionEnum', strawberry.lazy('extras.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - action_object_type: FilterLookup[str] | None = strawberry_django.filter_field() + action_object_type: StrFilterLookup[str] | None = strawberry_django.filter_field() action_object_type_id: ID | None = strawberry_django.filter_field() action_object_id: ID | None = strawberry_django.filter_field() action_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - comments: FilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py index 400dc8e83..6126c3c45 100644 --- a/netbox/ipam/graphql/filters.py +++ b/netbox/ipam/graphql/filters.py @@ -7,7 +7,7 @@ import strawberry_django from django.db.models import Q from netaddr.core import AddrFormatError from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, DateFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, DateFilterLookup, FilterLookup, StrFilterLookup from dcim.graphql.filter_mixins import ScopedFilterMixin from dcim.models import Device @@ -70,8 +70,8 @@ class ASNFilter(TenancyFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.ASNRange, lookups=True) class ASNRangeFilter(TenancyFilterMixin, OrganizationalModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() rir: Annotated['RIRFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() rir_id: ID | None = strawberry_django.filter_field() start: Annotated['BigIntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( @@ -84,7 +84,7 @@ class ASNRangeFilter(TenancyFilterMixin, OrganizationalModelFilter): @strawberry_django.filter_type(models.Aggregate, lookups=True) class AggregateFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - prefix: FilterLookup[str] | None = strawberry_django.filter_field() + prefix: StrFilterLookup[str] | None = strawberry_django.filter_field() rir: Annotated['RIRFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() rir_id: ID | None = strawberry_django.filter_field() date_added: DateFilterLookup[date] | None = strawberry_django.filter_field() @@ -120,14 +120,14 @@ class FHRPGroupFilter(PrimaryModelFilter): group_id: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() protocol: BaseFilterLookup[Annotated['FHRPGroupProtocolEnum', strawberry.lazy('ipam.graphql.enums')]] | None = ( strawberry_django.filter_field() ) auth_type: BaseFilterLookup[Annotated['FHRPGroupAuthTypeEnum', strawberry.lazy('ipam.graphql.enums')]] | None = ( strawberry_django.filter_field() ) - auth_key: FilterLookup[str] | None = strawberry_django.filter_field() + auth_key: StrFilterLookup[str] | None = strawberry_django.filter_field() ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -138,7 +138,7 @@ class FHRPGroupAssignmentFilter(ChangeLoggedModelFilter): interface_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) - interface_id: FilterLookup[str] | None = strawberry_django.filter_field() + interface_id: StrFilterLookup[str] | None = strawberry_django.filter_field() group: Annotated['FHRPGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -174,7 +174,7 @@ class FHRPGroupAssignmentFilter(ChangeLoggedModelFilter): @strawberry_django.filter_type(models.IPAddress, lookups=True) class IPAddressFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - address: FilterLookup[str] | None = strawberry_django.filter_field() + address: StrFilterLookup[str] | None = strawberry_django.filter_field() vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() vrf_id: ID | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['IPAddressStatusEnum', strawberry.lazy('ipam.graphql.enums')]] | None = ( @@ -195,7 +195,7 @@ class IPAddressFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter strawberry_django.filter_field() ) nat_outside_id: ID | None = strawberry_django.filter_field() - dns_name: FilterLookup[str] | None = strawberry_django.filter_field() + dns_name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_field() def assigned(self, value: bool, prefix) -> Q: @@ -225,8 +225,8 @@ class IPAddressFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter @strawberry_django.filter_type(models.IPRange, lookups=True) class IPRangeFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - start_address: FilterLookup[str] | None = strawberry_django.filter_field() - end_address: FilterLookup[str] | None = strawberry_django.filter_field() + start_address: StrFilterLookup[str] | None = strawberry_django.filter_field() + end_address: StrFilterLookup[str] | None = strawberry_django.filter_field() size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -279,7 +279,7 @@ class IPRangeFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.Prefix, lookups=True) class PrefixFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - prefix: FilterLookup[str] | None = strawberry_django.filter_field() + prefix: StrFilterLookup[str] | None = strawberry_django.filter_field() vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() vrf_id: ID | None = strawberry_django.filter_field() vlan: Annotated['VLANFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() @@ -328,7 +328,7 @@ class RoleFilter(OrganizationalModelFilter): @strawberry_django.filter_type(models.RouteTarget, lookups=True) class RouteTargetFilter(TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() importing_vrfs: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -345,7 +345,7 @@ class RouteTargetFilter(TenancyFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.Service, lookups=True) class ServiceFilter(ContactFilterMixin, ServiceFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -357,7 +357,7 @@ class ServiceFilter(ContactFilterMixin, ServiceFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.ServiceTemplate, lookups=True) class ServiceTemplateFilter(ServiceFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.VLAN, lookups=True) @@ -371,7 +371,7 @@ class VLANFilter(TenancyFilterMixin, PrimaryModelFilter): vid: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['VLANStatusEnum', strawberry.lazy('ipam.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -401,7 +401,7 @@ class VLANGroupFilter(ScopedFilterMixin, OrganizationalModelFilter): @strawberry_django.filter_type(models.VLANTranslationPolicy, lookups=True) class VLANTranslationPolicyFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.VLANTranslationRule, lookups=True) @@ -410,7 +410,7 @@ class VLANTranslationRuleFilter(NetBoxModelFilter): strawberry_django.filter_field() ) policy_id: ID | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() local_vid: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @@ -421,8 +421,8 @@ class VLANTranslationRuleFilter(NetBoxModelFilter): @strawberry_django.filter_type(models.VRF, lookups=True) class VRFFilter(TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - rd: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + rd: StrFilterLookup[str] | None = strawberry_django.filter_field() enforce_unique: FilterLookup[bool] | None = strawberry_django.filter_field() import_targets: Annotated['RouteTargetFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( strawberry_django.filter_field() diff --git a/netbox/netbox/graphql/filter_lookups.py b/netbox/netbox/graphql/filter_lookups.py index bbbccc312..6dbf76263 100644 --- a/netbox/netbox/graphql/filter_lookups.py +++ b/netbox/netbox/graphql/filter_lookups.py @@ -15,6 +15,7 @@ from strawberry_django import ( DatetimeFilterLookup, FilterLookup, RangeLookup, + StrFilterLookup, TimeFilterLookup, process_filters, ) @@ -40,7 +41,7 @@ SKIP_MSG = 'Filter will be skipped on `null` value' @strawberry.input(one_of=True, description='Lookup for JSON field. Only one of the lookup fields can be set.') class JSONLookup: - string_lookup: FilterLookup[str] | None = strawberry_django.filter_field() + string_lookup: StrFilterLookup[str] | None = strawberry_django.filter_field() int_range_lookup: RangeLookup[int] | None = strawberry_django.filter_field() int_comparison_lookup: ComparisonFilterLookup[int] | None = strawberry_django.filter_field() float_range_lookup: RangeLookup[float] | None = strawberry_django.filter_field() diff --git a/netbox/netbox/graphql/filter_mixins.py b/netbox/netbox/graphql/filter_mixins.py index b0ddd94f5..94b836f06 100644 --- a/netbox/netbox/graphql/filter_mixins.py +++ b/netbox/netbox/graphql/filter_mixins.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Annotated, TypeVar import strawberry import strawberry_django -from strawberry_django import BaseFilterLookup, DatetimeFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, DatetimeFilterLookup, FilterLookup, StrFilterLookup __all__ = ( 'DistanceFilterMixin', @@ -48,7 +48,7 @@ class SyncedDataFilterMixin: strawberry_django.filter_field() ) data_file_id: FilterLookup[int] | None = strawberry_django.filter_field() - data_path: FilterLookup[str] | None = strawberry_django.filter_field() + data_path: StrFilterLookup[str] | None = strawberry_django.filter_field() auto_sync_enabled: FilterLookup[bool] | None = strawberry_django.filter_field() data_synced: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() diff --git a/netbox/netbox/graphql/filters.py b/netbox/netbox/graphql/filters.py index aaa9429c6..a372d7bc0 100644 --- a/netbox/netbox/graphql/filters.py +++ b/netbox/netbox/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING import strawberry_django from strawberry import ID -from strawberry_django import ComparisonFilterLookup, FilterLookup +from strawberry_django import ComparisonFilterLookup, StrFilterLookup from core.graphql.filter_mixins import ChangeLoggingMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin @@ -42,21 +42,21 @@ class NetBoxModelFilter( @dataclass class NestedGroupModelFilter(NetBoxModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() parent_id: ID | None = strawberry_django.filter_field() @dataclass class OrganizationalModelFilter(NetBoxModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() - comments: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() @dataclass class PrimaryModelFilter(NetBoxModelFilter): - description: FilterLookup[str] | None = strawberry_django.filter_field() - comments: FilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() + comments: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/tenancy/graphql/filters.py b/netbox/tenancy/graphql/filters.py index 27ca26a56..7b340c4fc 100644 --- a/netbox/tenancy/graphql/filters.py +++ b/netbox/tenancy/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, StrFilterLookup from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin from netbox.graphql.filters import ( @@ -60,8 +60,8 @@ __all__ = ( @strawberry_django.filter_type(models.Tenant, lookups=True) class TenantFilter(ContactFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() group: Annotated['TenantGroupFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -153,12 +153,12 @@ class TenantGroupFilter(OrganizationalModelFilter): @strawberry_django.filter_type(models.Contact, lookups=True) class ContactFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - title: FilterLookup[str] | None = strawberry_django.filter_field() - phone: FilterLookup[str] | None = strawberry_django.filter_field() - email: FilterLookup[str] | None = strawberry_django.filter_field() - address: FilterLookup[str] | None = strawberry_django.filter_field() - link: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + title: StrFilterLookup[str] | None = strawberry_django.filter_field() + phone: StrFilterLookup[str] | None = strawberry_django.filter_field() + email: StrFilterLookup[str] | None = strawberry_django.filter_field() + address: StrFilterLookup[str] | None = strawberry_django.filter_field() + link: StrFilterLookup[str] | None = strawberry_django.filter_field() groups: Annotated['ContactGroupFilter', 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 63728c46b..c3d6d6f25 100644 --- a/netbox/users/graphql/filters.py +++ b/netbox/users/graphql/filters.py @@ -3,7 +3,7 @@ from typing import Annotated import strawberry import strawberry_django -from strawberry_django import DatetimeFilterLookup, FilterLookup +from strawberry_django import DatetimeFilterLookup, FilterLookup, StrFilterLookup from netbox.graphql.filters import BaseModelFilter from users import models @@ -18,16 +18,16 @@ __all__ = ( @strawberry_django.filter_type(models.Group, lookups=True) class GroupFilter(BaseModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.User, lookups=True) class UserFilter(BaseModelFilter): - username: FilterLookup[str] | None = strawberry_django.filter_field() - 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() + username: StrFilterLookup[str] | None = strawberry_django.filter_field() + first_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + last_name: StrFilterLookup[str] | None = strawberry_django.filter_field() + email: StrFilterLookup[str] | None = strawberry_django.filter_field() is_superuser: 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() @@ -37,8 +37,8 @@ class UserFilter(BaseModelFilter): @strawberry_django.filter_type(models.Owner, lookups=True) class OwnerFilter(BaseModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() group: Annotated['OwnerGroupFilter', strawberry.lazy('users.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -50,5 +50,5 @@ class OwnerFilter(BaseModelFilter): @strawberry_django.filter_type(models.OwnerGroup, lookups=True) class OwnerGroupFilter(BaseModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/virtualization/graphql/filter_mixins.py b/netbox/virtualization/graphql/filter_mixins.py index 2bf313ac5..c1ff60568 100644 --- a/netbox/virtualization/graphql/filter_mixins.py +++ b/netbox/virtualization/graphql/filter_mixins.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import FilterLookup +from strawberry_django import StrFilterLookup if TYPE_CHECKING: from .filters import VirtualMachineFilter @@ -20,5 +20,5 @@ class VMComponentFilterMixin: strawberry_django.filter_field() ) virtual_machine_id: ID | None = strawberry_django.filter_field() - name: FilterLookup[str] | None = strawberry_django.filter_field() - description: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + description: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/virtualization/graphql/filters.py b/netbox/virtualization/graphql/filters.py index a09f106c8..eb750cec8 100644 --- a/netbox/virtualization/graphql/filters.py +++ b/netbox/virtualization/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, FilterLookup, StrFilterLookup from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin from extras.graphql.filter_mixins import ConfigContextFilterMixin @@ -39,7 +39,7 @@ __all__ = ( @strawberry_django.filter_type(models.Cluster, lookups=True) class ClusterFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() type: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -77,7 +77,7 @@ class VirtualMachineFilter( TenancyFilterMixin, PrimaryModelFilter, ): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[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,7 +116,7 @@ class VirtualMachineFilter( disk: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) - serial: FilterLookup[str] | None = strawberry_django.filter_field() + serial: StrFilterLookup[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 = ( diff --git a/netbox/vpn/graphql/filters.py b/netbox/vpn/graphql/filters.py index 770739043..6b0f89f52 100644 --- a/netbox/vpn/graphql/filters.py +++ b/netbox/vpn/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, StrFilterLookup from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin from netbox.graphql.filters import ( @@ -63,7 +63,7 @@ class TunnelTerminationFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLo @strawberry_django.filter_type(models.Tunnel, lookups=True) class TunnelFilter(TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['TunnelStatusEnum', strawberry.lazy('vpn.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -89,7 +89,7 @@ class TunnelFilter(TenancyFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.IKEProposal, lookups=True) class IKEProposalFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() authentication_method: ( BaseFilterLookup[Annotated['AuthenticationMethodEnum', strawberry.lazy('vpn.graphql.enums')]] | None ) = ( @@ -118,7 +118,7 @@ class IKEProposalFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.IKEPolicy, lookups=True) class IKEPolicyFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() version: BaseFilterLookup[Annotated['IKEVersionEnum', strawberry.lazy('vpn.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -128,12 +128,12 @@ class IKEPolicyFilter(PrimaryModelFilter): proposals: Annotated['IKEProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = ( strawberry_django.filter_field() ) - preshared_key: FilterLookup[str] | None = strawberry_django.filter_field() + preshared_key: StrFilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.IPSecProposal, lookups=True) class IPSecProposalFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() encryption_algorithm: ( BaseFilterLookup[Annotated['EncryptionAlgorithmEnum', strawberry.lazy('vpn.graphql.enums')]] | None ) = ( @@ -159,7 +159,7 @@ class IPSecProposalFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.IPSecPolicy, lookups=True) class IPSecPolicyFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() proposals: Annotated['IPSecProposalFilter', strawberry.lazy('vpn.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -170,7 +170,7 @@ class IPSecPolicyFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.IPSecProfile, lookups=True) class IPSecProfileFilter(PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() mode: BaseFilterLookup[Annotated['IPSecModeEnum', strawberry.lazy('vpn.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -186,8 +186,8 @@ class IPSecProfileFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.L2VPN, lookups=True) class L2VPNFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilter): - name: FilterLookup[str] | None = strawberry_django.filter_field() - slug: FilterLookup[str] | None = strawberry_django.filter_field() + name: StrFilterLookup[str] | None = strawberry_django.filter_field() + slug: StrFilterLookup[str] | None = strawberry_django.filter_field() type: BaseFilterLookup[Annotated['L2VPNTypeEnum', strawberry.lazy('vpn.graphql.enums')]] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/wireless/graphql/filter_mixins.py b/netbox/wireless/graphql/filter_mixins.py index 5ecf2188d..9e928b3a5 100644 --- a/netbox/wireless/graphql/filter_mixins.py +++ b/netbox/wireless/graphql/filter_mixins.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django -from strawberry_django import FilterLookup +from strawberry_django import StrFilterLookup if TYPE_CHECKING: from .enums import * @@ -21,4 +21,4 @@ class WirelessAuthenticationFilterMixin: auth_cipher: Annotated['WirelessAuthCipherEnum', strawberry.lazy('wireless.graphql.enums')] | None = ( strawberry_django.filter_field() ) - auth_psk: FilterLookup[str] | None = strawberry_django.filter_field() + auth_psk: StrFilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/wireless/graphql/filters.py b/netbox/wireless/graphql/filters.py index a02d7110a..004d169ab 100644 --- a/netbox/wireless/graphql/filters.py +++ b/netbox/wireless/graphql/filters.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django from strawberry.scalars import ID -from strawberry_django import BaseFilterLookup, FilterLookup +from strawberry_django import BaseFilterLookup, StrFilterLookup from dcim.graphql.filter_mixins import ScopedFilterMixin from netbox.graphql.filter_mixins import DistanceFilterMixin @@ -38,7 +38,7 @@ class WirelessLANFilter( TenancyFilterMixin, PrimaryModelFilter ): - ssid: FilterLookup[str] | None = strawberry_django.filter_field() + ssid: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['WirelessLANStatusEnum', strawberry.lazy('wireless.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -65,7 +65,7 @@ class WirelessLinkFilter( strawberry_django.filter_field() ) interface_b_id: ID | None = strawberry_django.filter_field() - ssid: FilterLookup[str] | None = strawberry_django.filter_field() + ssid: StrFilterLookup[str] | None = strawberry_django.filter_field() status: BaseFilterLookup[Annotated['WirelessLANStatusEnum', strawberry.lazy('wireless.graphql.enums')]] | None = ( strawberry_django.filter_field() ) diff --git a/requirements.txt b/requirements.txt index 19058882e..6be06b5e5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,8 +36,8 @@ rq==2.6.1 social-auth-app-django==5.7.0 social-auth-core==4.8.5 sorl-thumbnail==13.0.0 -strawberry-graphql==0.295.0 -strawberry-graphql-django==0.75.0 +strawberry-graphql==0.307.1 +strawberry-graphql-django==0.79.0 svgwrite==1.4.3 tablib==3.9.0 tzdata==2025.3