Explorar o código

Move TagFilter to extras

jeremystretch %!s(int64=4) %!d(string=hai) anos
pai
achega
d35ac1347c

+ 2 - 1
netbox/circuits/filters.py

@@ -3,8 +3,9 @@ from django.db.models import Q
 
 
 from dcim.filters import CableTerminationFilterSet
 from dcim.filters import CableTerminationFilterSet
 from dcim.models import Region, Site, SiteGroup
 from dcim.models import Region, Site, SiteGroup
+from extras.filters import TagFilter
 from tenancy.filters import TenancyFilterSet
 from tenancy.filters import TenancyFilterSet
-from utilities.filters import TagFilter, TreeNodeMultipleChoiceFilter
+from utilities.filters import TreeNodeMultipleChoiceFilter
 from utilities.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
 from .choices import *
 from .choices import *
 from .models import *
 from .models import *

+ 2 - 1
netbox/dcim/filters.py

@@ -1,12 +1,13 @@
 import django_filters
 import django_filters
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 
 
+from extras.filters import TagFilter
 from extras.filtersets import LocalConfigContextFilterSet
 from extras.filtersets import LocalConfigContextFilterSet
 from tenancy.filters import TenancyFilterSet
 from tenancy.filters import TenancyFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.choices import ColorChoices
 from utilities.choices import ColorChoices
 from utilities.filters import (
 from utilities.filters import (
-    MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, TagFilter, TreeNodeMultipleChoiceFilter,
+    MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, TreeNodeMultipleChoiceFilter,
 )
 )
 from utilities.filtersets import (
 from utilities.filtersets import (
     BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet,
     BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet,

+ 16 - 0
netbox/extras/filters.py

@@ -1,6 +1,7 @@
 import django_filters
 import django_filters
 from django.forms import DateField, IntegerField, NullBooleanField
 from django.forms import DateField, IntegerField, NullBooleanField
 
 
+from .models import Tag
 from .choices import *
 from .choices import *
 
 
 __all__ = (
 __all__ = (
@@ -36,3 +37,18 @@ class CustomFieldFilter(django_filters.Filter):
         if custom_field.type not in EXACT_FILTER_TYPES:
         if custom_field.type not in EXACT_FILTER_TYPES:
             if custom_field.filter_logic == CustomFieldFilterLogicChoices.FILTER_LOOSE:
             if custom_field.filter_logic == CustomFieldFilterLogicChoices.FILTER_LOOSE:
                 self.lookup_expr = 'icontains'
                 self.lookup_expr = 'icontains'
+
+
+class TagFilter(django_filters.ModelMultipleChoiceFilter):
+    """
+    Match on one or more assigned tags. If multiple tags are specified (e.g. ?tag=foo&tag=bar), the queryset is filtered
+    to objects matching all tags.
+    """
+    def __init__(self, *args, **kwargs):
+
+        kwargs.setdefault('field_name', 'tags__slug')
+        kwargs.setdefault('to_field_name', 'slug')
+        kwargs.setdefault('conjoined', True)
+        kwargs.setdefault('queryset', Tag.objects.all())
+
+        super().__init__(*args, **kwargs)

+ 2 - 2
netbox/ipam/filters.py

@@ -6,10 +6,10 @@ from django.db.models import Q
 from netaddr.core import AddrFormatError
 from netaddr.core import AddrFormatError
 
 
 from dcim.models import Device, Interface, Region, Site, SiteGroup
 from dcim.models import Device, Interface, Region, Site, SiteGroup
+from extras.filters import TagFilter
 from tenancy.filters import TenancyFilterSet
 from tenancy.filters import TenancyFilterSet
 from utilities.filters import (
 from utilities.filters import (
-    ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TagFilter,
-    TreeNodeMultipleChoiceFilter,
+    ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter,
 )
 )
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from virtualization.models import VirtualMachine, VMInterface
 from virtualization.models import VirtualMachine, VMInterface

+ 1 - 1
netbox/secrets/filters.py

@@ -2,7 +2,7 @@ import django_filters
 from django.db.models import Q
 from django.db.models import Q
 
 
 from dcim.models import Device
 from dcim.models import Device
-from utilities.filters import TagFilter
+from extras.filters import TagFilter
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
 from .models import Secret, SecretRole
 from .models import Secret, SecretRole

+ 2 - 1
netbox/tenancy/filters.py

@@ -1,7 +1,8 @@
 import django_filters
 import django_filters
 from django.db.models import Q
 from django.db.models import Q
 
 
-from utilities.filters import TagFilter, TreeNodeMultipleChoiceFilter
+from extras.filters import TagFilter
+from utilities.filters import TreeNodeMultipleChoiceFilter
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from .models import Tenant, TenantGroup
 from .models import Tenant, TenantGroup
 
 

+ 0 - 16
netbox/utilities/filters.py

@@ -4,7 +4,6 @@ from django.conf import settings
 from django_filters.constants import EMPTY_VALUES
 from django_filters.constants import EMPTY_VALUES
 
 
 from dcim.forms import MACAddressField
 from dcim.forms import MACAddressField
-from extras.models import Tag
 
 
 
 
 def multivalue_field_factory(field_class):
 def multivalue_field_factory(field_class):
@@ -84,21 +83,6 @@ class NullableCharFieldFilter(django_filters.CharFilter):
         return qs.distinct() if self.distinct else qs
         return qs.distinct() if self.distinct else qs
 
 
 
 
-class TagFilter(django_filters.ModelMultipleChoiceFilter):
-    """
-    Match on one or more assigned tags. If multiple tags are specified (e.g. ?tag=foo&tag=bar), the queryset is filtered
-    to objects matching all tags.
-    """
-    def __init__(self, *args, **kwargs):
-
-        kwargs.setdefault('field_name', 'tags__slug')
-        kwargs.setdefault('to_field_name', 'slug')
-        kwargs.setdefault('conjoined', True)
-        kwargs.setdefault('queryset', Tag.objects.all())
-
-        super().__init__(*args, **kwargs)
-
-
 class NumericArrayFilter(django_filters.NumberFilter):
 class NumericArrayFilter(django_filters.NumberFilter):
     """
     """
     Filter based on the presence of an integer within an ArrayField.
     Filter based on the presence of an integer within an ArrayField.

+ 2 - 2
netbox/utilities/filtersets.py

@@ -6,7 +6,7 @@ from django_filters.utils import get_model_field, resolve_field
 
 
 from dcim.forms import MACAddressField
 from dcim.forms import MACAddressField
 from extras.choices import CustomFieldFilterLogicChoices
 from extras.choices import CustomFieldFilterLogicChoices
-from extras.filters import CustomFieldFilter
+from extras.filters import CustomFieldFilter, TagFilter
 from extras.models import CustomField
 from extras.models import CustomField
 from utilities.constants import (
 from utilities.constants import (
     FILTER_CHAR_BASED_LOOKUP_MAP, FILTER_NEGATION_LOOKUP_MAP, FILTER_TREENODE_NEGATION_LOOKUP_MAP,
     FILTER_CHAR_BASED_LOOKUP_MAP, FILTER_NEGATION_LOOKUP_MAP, FILTER_TREENODE_NEGATION_LOOKUP_MAP,
@@ -100,7 +100,7 @@ class BaseFilterSet(django_filters.FilterSet):
         elif isinstance(existing_filter, (
         elif isinstance(existing_filter, (
             django_filters.ModelChoiceFilter,
             django_filters.ModelChoiceFilter,
             django_filters.ModelMultipleChoiceFilter,
             django_filters.ModelMultipleChoiceFilter,
-            filters.TagFilter
+            TagFilter
         )) or existing_filter.extra.get('choices'):
         )) or existing_filter.extra.get('choices'):
             # These filter types support only negation
             # These filter types support only negation
             lookup_map = FILTER_NEGATION_LOOKUP_MAP
             lookup_map = FILTER_NEGATION_LOOKUP_MAP

+ 2 - 1
netbox/utilities/tests/test_filters.py

@@ -11,10 +11,11 @@ from dcim.filters import DeviceFilterSet, SiteFilterSet
 from dcim.models import (
 from dcim.models import (
     Device, DeviceRole, DeviceType, Interface, Manufacturer, Platform, Rack, Region, Site
     Device, DeviceRole, DeviceType, Interface, Manufacturer, Platform, Rack, Region, Site
 )
 )
+from extras.filters import TagFilter
 from extras.models import TaggedItem
 from extras.models import TaggedItem
 from utilities.filters import (
 from utilities.filters import (
     MACAddressFilter, MultiValueCharFilter, MultiValueDateFilter, MultiValueDateTimeFilter, MultiValueNumberFilter,
     MACAddressFilter, MultiValueCharFilter, MultiValueDateFilter, MultiValueDateTimeFilter, MultiValueNumberFilter,
-    MultiValueTimeFilter, TagFilter, TreeNodeMultipleChoiceFilter,
+    MultiValueTimeFilter, TreeNodeMultipleChoiceFilter,
 )
 )
 from utilities.filtersets import BaseFilterSet
 from utilities.filtersets import BaseFilterSet
 
 

+ 2 - 1
netbox/virtualization/filters.py

@@ -2,9 +2,10 @@ import django_filters
 from django.db.models import Q
 from django.db.models import Q
 
 
 from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup
 from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup
+from extras.filters import TagFilter
 from extras.filtersets import LocalConfigContextFilterSet
 from extras.filtersets import LocalConfigContextFilterSet
 from tenancy.filters import TenancyFilterSet
 from tenancy.filters import TenancyFilterSet
-from utilities.filters import MultiValueMACAddressFilter, TagFilter, TreeNodeMultipleChoiceFilter
+from utilities.filters import MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from .choices import *
 from .choices import *
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface