Address PR feedback: Replace global filterset mappings with registry

This commit is contained in:
Jason Novinger 2025-11-20 04:59:25 -06:00
parent 4ca4983204
commit b410b4e107
14 changed files with 144 additions and 173 deletions

View File

@ -11,9 +11,8 @@ from ipam.models import ASN
from netbox.choices import DistanceUnitChoices from netbox.choices import DistanceUnitChoices
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import TenancyFilterForm, ContactModelFilterForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm
from utilities.forms import add_blank_choice from utilities.forms import add_blank_choice, register_filterset
from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DatePicker, NumberWithOptions from utilities.forms.widgets import DatePicker, NumberWithOptions
@ -34,6 +33,7 @@ __all__ = (
) )
@register_filterset(ProviderFilterSet)
class ProviderFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm): class ProviderFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Provider model = Provider
fieldsets = ( fieldsets = (
@ -69,6 +69,7 @@ class ProviderFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryMod
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ProviderAccountFilterSet)
class ProviderAccountFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm): class ProviderAccountFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = ProviderAccount model = ProviderAccount
fieldsets = ( fieldsets = (
@ -88,6 +89,7 @@ class ProviderAccountFilterForm(FilterModifierMixin, ContactModelFilterForm, Pri
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ProviderNetworkFilterSet)
class ProviderNetworkFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ProviderNetworkFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ProviderNetwork model = ProviderNetwork
fieldsets = ( fieldsets = (
@ -107,6 +109,7 @@ class ProviderNetworkFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitTypeFilterSet)
class CircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class CircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = CircuitType model = CircuitType
fieldsets = ( fieldsets = (
@ -121,6 +124,7 @@ class CircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
) )
@register_filterset(CircuitFilterSet)
class CircuitFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class CircuitFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Circuit model = Circuit
fieldsets = ( fieldsets = (
@ -220,6 +224,7 @@ class CircuitFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilt
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitTerminationFilterSet)
class CircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class CircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = CircuitTermination model = CircuitTermination
fieldsets = ( fieldsets = (
@ -274,6 +279,7 @@ class CircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitGroupFilterSet)
class CircuitGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm): class CircuitGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
model = CircuitGroup model = CircuitGroup
fieldsets = ( fieldsets = (
@ -283,6 +289,7 @@ class CircuitGroupFilterForm(FilterModifierMixin, TenancyFilterForm, Organizatio
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitGroupAssignmentFilterSet)
class CircuitGroupAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class CircuitGroupAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = CircuitGroupAssignment model = CircuitGroupAssignment
fieldsets = ( fieldsets = (
@ -312,6 +319,7 @@ class CircuitGroupAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSet
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualCircuitTypeFilterSet)
class VirtualCircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class VirtualCircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = VirtualCircuitType model = VirtualCircuitType
fieldsets = ( fieldsets = (
@ -326,6 +334,7 @@ class VirtualCircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilte
) )
@register_filterset(VirtualCircuitFilterSet)
class VirtualCircuitFilterForm( class VirtualCircuitFilterForm(
FilterModifierMixin, FilterModifierMixin,
TenancyFilterForm, TenancyFilterForm,
@ -374,6 +383,7 @@ class VirtualCircuitFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualCircuitTerminationFilterSet)
class VirtualCircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class VirtualCircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VirtualCircuitTermination model = VirtualCircuitTermination
fieldsets = ( fieldsets = (
@ -405,17 +415,3 @@ class VirtualCircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilter
label=_('Provider') label=_('Provider')
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ProviderFilterForm] = ProviderFilterSet
FILTERSET_MAPPINGS[ProviderAccountFilterForm] = ProviderAccountFilterSet
FILTERSET_MAPPINGS[ProviderNetworkFilterForm] = ProviderNetworkFilterSet
FILTERSET_MAPPINGS[CircuitTypeFilterForm] = CircuitTypeFilterSet
FILTERSET_MAPPINGS[CircuitFilterForm] = CircuitFilterSet
FILTERSET_MAPPINGS[CircuitTerminationFilterForm] = CircuitTerminationFilterSet
FILTERSET_MAPPINGS[CircuitGroupFilterForm] = CircuitGroupFilterSet
FILTERSET_MAPPINGS[CircuitGroupAssignmentFilterForm] = CircuitGroupAssignmentFilterSet
FILTERSET_MAPPINGS[VirtualCircuitTypeFilterForm] = VirtualCircuitTypeFilterSet
FILTERSET_MAPPINGS[VirtualCircuitFilterForm] = VirtualCircuitFilterSet
FILTERSET_MAPPINGS[VirtualCircuitTerminationFilterForm] = VirtualCircuitTerminationFilterSet

View File

@ -7,11 +7,10 @@ from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from netbox.utils import get_data_backend_choices from netbox.utils import get_data_backend_choices
from users.models import User from users.models import User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DateTimePicker from utilities.forms.widgets import DateTimePicker
@ -26,6 +25,7 @@ __all__ = (
) )
@register_filterset(DataSourceFilterSet)
class DataSourceFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class DataSourceFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = DataSource model = DataSource
fieldsets = ( fieldsets = (
@ -57,6 +57,7 @@ class DataSourceFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DataFileFilterSet)
class DataFileFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class DataFileFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = DataFile model = DataFile
fieldsets = ( fieldsets = (
@ -70,6 +71,7 @@ class DataFileFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
) )
@register_filterset(JobFilterSet)
class JobFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class JobFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Job model = Job
fieldsets = ( fieldsets = (
@ -137,6 +139,7 @@ class JobFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(ObjectChangeFilterSet)
class ObjectChangeFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ObjectChangeFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ObjectChange model = ObjectChange
fieldsets = ( fieldsets = (
@ -171,16 +174,9 @@ class ObjectChangeFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm)
) )
@register_filterset(ConfigRevisionFilterSet)
class ConfigRevisionFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ConfigRevisionFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigRevision model = ConfigRevision
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id'), FieldSet('q', 'filter_id'),
) )
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[DataSourceFilterForm] = DataSourceFilterSet
FILTERSET_MAPPINGS[DataFileFilterForm] = DataFileFilterSet
FILTERSET_MAPPINGS[JobFilterForm] = JobFilterSet
FILTERSET_MAPPINGS[ObjectChangeFilterForm] = ObjectChangeFilterSet
FILTERSET_MAPPINGS[ConfigRevisionFilterForm] = ConfigRevisionFilterSet

View File

@ -15,9 +15,8 @@ from netbox.forms import (
) )
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from users.models import Owner, User from users.models import Owner, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import NumberWithOptions from utilities.forms.widgets import NumberWithOptions
@ -150,6 +149,7 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(RegionFilterSet)
class RegionFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm): class RegionFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Region model = Region
fieldsets = ( fieldsets = (
@ -165,6 +165,7 @@ class RegionFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(SiteGroupFilterSet)
class SiteGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm): class SiteGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = SiteGroup model = SiteGroup
fieldsets = ( fieldsets = (
@ -180,6 +181,7 @@ class SiteGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGro
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(SiteFilterSet)
class SiteFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class SiteFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Site model = Site
fieldsets = ( fieldsets = (
@ -212,6 +214,7 @@ class SiteFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(LocationFilterSet)
class LocationFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm): class LocationFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Location model = Location
fieldsets = ( fieldsets = (
@ -260,6 +263,7 @@ class LocationFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFil
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RackRoleFilterSet)
class RackRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class RackRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = RackRole model = RackRole
fieldsets = ( fieldsets = (
@ -311,6 +315,7 @@ class RackBaseFilterForm(PrimaryModelFilterSetForm):
) )
@register_filterset(RackTypeFilterSet)
class RackTypeFilterForm(FilterModifierMixin, RackBaseFilterForm): class RackTypeFilterForm(FilterModifierMixin, RackBaseFilterForm):
model = RackType model = RackType
fieldsets = ( fieldsets = (
@ -333,6 +338,7 @@ class RackTypeFilterForm(FilterModifierMixin, RackBaseFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RackFilterSet)
class RackFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm): class RackFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm):
model = Rack model = Rack
fieldsets = ( fieldsets = (
@ -434,6 +440,7 @@ class RackElevationFilterForm(RackFilterForm):
) )
@register_filterset(RackReservationFilterSet)
class RackReservationFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class RackReservationFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = RackReservation model = RackReservation
fieldsets = ( fieldsets = (
@ -492,6 +499,7 @@ class RackReservationFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ManufacturerFilterSet)
class ManufacturerFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm): class ManufacturerFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = Manufacturer model = Manufacturer
fieldsets = ( fieldsets = (
@ -501,6 +509,7 @@ class ManufacturerFilterForm(FilterModifierMixin, ContactModelFilterForm, Organi
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DeviceTypeFilterSet)
class DeviceTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class DeviceTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = DeviceType model = DeviceType
fieldsets = ( fieldsets = (
@ -635,6 +644,7 @@ class DeviceTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
) )
@register_filterset(ModuleTypeProfileFilterSet)
class ModuleTypeProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ModuleTypeProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ModuleTypeProfile model = ModuleTypeProfile
fieldsets = ( fieldsets = (
@ -644,6 +654,7 @@ class ModuleTypeProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleTypeFilterSet)
class ModuleTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ModuleTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ModuleType model = ModuleType
fieldsets = ( fieldsets = (
@ -737,6 +748,7 @@ class ModuleTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
) )
@register_filterset(DeviceRoleFilterSet)
class DeviceRoleFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm): class DeviceRoleFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = DeviceRole model = DeviceRole
fieldsets = ( fieldsets = (
@ -756,6 +768,7 @@ class DeviceRoleFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PlatformFilterSet)
class PlatformFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm): class PlatformFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = Platform model = Platform
fieldsets = ( fieldsets = (
@ -781,6 +794,7 @@ class PlatformFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DeviceFilterSet)
class DeviceFilterForm( class DeviceFilterForm(
FilterModifierMixin, FilterModifierMixin,
LocalConfigContextFilterForm, LocalConfigContextFilterForm,
@ -980,6 +994,7 @@ class DeviceFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualDeviceContextFilterSet)
class VirtualDeviceContextFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class VirtualDeviceContextFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualDeviceContext model = VirtualDeviceContext
fieldsets = ( fieldsets = (
@ -1007,6 +1022,7 @@ class VirtualDeviceContextFilterForm(FilterModifierMixin, TenancyFilterForm, Pri
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleFilterSet)
class ModuleFilterForm(FilterModifierMixin, LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class ModuleFilterForm(FilterModifierMixin, LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Module model = Module
fieldsets = ( fieldsets = (
@ -1090,6 +1106,7 @@ class ModuleFilterForm(FilterModifierMixin, LocalConfigContextFilterForm, Tenanc
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualChassisFilterSet)
class VirtualChassisFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class VirtualChassisFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualChassis model = VirtualChassis
fieldsets = ( fieldsets = (
@ -1119,6 +1136,7 @@ class VirtualChassisFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryMo
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CableFilterSet)
class CableFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class CableFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Cable model = Cable
fieldsets = ( fieldsets = (
@ -1208,6 +1226,7 @@ class CableFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilter
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerPanelFilterSet)
class PowerPanelFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm): class PowerPanelFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = PowerPanel model = PowerPanel
fieldsets = ( fieldsets = (
@ -1247,6 +1266,7 @@ class PowerPanelFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerFeedFilterSet)
class PowerFeedFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class PowerFeedFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = PowerFeed model = PowerFeed
fieldsets = ( fieldsets = (
@ -1357,6 +1377,7 @@ class PathEndpointFilterForm(CabledFilterForm):
) )
@register_filterset(ConsolePortFilterSet)
class ConsolePortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm): class ConsolePortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsolePort model = ConsolePort
fieldsets = ( fieldsets = (
@ -1381,6 +1402,7 @@ class ConsolePortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceC
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ConsoleServerPortFilterSet)
class ConsoleServerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm): class ConsoleServerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsoleServerPort model = ConsoleServerPort
fieldsets = ( fieldsets = (
@ -1406,6 +1428,7 @@ class ConsoleServerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, D
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerPortFilterSet)
class PowerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm): class PowerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerPort model = PowerPort
fieldsets = ( fieldsets = (
@ -1425,6 +1448,7 @@ class PowerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceCom
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerOutletFilterSet)
class PowerOutletFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm): class PowerOutletFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerOutlet model = PowerOutlet
fieldsets = ( fieldsets = (
@ -1454,6 +1478,7 @@ class PowerOutletFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceC
) )
@register_filterset(InterfaceFilterSet)
class InterfaceFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm): class InterfaceFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = Interface model = Interface
fieldsets = ( fieldsets = (
@ -1580,6 +1605,7 @@ class InterfaceFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceCom
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(FrontPortFilterSet)
class FrontPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm): class FrontPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm):
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'), FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -1603,6 +1629,7 @@ class FrontPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponent
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RearPortFilterSet)
class RearPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm): class RearPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm):
model = RearPort model = RearPort
fieldsets = ( fieldsets = (
@ -1627,6 +1654,7 @@ class RearPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleBayFilterSet)
class ModuleBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm): class ModuleBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = ModuleBay model = ModuleBay
fieldsets = ( fieldsets = (
@ -1645,6 +1673,7 @@ class ModuleBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
) )
@register_filterset(DeviceBayFilterSet)
class DeviceBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm): class DeviceBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = DeviceBay model = DeviceBay
fieldsets = ( fieldsets = (
@ -1659,6 +1688,7 @@ class DeviceBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(InventoryItemFilterSet)
class InventoryItemFilterForm(FilterModifierMixin, DeviceComponentFilterForm): class InventoryItemFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = InventoryItem model = InventoryItem
fieldsets = ( fieldsets = (
@ -1710,6 +1740,7 @@ class InventoryItemFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
# Device component roles # Device component roles
# #
@register_filterset(InventoryItemRoleFilterSet)
class InventoryItemRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class InventoryItemRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = InventoryItemRole model = InventoryItemRole
fieldsets = ( fieldsets = (
@ -1722,6 +1753,7 @@ class InventoryItemRoleFilterForm(FilterModifierMixin, OrganizationalModelFilter
# Addressing # Addressing
# #
@register_filterset(MACAddressFilterSet)
class MACAddressFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class MACAddressFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = MACAddress model = MACAddress
fieldsets = ( fieldsets = (
@ -1835,39 +1867,3 @@ class InterfaceConnectionFilterForm(FilterForm):
}, },
label=_('Device') label=_('Device')
) )
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[CableFilterForm] = CableFilterSet
FILTERSET_MAPPINGS[ConsolePortFilterForm] = ConsolePortFilterSet
FILTERSET_MAPPINGS[ConsoleServerPortFilterForm] = ConsoleServerPortFilterSet
FILTERSET_MAPPINGS[DeviceBayFilterForm] = DeviceBayFilterSet
FILTERSET_MAPPINGS[DeviceFilterForm] = DeviceFilterSet
FILTERSET_MAPPINGS[DeviceRoleFilterForm] = DeviceRoleFilterSet
FILTERSET_MAPPINGS[DeviceTypeFilterForm] = DeviceTypeFilterSet
FILTERSET_MAPPINGS[FrontPortFilterForm] = FrontPortFilterSet
FILTERSET_MAPPINGS[InterfaceFilterForm] = InterfaceFilterSet
FILTERSET_MAPPINGS[InventoryItemFilterForm] = InventoryItemFilterSet
FILTERSET_MAPPINGS[InventoryItemRoleFilterForm] = InventoryItemRoleFilterSet
FILTERSET_MAPPINGS[LocationFilterForm] = LocationFilterSet
FILTERSET_MAPPINGS[MACAddressFilterForm] = MACAddressFilterSet
FILTERSET_MAPPINGS[ManufacturerFilterForm] = ManufacturerFilterSet
FILTERSET_MAPPINGS[ModuleBayFilterForm] = ModuleBayFilterSet
FILTERSET_MAPPINGS[ModuleFilterForm] = ModuleFilterSet
FILTERSET_MAPPINGS[ModuleTypeFilterForm] = ModuleTypeFilterSet
FILTERSET_MAPPINGS[ModuleTypeProfileFilterForm] = ModuleTypeProfileFilterSet
FILTERSET_MAPPINGS[PlatformFilterForm] = PlatformFilterSet
FILTERSET_MAPPINGS[PowerFeedFilterForm] = PowerFeedFilterSet
FILTERSET_MAPPINGS[PowerOutletFilterForm] = PowerOutletFilterSet
FILTERSET_MAPPINGS[PowerPanelFilterForm] = PowerPanelFilterSet
FILTERSET_MAPPINGS[PowerPortFilterForm] = PowerPortFilterSet
FILTERSET_MAPPINGS[RackFilterForm] = RackFilterSet
FILTERSET_MAPPINGS[RackReservationFilterForm] = RackReservationFilterSet
FILTERSET_MAPPINGS[RackRoleFilterForm] = RackRoleFilterSet
FILTERSET_MAPPINGS[RackTypeFilterForm] = RackTypeFilterSet
FILTERSET_MAPPINGS[RearPortFilterForm] = RearPortFilterSet
FILTERSET_MAPPINGS[RegionFilterForm] = RegionFilterSet
FILTERSET_MAPPINGS[SiteFilterForm] = SiteFilterSet
FILTERSET_MAPPINGS[SiteGroupFilterForm] = SiteGroupFilterSet
FILTERSET_MAPPINGS[VirtualChassisFilterForm] = VirtualChassisFilterSet
FILTERSET_MAPPINGS[VirtualDeviceContextFilterForm] = VirtualDeviceContextFilterSet

View File

@ -10,12 +10,11 @@ from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from tenancy.models import Tenant, TenantGroup from tenancy.models import Tenant, TenantGroup
from users.models import Group, Owner, User from users.models import Group, Owner, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
TagFilterField, TagFilterField,
) )
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DateTimePicker from utilities.forms.widgets import DateTimePicker
@ -42,6 +41,7 @@ __all__ = (
) )
@register_filterset(CustomFieldFilterSet)
class CustomFieldFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class CustomFieldFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomField model = CustomField
fieldsets = ( fieldsets = (
@ -129,6 +129,7 @@ class CustomFieldFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(CustomFieldChoiceSetFilterSet)
class CustomFieldChoiceSetFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class CustomFieldChoiceSetFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomFieldChoiceSet model = CustomFieldChoiceSet
fieldsets = ( fieldsets = (
@ -149,6 +150,7 @@ class CustomFieldChoiceSetFilterForm(FilterModifierMixin, SavedFiltersMixin, Fil
) )
@register_filterset(CustomLinkFilterSet)
class CustomLinkFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class CustomLinkFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomLink model = CustomLink
fieldsets = ( fieldsets = (
@ -185,6 +187,7 @@ class CustomLinkFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(ExportTemplateFilterSet)
class ExportTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ExportTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ExportTemplate model = ExportTemplate
fieldsets = ( fieldsets = (
@ -236,6 +239,7 @@ class ExportTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterFor
) )
@register_filterset(ImageAttachmentFilterSet)
class ImageAttachmentFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ImageAttachmentFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ImageAttachment model = ImageAttachment
fieldsets = ( fieldsets = (
@ -253,6 +257,7 @@ class ImageAttachmentFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterFo
) )
@register_filterset(SavedFilterFilterSet)
class SavedFilterFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class SavedFilterFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = SavedFilter model = SavedFilter
fieldsets = ( fieldsets = (
@ -289,6 +294,7 @@ class SavedFilterFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(TableConfigFilterSet)
class TableConfigFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class TableConfigFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id'), FieldSet('q', 'filter_id'),
@ -319,6 +325,7 @@ class TableConfigFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(WebhookFilterSet)
class WebhookFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class WebhookFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Webhook model = Webhook
fieldsets = ( fieldsets = (
@ -346,6 +353,7 @@ class WebhookFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(EventRuleFilterSet)
class EventRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class EventRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = EventRule model = EventRule
fieldsets = ( fieldsets = (
@ -382,6 +390,7 @@ class EventRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TagFilterSet)
class TagFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class TagFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Tag model = Tag
content_type_id = ContentTypeMultipleChoiceField( content_type_id = ContentTypeMultipleChoiceField(
@ -401,6 +410,7 @@ class TagFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(ConfigContextProfileFilterSet)
class ConfigContextProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ConfigContextProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ConfigContextProfile model = ConfigContextProfile
fieldsets = ( fieldsets = (
@ -422,6 +432,7 @@ class ConfigContextProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetF
) )
@register_filterset(ConfigContextFilterSet)
class ConfigContextFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ConfigContextFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigContext model = ConfigContext
fieldsets = ( fieldsets = (
@ -523,6 +534,7 @@ class ConfigContextFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm
) )
@register_filterset(ConfigTemplateFilterSet)
class ConfigTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class ConfigTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigTemplate model = ConfigTemplate
fieldsets = ( fieldsets = (
@ -587,6 +599,7 @@ class LocalConfigContextFilterForm(forms.Form):
) )
@register_filterset(JournalEntryFilterSet)
class JournalEntryFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class JournalEntryFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = JournalEntry model = JournalEntry
fieldsets = ( fieldsets = (
@ -622,6 +635,7 @@ class JournalEntryFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(NotificationGroupFilterSet)
class NotificationGroupFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class NotificationGroupFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = NotificationGroup model = NotificationGroup
user_id = DynamicModelMultipleChoiceField( user_id = DynamicModelMultipleChoiceField(
@ -634,21 +648,3 @@ class NotificationGroupFilterForm(FilterModifierMixin, SavedFiltersMixin, Filter
required=False, required=False,
label=_('Group') label=_('Group')
) )
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[CustomFieldFilterForm] = CustomFieldFilterSet
FILTERSET_MAPPINGS[CustomFieldChoiceSetFilterForm] = CustomFieldChoiceSetFilterSet
FILTERSET_MAPPINGS[CustomLinkFilterForm] = CustomLinkFilterSet
FILTERSET_MAPPINGS[ExportTemplateFilterForm] = ExportTemplateFilterSet
FILTERSET_MAPPINGS[ImageAttachmentFilterForm] = ImageAttachmentFilterSet
FILTERSET_MAPPINGS[SavedFilterFilterForm] = SavedFilterFilterSet
FILTERSET_MAPPINGS[TableConfigFilterForm] = TableConfigFilterSet
FILTERSET_MAPPINGS[WebhookFilterForm] = WebhookFilterSet
FILTERSET_MAPPINGS[EventRuleFilterForm] = EventRuleFilterSet
FILTERSET_MAPPINGS[TagFilterForm] = TagFilterSet
FILTERSET_MAPPINGS[ConfigContextProfileFilterForm] = ConfigContextProfileFilterSet
FILTERSET_MAPPINGS[ConfigContextFilterForm] = ConfigContextFilterSet
FILTERSET_MAPPINGS[ConfigTemplateFilterForm] = ConfigTemplateFilterSet
FILTERSET_MAPPINGS[JournalEntryFilterForm] = JournalEntryFilterSet
FILTERSET_MAPPINGS[NotificationGroupFilterForm] = NotificationGroupFilterSet

View File

@ -8,9 +8,8 @@ from ipam.filtersets import *
from ipam.models import * from ipam.models import *
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice, register_filterset
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from virtualization.models import VirtualMachine, ClusterGroup, Cluster from virtualization.models import VirtualMachine, ClusterGroup, Cluster
@ -45,6 +44,7 @@ IPADDRESS_MASK_LENGTH_CHOICES = add_blank_choice([
]) ])
@register_filterset(VRFFilterSet)
class VRFFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class VRFFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VRF model = VRF
fieldsets = ( fieldsets = (
@ -65,6 +65,7 @@ class VRFFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSe
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RouteTargetFilterSet)
class RouteTargetFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class RouteTargetFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = RouteTarget model = RouteTarget
fieldsets = ( fieldsets = (
@ -85,6 +86,7 @@ class RouteTargetFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModel
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RIRFilterSet)
class RIRFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class RIRFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = RIR model = RIR
fieldsets = ( fieldsets = (
@ -101,6 +103,7 @@ class RIRFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(AggregateFilterSet)
class AggregateFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class AggregateFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Aggregate model = Aggregate
fieldsets = ( fieldsets = (
@ -122,6 +125,7 @@ class AggregateFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFi
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ASNRangeFilterSet)
class ASNRangeFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm): class ASNRangeFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
model = ASNRange model = ASNRange
fieldsets = ( fieldsets = (
@ -145,6 +149,7 @@ class ASNRangeFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ASNFilterSet)
class ASNFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class ASNFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = ASN model = ASN
fieldsets = ( fieldsets = (
@ -170,6 +175,7 @@ class ASNFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSe
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RoleFilterSet)
class RoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class RoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = Role model = Role
fieldsets = ( fieldsets = (
@ -178,6 +184,7 @@ class RoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PrefixFilterSet)
class PrefixFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class PrefixFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Prefix model = Prefix
fieldsets = ( fieldsets = (
@ -284,6 +291,7 @@ class PrefixFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilte
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPRangeFilterSet)
class IPRangeFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class IPRangeFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPRange model = IPRange
fieldsets = ( fieldsets = (
@ -331,6 +339,7 @@ class IPRangeFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilt
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPAddressFilterSet)
class IPAddressFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class IPAddressFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPAddress model = IPAddress
fieldsets = ( fieldsets = (
@ -409,6 +418,7 @@ class IPAddressFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFi
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(FHRPGroupFilterSet)
class FHRPGroupFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class FHRPGroupFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = FHRPGroup model = FHRPGroup
fieldsets = ( fieldsets = (
@ -442,6 +452,7 @@ class FHRPGroupFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANGroupFilterSet)
class VLANGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm): class VLANGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'), FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -495,6 +506,7 @@ class VLANGroupFilterForm(FilterModifierMixin, TenancyFilterForm, Organizational
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANTranslationPolicyFilterSet)
class VLANTranslationPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class VLANTranslationPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = VLANTranslationPolicy model = VLANTranslationPolicy
fieldsets = ( fieldsets = (
@ -508,6 +520,7 @@ class VLANTranslationPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSet
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANTranslationRuleFilterSet)
class VLANTranslationRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class VLANTranslationRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VLANTranslationRule model = VLANTranslationRule
fieldsets = ( fieldsets = (
@ -532,6 +545,7 @@ class VLANTranslationRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetFor
) )
@register_filterset(VLANFilterSet)
class VLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class VLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VLAN model = VLAN
fieldsets = ( fieldsets = (
@ -604,6 +618,7 @@ class VLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterS
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ServiceTemplateFilterSet)
class ServiceTemplateFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ServiceTemplateFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ServiceTemplate model = ServiceTemplate
fieldsets = ( fieldsets = (
@ -622,6 +637,7 @@ class ServiceTemplateFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ServiceFilterSet)
class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm): class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm):
model = Service model = Service
fieldsets = ( fieldsets = (
@ -646,23 +662,3 @@ class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm):
label=_('FHRP Group'), label=_('FHRP Group'),
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[AggregateFilterForm] = AggregateFilterSet
FILTERSET_MAPPINGS[ASNFilterForm] = ASNFilterSet
FILTERSET_MAPPINGS[ASNRangeFilterForm] = ASNRangeFilterSet
FILTERSET_MAPPINGS[FHRPGroupFilterForm] = FHRPGroupFilterSet
FILTERSET_MAPPINGS[IPAddressFilterForm] = IPAddressFilterSet
FILTERSET_MAPPINGS[IPRangeFilterForm] = IPRangeFilterSet
FILTERSET_MAPPINGS[PrefixFilterForm] = PrefixFilterSet
FILTERSET_MAPPINGS[RIRFilterForm] = RIRFilterSet
FILTERSET_MAPPINGS[RoleFilterForm] = RoleFilterSet
FILTERSET_MAPPINGS[RouteTargetFilterForm] = RouteTargetFilterSet
FILTERSET_MAPPINGS[ServiceFilterForm] = ServiceFilterSet
FILTERSET_MAPPINGS[ServiceTemplateFilterForm] = ServiceTemplateFilterSet
FILTERSET_MAPPINGS[VLANFilterForm] = VLANFilterSet
FILTERSET_MAPPINGS[VLANGroupFilterForm] = VLANGroupFilterSet
FILTERSET_MAPPINGS[VLANTranslationPolicyFilterForm] = VLANTranslationPolicyFilterSet
FILTERSET_MAPPINGS[VLANTranslationRuleFilterForm] = VLANTranslationRuleFilterSet
FILTERSET_MAPPINGS[VRFFilterForm] = VRFFilterSet

View File

@ -26,6 +26,7 @@ registry = Registry({
'data_backends': dict(), 'data_backends': dict(),
'denormalized_fields': collections.defaultdict(list), 'denormalized_fields': collections.defaultdict(list),
'event_types': dict(), 'event_types': dict(),
'filtersets': dict(),
'model_features': dict(), 'model_features': dict(),
'models': collections.defaultdict(set), 'models': collections.defaultdict(set),
'plugins': dict(), 'plugins': dict(),

View File

@ -13,7 +13,7 @@ from tenancy.forms import ContactModelFilterForm
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS from utilities.forms import register_filterset
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
@ -31,6 +31,7 @@ __all__ = (
# Tenants # Tenants
# #
@register_filterset(TenantGroupFilterSet)
class TenantGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm): class TenantGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = TenantGroup model = TenantGroup
fieldsets = ( fieldsets = (
@ -45,6 +46,7 @@ class TenantGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TenantFilterSet)
class TenantFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm): class TenantFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Tenant model = Tenant
fieldsets = ( fieldsets = (
@ -65,6 +67,7 @@ class TenantFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModel
# Contacts # Contacts
# #
@register_filterset(ContactGroupFilterSet)
class ContactGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm): class ContactGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = ContactGroup model = ContactGroup
fieldsets = ( fieldsets = (
@ -79,6 +82,7 @@ class ContactGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm)
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactRoleFilterSet)
class ContactRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class ContactRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = ContactRole model = ContactRole
fieldsets = ( fieldsets = (
@ -87,6 +91,7 @@ class ContactRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactFilterSet)
class ContactFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class ContactFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = Contact model = Contact
fieldsets = ( fieldsets = (
@ -102,6 +107,7 @@ class ContactFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactAssignmentFilterSet)
class ContactAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class ContactAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = ContactAssignment model = ContactAssignment
fieldsets = ( fieldsets = (
@ -134,12 +140,3 @@ class ContactAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm)
required=False required=False
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ContactAssignmentFilterForm] = ContactAssignmentFilterSet
FILTERSET_MAPPINGS[ContactFilterForm] = ContactFilterSet
FILTERSET_MAPPINGS[ContactGroupFilterForm] = ContactGroupFilterSet
FILTERSET_MAPPINGS[ContactRoleFilterForm] = ContactRoleFilterSet
FILTERSET_MAPPINGS[TenantFilterForm] = TenantFilterSet
FILTERSET_MAPPINGS[TenantGroupFilterForm] = TenantGroupFilterSet

View File

@ -5,9 +5,8 @@ from netbox.forms import NetBoxModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from users.choices import TokenVersionChoices from users.choices import TokenVersionChoices
from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, register_filterset
from utilities.forms.fields import DynamicModelMultipleChoiceField from utilities.forms.fields import DynamicModelMultipleChoiceField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice from utilities.forms.utils import add_blank_choice
@ -24,6 +23,7 @@ __all__ = (
) )
@register_filterset(GroupFilterSet)
class GroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class GroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Group model = Group
fieldsets = ( fieldsets = (
@ -31,6 +31,7 @@ class GroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
) )
@register_filterset(UserFilterSet)
class UserFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class UserFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = User model = User
fieldsets = ( fieldsets = (
@ -59,6 +60,7 @@ class UserFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
) )
@register_filterset(ObjectPermissionFilterSet)
class ObjectPermissionFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class ObjectPermissionFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = ObjectPermission model = ObjectPermission
fieldsets = ( fieldsets = (
@ -113,6 +115,7 @@ class ObjectPermissionFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
) )
@register_filterset(TokenFilterSet)
class TokenFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm): class TokenFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Token model = Token
fieldsets = ( fieldsets = (
@ -154,6 +157,7 @@ class TokenFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
) )
@register_filterset(OwnerGroupFilterSet)
class OwnerGroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class OwnerGroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = OwnerGroup model = OwnerGroup
fieldsets = ( fieldsets = (
@ -161,6 +165,7 @@ class OwnerGroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
) )
@register_filterset(OwnerFilterSet)
class OwnerFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class OwnerFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Owner model = Owner
fieldsets = ( fieldsets = (
@ -183,12 +188,3 @@ class OwnerFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
required=False, required=False,
label=_('Users') label=_('Users')
) )
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[GroupFilterForm] = GroupFilterSet
FILTERSET_MAPPINGS[UserFilterForm] = UserFilterSet
FILTERSET_MAPPINGS[ObjectPermissionFilterForm] = ObjectPermissionFilterSet
FILTERSET_MAPPINGS[TokenFilterForm] = TokenFilterSet
FILTERSET_MAPPINGS[OwnerGroupFilterForm] = OwnerGroupFilterSet
FILTERSET_MAPPINGS[OwnerFilterForm] = OwnerFilterSet

View File

@ -2,3 +2,22 @@ from .constants import *
from .forms import * from .forms import *
from .mixins import * from .mixins import *
from .utils import * from .utils import *
def register_filterset(filterset_class):
"""
Decorator for registering a FilterForm -> FilterSet mapping.
Usage:
@register_filterset(DeviceFilterSet)
class DeviceFilterForm(NetBoxModelFilterSetForm):
...
Args:
filterset_class: The corresponding filterset class
"""
def decorator(form_class):
from netbox.registry import registry
registry['filtersets'][form_class] = filterset_class
return form_class
return decorator

View File

@ -1,11 +0,0 @@
# Mapping of filter form classes to their corresponding FilterSet classes
# This enables the FilterModifierMixin to verify which lookups are actually supported
# by checking the FilterSet's auto-generated lookup filters.
#
# Usage:
# from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
# from .forms.filtersets import XFilterForm
# from .filtersets import XFilterSet
# FILTERSET_MAPPINGS[XFilterForm] = XFilterSet
FILTERSET_MAPPINGS = {}

View File

@ -172,10 +172,10 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self): def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with FilterModifierWidget.""" """Wrap compatible field widgets with FilterModifierWidget."""
from utilities.forms.widgets import FilterModifierWidget from utilities.forms.widgets import FilterModifierWidget
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS from netbox.registry import registry
# Get the corresponding FilterSet if registered # Get the corresponding FilterSet if registered
filterset_class = FILTERSET_MAPPINGS.get(self.__class__) filterset_class = registry['filtersets'].get(self.__class__)
filterset = filterset_class() if filterset_class else None filterset = filterset_class() if filterset_class else None
for field_name, field in self.fields.items(): for field_name, field in self.fields.items():

View File

@ -9,9 +9,8 @@ from ipam.models import VRF, VLANTranslationPolicy
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from users.models import Owner from users.models import Owner
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, register_filterset
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from virtualization.choices import * from virtualization.choices import *
@ -29,6 +28,7 @@ __all__ = (
) )
@register_filterset(ClusterTypeFilterSet)
class ClusterTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm): class ClusterTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = ClusterType model = ClusterType
fieldsets = ( fieldsets = (
@ -37,6 +37,7 @@ class ClusterTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ClusterGroupFilterSet)
class ClusterGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm): class ClusterGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = ClusterGroup model = ClusterGroup
tag = TagFilterField(model) tag = TagFilterField(model)
@ -46,6 +47,7 @@ class ClusterGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, Organi
) )
@register_filterset(ClusterFilterSet)
class ClusterFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class ClusterFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Cluster model = Cluster
fieldsets = ( fieldsets = (
@ -100,6 +102,7 @@ class ClusterFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilt
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualMachineFilterSet)
class VirtualMachineFilterForm( class VirtualMachineFilterForm(
FilterModifierMixin, FilterModifierMixin,
LocalConfigContextFilterForm, LocalConfigContextFilterForm,
@ -209,6 +212,7 @@ class VirtualMachineFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VMInterfaceFilterSet)
class VMInterfaceFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class VMInterfaceFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VMInterface model = VMInterface
fieldsets = ( fieldsets = (
@ -271,6 +275,7 @@ class VMInterfaceFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualDiskFilterSet)
class VirtualDiskFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class VirtualDiskFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VirtualDisk model = VirtualDisk
fieldsets = ( fieldsets = (
@ -294,12 +299,3 @@ class VirtualDiskFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
label=_('Owner'), label=_('Owner'),
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ClusterFilterForm] = ClusterFilterSet
FILTERSET_MAPPINGS[ClusterGroupFilterForm] = ClusterGroupFilterSet
FILTERSET_MAPPINGS[ClusterTypeFilterForm] = ClusterTypeFilterSet
FILTERSET_MAPPINGS[VirtualDiskFilterForm] = VirtualDiskFilterSet
FILTERSET_MAPPINGS[VirtualMachineFilterForm] = VirtualMachineFilterSet
FILTERSET_MAPPINGS[VMInterfaceFilterForm] = VMInterfaceFilterSet

View File

@ -9,7 +9,7 @@ from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS from utilities.forms import register_filterset
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice from utilities.forms.utils import add_blank_choice
@ -33,6 +33,7 @@ __all__ = (
) )
@register_filterset(TunnelGroupFilterSet)
class TunnelGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm): class TunnelGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = TunnelGroup model = TunnelGroup
fieldsets = ( fieldsets = (
@ -42,6 +43,7 @@ class TunnelGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, Organiz
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TunnelFilterSet)
class TunnelFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class TunnelFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Tunnel model = Tunnel
fieldsets = ( fieldsets = (
@ -78,6 +80,7 @@ class TunnelFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilte
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TunnelTerminationFilterSet)
class TunnelTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class TunnelTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = TunnelTermination model = TunnelTermination
fieldsets = ( fieldsets = (
@ -97,6 +100,7 @@ class TunnelTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm)
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IKEProposalFilterSet)
class IKEProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class IKEProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IKEProposal model = IKEProposal
fieldsets = ( fieldsets = (
@ -128,6 +132,7 @@ class IKEProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IKEPolicyFilterSet)
class IKEPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class IKEPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IKEPolicy model = IKEPolicy
fieldsets = ( fieldsets = (
@ -152,6 +157,7 @@ class IKEPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecProposalFilterSet)
class IPSecProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class IPSecProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecProposal model = IPSecProposal
fieldsets = ( fieldsets = (
@ -171,6 +177,7 @@ class IPSecProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecPolicyFilterSet)
class IPSecPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class IPSecPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecPolicy model = IPSecPolicy
fieldsets = ( fieldsets = (
@ -190,6 +197,7 @@ class IPSecPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecProfileFilterSet)
class IPSecProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm): class IPSecProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecProfile model = IPSecProfile
fieldsets = ( fieldsets = (
@ -214,6 +222,7 @@ class IPSecProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(L2VPNFilterSet)
class L2VPNFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class L2VPNFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = L2VPN model = L2VPN
fieldsets = ( fieldsets = (
@ -245,6 +254,7 @@ class L2VPNFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilter
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(L2VPNTerminationFilterSet)
class L2VPNTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm): class L2VPNTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = L2VPNTermination model = L2VPNTermination
fieldsets = ( fieldsets = (
@ -307,16 +317,3 @@ class L2VPNTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
label=_('Virtual Machine') label=_('Virtual Machine')
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[IKEPolicyFilterForm] = IKEPolicyFilterSet
FILTERSET_MAPPINGS[IKEProposalFilterForm] = IKEProposalFilterSet
FILTERSET_MAPPINGS[IPSecPolicyFilterForm] = IPSecPolicyFilterSet
FILTERSET_MAPPINGS[IPSecProfileFilterForm] = IPSecProfileFilterSet
FILTERSET_MAPPINGS[IPSecProposalFilterForm] = IPSecProposalFilterSet
FILTERSET_MAPPINGS[L2VPNFilterForm] = L2VPNFilterSet
FILTERSET_MAPPINGS[L2VPNTerminationFilterForm] = L2VPNTerminationFilterSet
FILTERSET_MAPPINGS[TunnelFilterForm] = TunnelFilterSet
FILTERSET_MAPPINGS[TunnelGroupFilterForm] = TunnelGroupFilterSet
FILTERSET_MAPPINGS[TunnelTerminationFilterForm] = TunnelTerminationFilterSet

View File

@ -6,9 +6,8 @@ from dcim.models import Location, Region, Site, SiteGroup
from netbox.choices import * from netbox.choices import *
from netbox.forms import NestedGroupModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NestedGroupModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import TenancyFilterForm from tenancy.forms import TenancyFilterForm
from utilities.forms import add_blank_choice from utilities.forms import add_blank_choice, register_filterset
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from wireless.choices import * from wireless.choices import *
@ -22,6 +21,7 @@ __all__ = (
) )
@register_filterset(WirelessLANGroupFilterSet)
class WirelessLANGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm): class WirelessLANGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = WirelessLANGroup model = WirelessLANGroup
fieldsets = ( fieldsets = (
@ -36,6 +36,7 @@ class WirelessLANGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(WirelessLANFilterSet)
class WirelessLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class WirelessLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLAN model = WirelessLAN
fieldsets = ( fieldsets = (
@ -102,6 +103,7 @@ class WirelessLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModel
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(WirelessLinkFilterSet)
class WirelessLinkFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm): class WirelessLinkFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLink model = WirelessLink
fieldsets = ( fieldsets = (
@ -143,9 +145,3 @@ class WirelessLinkFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryMode
required=False required=False
) )
tag = TagFilterField(model) tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[WirelessLANFilterForm] = WirelessLANFilterSet
FILTERSET_MAPPINGS[WirelessLANGroupFilterForm] = WirelessLANGroupFilterSet
FILTERSET_MAPPINGS[WirelessLinkFilterForm] = WirelessLinkFilterSet