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 77196ea80e
commit 0e7553d0ae
14 changed files with 144 additions and 173 deletions
+19
View File
@@ -2,3 +2,22 @@ from .constants import *
from .forms import *
from .mixins 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
@@ -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 = {}
+2 -2
View File
@@ -172,10 +172,10 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with 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
filterset_class = FILTERSET_MAPPINGS.get(self.__class__)
filterset_class = registry['filtersets'].get(self.__class__)
filterset = filterset_class() if filterset_class else None
for field_name, field in self.fields.items():