1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

9856 filter types

This commit is contained in:
Arthur
2024-03-13 10:39:08 -07:00
parent 2c9bea9ab9
commit 21b585e5e3
6 changed files with 118 additions and 150 deletions

View File

@ -11,8 +11,11 @@ from utilities.filters import *
def autotype_decorator(filterset): def autotype_decorator(filterset):
def wrapper(cls): def show_field(fieldname, v, cls):
print(f"cls: {cls}") print(f"cls: {cls}")
print(f"{fieldname}: {v}")
def wrapper(cls):
cls.filterset = filterset cls.filterset = filterset
fields = filterset.get_fields() fields = filterset.get_fields()
model = filterset._meta.model model = filterset._meta.model
@ -35,11 +38,9 @@ def autotype_decorator(filterset):
create_function = True create_function = True
attr_type = str | None attr_type = str | None
elif isinstance(v, MACAddressFilter): elif isinstance(v, MACAddressFilter):
print(f"{fieldname}: {v}") show_field("MACAddressFilter", v, cls)
print("MACAddressFilter")
elif isinstance(v, MultiValueArrayFilter): elif isinstance(v, MultiValueArrayFilter):
print(f"{fieldname}: {v}") show_field("MultiValueArrayFilter", v, cls)
print("MultiValueArrayFilter")
elif isinstance(v, MultiValueCharFilter): elif isinstance(v, MultiValueCharFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
@ -48,8 +49,7 @@ def autotype_decorator(filterset):
elif isinstance(v, MultiValueDateTimeFilter): elif isinstance(v, MultiValueDateTimeFilter):
attr_type = auto attr_type = auto
elif isinstance(v, MultiValueDecimalFilter): elif isinstance(v, MultiValueDecimalFilter):
print(f"{fieldname}: {v}") show_field("MultiValueDecimalFilter", v, cls)
print("MultiValueDecimalFilter")
elif isinstance(v, MultiValueMACAddressFilter): elif isinstance(v, MultiValueMACAddressFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
@ -57,17 +57,14 @@ def autotype_decorator(filterset):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
elif isinstance(v, MultiValueTimeFilter): elif isinstance(v, MultiValueTimeFilter):
print(f"{fieldname}: {v}") show_field("MultiValueTimeFilter", v, cls)
print("MultiValueTimeFilter")
elif isinstance(v, MultiValueWWNFilter): elif isinstance(v, MultiValueWWNFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
elif isinstance(v, NullableCharFieldFilter): elif isinstance(v, NullableCharFieldFilter):
print(f"{fieldname}: {v}") show_field("NullableCharFieldFilter", v, cls)
print("NullableCharFieldFilter")
elif isinstance(v, NumericArrayFilter): elif isinstance(v, NumericArrayFilter):
print(f"{fieldname}: {v}") show_field("NumericArrayFilter", v, cls)
print("NumericArrayFilter")
elif isinstance(v, TreeNodeMultipleChoiceFilter): elif isinstance(v, TreeNodeMultipleChoiceFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
@ -75,26 +72,19 @@ def autotype_decorator(filterset):
# From django_filters - ordering of these matters as base classes must # From django_filters - ordering of these matters as base classes must
# come after derived classes so the base class doesn't get matched first # come after derived classes so the base class doesn't get matched first
elif issubclass(type(v), django_filters.OrderingFilter): elif issubclass(type(v), django_filters.OrderingFilter):
print(f"{fieldname}: {v}") show_field("OrderingFilter", v, cls)
print("OrderingFilter")
elif issubclass(type(v), django_filters.BaseRangeFilter): elif issubclass(type(v), django_filters.BaseRangeFilter):
print(f"{fieldname}: {v}") show_field("BaseRangeFilter", v, cls)
print("BaseRangeFilter")
elif issubclass(type(v), django_filters.BaseInFilter): elif issubclass(type(v), django_filters.BaseInFilter):
print(f"{fieldname}: {v}") show_field("BaseInFilter", v, cls)
print("BaseInFilter")
elif issubclass(type(v), django_filters.LookupChoiceFilter): elif issubclass(type(v), django_filters.LookupChoiceFilter):
print(f"{fieldname}: {v}") show_field("LookupChoiceFilter", v, cls)
print("LookupChoiceFilter")
elif issubclass(type(v), django_filters.AllValuesMultipleFilter): elif issubclass(type(v), django_filters.AllValuesMultipleFilter):
print(f"{fieldname}: {v}") show_field("AllValuesMultipleFilter", v, cls)
print("AllValuesMultipleFilter")
elif issubclass(type(v), django_filters.AllValuesFilter): elif issubclass(type(v), django_filters.AllValuesFilter):
print(f"{fieldname}: {v}") show_field("AllValuesFilter", v, cls)
print("AllValuesFilter")
elif issubclass(type(v), django_filters.TimeRangeFilter): elif issubclass(type(v), django_filters.TimeRangeFilter):
print(f"{fieldname}: {v}") show_field("TimeRangeFilter", v, cls)
print("TimeRangeFilter")
elif issubclass(type(v), django_filters.IsoDateTimeFromToRangeFilter): elif issubclass(type(v), django_filters.IsoDateTimeFromToRangeFilter):
create_function = True create_function = True
attr_type = str | None attr_type = str | None
@ -108,14 +98,11 @@ def autotype_decorator(filterset):
create_function = True create_function = True
attr_type = str | None attr_type = str | None
elif issubclass(type(v), django_filters.RangeFilter): elif issubclass(type(v), django_filters.RangeFilter):
print(f"{fieldname}: {v}") show_field("RangeFilter", v, cls)
print("RangeFilter")
elif issubclass(type(v), django_filters.NumericRangeFilter): elif issubclass(type(v), django_filters.NumericRangeFilter):
print(f"{fieldname}: {v}") show_field("NumericRangeFilter", v, cls)
print("NumericRangeFilter")
elif issubclass(type(v), django_filters.NumberFilter): elif issubclass(type(v), django_filters.NumberFilter):
print(f"{fieldname}: {v}") show_field("NumberFilter", v, cls)
print("NumberFilter")
elif issubclass(type(v), django_filters.ModelMultipleChoiceFilter): elif issubclass(type(v), django_filters.ModelMultipleChoiceFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
@ -123,11 +110,9 @@ def autotype_decorator(filterset):
create_function = True create_function = True
attr_type = str | None attr_type = str | None
elif issubclass(type(v), django_filters.DurationFilter): elif issubclass(type(v), django_filters.DurationFilter):
print(f"{fieldname}: {v}") show_field("DurationFilter", v, cls)
print("DurationFilter")
elif issubclass(type(v), django_filters.IsoDateTimeFilter): elif issubclass(type(v), django_filters.IsoDateTimeFilter):
print(f"{fieldname}: {v}") show_field("IsoDateTimeFilter", v, cls)
print("IsoDateTimeFilter")
elif issubclass(type(v), django_filters.DateTimeFilter): elif issubclass(type(v), django_filters.DateTimeFilter):
attr_type = auto attr_type = auto
elif issubclass(type(v), django_filters.TimeFilter): elif issubclass(type(v), django_filters.TimeFilter):
@ -135,17 +120,14 @@ def autotype_decorator(filterset):
elif issubclass(type(v), django_filters.DateFilter): elif issubclass(type(v), django_filters.DateFilter):
attr_type = auto attr_type = auto
elif issubclass(type(v), django_filters.TypedMultipleChoiceFilter): elif issubclass(type(v), django_filters.TypedMultipleChoiceFilter):
print(f"{fieldname}: {v}") show_field("TypedMultipleChoiceFilter", v, cls)
print("TypedMultipleChoiceFilter")
elif issubclass(type(v), django_filters.MultipleChoiceFilter): elif issubclass(type(v), django_filters.MultipleChoiceFilter):
create_function = True create_function = True
attr_type = List[str] | None attr_type = List[str] | None
elif issubclass(type(v), django_filters.TypedChoiceFilter): elif issubclass(type(v), django_filters.TypedChoiceFilter):
print(f"{fieldname}: {v}") show_field("TypedChoiceFilter", v, cls)
print("TypedChoiceFilter")
elif issubclass(type(v), django_filters.ChoiceFilter): elif issubclass(type(v), django_filters.ChoiceFilter):
print(f"{fieldname}: {v}") show_field("ChoiceFilter", v, cls)
print("ChoiceFilter")
elif issubclass(type(v), django_filters.BooleanFilter): elif issubclass(type(v), django_filters.BooleanFilter):
create_function = True create_function = True
attr_type = bool | None attr_type = bool | None
@ -157,8 +139,7 @@ def autotype_decorator(filterset):
create_function = True create_function = True
attr_type = str | None attr_type = str | None
else: else:
print(f"{fieldname}: {v}") show_field("unknown type!", v, cls)
print("unknown type!")
if fieldname not in cls.__annotations__ and attr_type: if fieldname not in cls.__annotations__ and attr_type:
cls.__annotations__[fieldname] = attr_type cls.__annotations__[fieldname] = attr_type
@ -178,36 +159,3 @@ class BaseFilterMixin:
def filter_by_filterset(self, queryset, key): def filter_by_filterset(self, queryset, key):
return self.filterset(data={key: getattr(self, key)}, queryset=queryset).qs return self.filterset(data={key: getattr(self, key)}, queryset=queryset).qs
@strawberry.input
class ChangeLoggedModelFilterMixin(BaseFilterMixin):
created: auto
last_updated: auto
created_by_request: str | None
updated_by_request: str | None
modified_by_request: str | None
def filter_created_by_request(self, queryset):
return self.filter_by_filterset(queryset, 'created_by_request')
def filter_updated_by_request(self, queryset):
return self.filter_by_filterset(queryset, 'updated_by_request')
def filter_modified_by_request(self, queryset):
return self.filter_by_filterset(queryset, 'modified_by_request')
@strawberry.input
class NetBoxModelFilterMixin(ChangeLoggedModelFilterMixin):
q: str | None
tag: List[str] | None
def filter_q(self, queryset):
# return self.search(queryset, None, self.q)
return self.filter_by_filterset(queryset, 'q')
def filter_tag(self, queryset, info):
# return self.filterset(data={'tag': self.tag}, queryset=queryset).qs
# return self.filterset(data={'tag': getattr(self, 'tag')}, queryset=queryset).qs
return self.filter_by_filterset(queryset, 'tag')

View File

@ -1,9 +1,8 @@
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry import auto
from tenancy import filtersets, models from tenancy import filtersets, models
from netbox.graphql import filter_mixins from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = ( __all__ = (
'TenantFilter', 'TenantFilter',
@ -16,30 +15,35 @@ __all__ = (
@strawberry_django.filter(models.Tenant, lookups=True) @strawberry_django.filter(models.Tenant, lookups=True)
class TenantFilter(filtersets.TenantFilterSet): @autotype_decorator(filtersets.TenantFilterSet)
id: auto class TenantFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.TenantGroup, lookups=True) @strawberry_django.filter(models.TenantGroup, lookups=True)
class TenantGroupFilter(filtersets.TenantGroupFilterSet): @autotype_decorator(filtersets.TenantGroupFilterSet)
id: auto class TenantGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.Contact, lookups=True) @strawberry_django.filter(models.Contact, lookups=True)
class ContactFilter(filtersets.ContactFilterSet): @autotype_decorator(filtersets.ContactFilterSet)
id: auto class ContactFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.ContactRole, lookups=True) @strawberry_django.filter(models.ContactRole, lookups=True)
class ContactRoleFilter(filtersets.ContactRoleFilterSet): @autotype_decorator(filtersets.ContactRoleFilterSet)
id: auto class ContactRoleFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.ContactGroup, lookups=True) @strawberry_django.filter(models.ContactGroup, lookups=True)
class ContactGroupFilter(filtersets.ContactGroupFilterSet): @autotype_decorator(filtersets.ContactGroupFilterSet)
id: auto class ContactGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.ContactAssignment, lookups=True) @strawberry_django.filter(models.ContactAssignment, lookups=True)
class ContactAssignmentFilter(filtersets.ContactAssignmentFilterSet): class ContactAssignmentFilter(BaseFilterMixin):
id: auto pass

View File

@ -1,9 +1,9 @@
import strawberry import strawberry
import strawberry_django import strawberry_django
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group from users import filtersets, models
from strawberry import auto
from users import filtersets from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = ( __all__ = (
'GroupFilter', 'GroupFilter',
@ -11,19 +11,13 @@ __all__ = (
) )
@strawberry_django.filter(Group, lookups=True) @strawberry_django.filter(models.Group, lookups=True)
class GroupFilter(filtersets.GroupFilterSet): @autotype_decorator(filtersets.GroupFilterSet)
id: auto class GroupFilter(BaseFilterMixin):
name: auto pass
@strawberry_django.filter(get_user_model(), lookups=True) @strawberry_django.filter(get_user_model(), lookups=True)
class UserFilter(filtersets.UserFilterSet): @autotype_decorator(filtersets.UserFilterSet)
id: auto class UserFilter(BaseFilterMixin):
username: auto pass
first_name: auto
last_name: auto
email: auto
is_staff: auto
is_active: auto
is_superuser: auto

View File

@ -1,7 +1,8 @@
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry import auto from virtualization import filtersets, models
from virtualization import models, filtersets
from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = ( __all__ = (
@ -15,30 +16,36 @@ __all__ = (
@strawberry_django.filter(models.Cluster, lookups=True) @strawberry_django.filter(models.Cluster, lookups=True)
class ClusterFilter(filtersets.ClusterFilterSet): @autotype_decorator(filtersets.ClusterFilterSet)
id: auto class ClusterFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.ClusterGroup, lookups=True) @strawberry_django.filter(models.ClusterGroup, lookups=True)
class ClusterGroupFilter(filtersets.ClusterGroupFilterSet): @autotype_decorator(filtersets.ClusterGroupFilterSet)
id: auto class ClusterGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.ClusterType, lookups=True) @strawberry_django.filter(models.ClusterType, lookups=True)
class ClusterTypeFilter(filtersets.ClusterTypeFilterSet): @autotype_decorator(filtersets.ClusterTypeFilterSet)
id: auto class ClusterTypeFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.VirtualMachine, lookups=True) @strawberry_django.filter(models.VirtualMachine, lookups=True)
class VirtualMachineFilter(filtersets.VirtualMachineFilterSet): @autotype_decorator(filtersets.VirtualMachineFilterSet)
id: auto class VirtualMachineFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.VMInterface, lookups=True) @strawberry_django.filter(models.VMInterface, lookups=True)
class VMInterfaceFilter(filtersets.VMInterfaceFilterSet): @autotype_decorator(filtersets.VMInterfaceFilterSet)
id: auto class VMInterfaceFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.VirtualDisk, lookups=True) @strawberry_django.filter(models.VirtualDisk, lookups=True)
class VirtualDiskFilter(filtersets.VirtualDiskFilterSet): @autotype_decorator(filtersets.VirtualDiskFilterSet)
id: auto class VirtualDiskFilter(BaseFilterMixin):
pass

View File

@ -1,8 +1,9 @@
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry import auto
from vpn import filtersets, models from vpn import filtersets, models
from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = ( __all__ = (
'TunnelGroupFilter', 'TunnelGroupFilter',
'TunnelTerminationFilter', 'TunnelTerminationFilter',
@ -18,50 +19,60 @@ __all__ = (
@strawberry_django.filter(models.TunnelGroup, lookups=True) @strawberry_django.filter(models.TunnelGroup, lookups=True)
class TunnelGroupFilter(filtersets.TunnelGroupFilterSet): @autotype_decorator(filtersets.TunnelGroupFilterSet)
id: auto class TunnelGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.TunnelTermination, lookups=True) @strawberry_django.filter(models.TunnelTermination, lookups=True)
class TunnelTerminationFilter(filtersets.TunnelTerminationFilterSet): @autotype_decorator(filtersets.TunnelTerminationFilterSet)
id: auto class TunnelTerminationFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.Tunnel, lookups=True) @strawberry_django.filter(models.Tunnel, lookups=True)
class TunnelFilter(filtersets.TunnelFilterSet): @autotype_decorator(filtersets.TunnelFilterSet)
id: auto class TunnelFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.IKEProposal, lookups=True) @strawberry_django.filter(models.IKEProposal, lookups=True)
class IKEProposalFilter(filtersets.IKEProposalFilterSet): @autotype_decorator(filtersets.IKEProposalFilterSet)
id: auto class IKEProposalFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.IKEPolicy, lookups=True) @strawberry_django.filter(models.IKEPolicy, lookups=True)
class IKEPolicyFilter(filtersets.IKEPolicyFilterSet): @autotype_decorator(filtersets.IKEPolicyFilterSet)
id: auto class IKEPolicyFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.IPSecProposal, lookups=True) @strawberry_django.filter(models.IPSecProposal, lookups=True)
class IPSecProposalFilter(filtersets.IPSecProposalFilterSet): @autotype_decorator(filtersets.IPSecProposalFilterSet)
id: auto class IPSecProposalFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.IPSecPolicy, lookups=True) @strawberry_django.filter(models.IPSecPolicy, lookups=True)
class IPSecPolicyFilter(filtersets.IPSecPolicyFilterSet): @autotype_decorator(filtersets.IPSecPolicyFilterSet)
id: auto class IPSecPolicyFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.IPSecProfile, lookups=True) @strawberry_django.filter(models.IPSecProfile, lookups=True)
class IPSecProfileFilter(filtersets.IPSecProfileFilterSet): @autotype_decorator(filtersets.IPSecProfileFilterSet)
id: auto class IPSecProfileFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.L2VPN, lookups=True) @strawberry_django.filter(models.L2VPN, lookups=True)
class L2VPNFilter(filtersets.L2VPNFilterSet): @autotype_decorator(filtersets.L2VPNFilterSet)
id: auto class L2VPNFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.L2VPNTermination, lookups=True) @strawberry_django.filter(models.L2VPNTermination, lookups=True)
class L2VPNTerminationFilter(filtersets.L2VPNTerminationFilterSet): @autotype_decorator(filtersets.L2VPNTerminationFilterSet)
id: auto class L2VPNTerminationFilter(BaseFilterMixin):
pass

View File

@ -1,8 +1,9 @@
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry import auto
from wireless import filtersets, models from wireless import filtersets, models
from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = ( __all__ = (
'WirelessLANGroupFilter', 'WirelessLANGroupFilter',
'WirelessLANFilter', 'WirelessLANFilter',
@ -11,15 +12,18 @@ __all__ = (
@strawberry_django.filter(models.WirelessLANGroup, lookups=True) @strawberry_django.filter(models.WirelessLANGroup, lookups=True)
class WirelessLANGroupFilter(filtersets.WirelessLANGroupFilterSet): @autotype_decorator(filtersets.WirelessLANGroupFilterSet)
id: auto class WirelessLANGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.WirelessLAN, lookups=True) @strawberry_django.filter(models.WirelessLAN, lookups=True)
class WirelessLANFilter(filtersets.WirelessLANFilterSet): @autotype_decorator(filtersets.WirelessLANFilterSet)
id: auto class WirelessLANFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.WirelessLink, lookups=True) @strawberry_django.filter(models.WirelessLink, lookups=True)
class WirelessLinkFilter(filtersets.WirelessLinkFilterSet): @autotype_decorator(filtersets.WirelessLinkFilterSet)
id: auto class WirelessLinkFilter(BaseFilterMixin):
pass