netbox-acls/netbox_acls/filtersets.py
2022-10-05 11:47:50 +00:00

175 lines
5.1 KiB
Python

"""
Filters enable users to request only a specific subset of objects matching a query;
when filtering the sites list by status or region, for instance.
"""
import django_filters
from dcim.models import Device, Interface, VirtualChassis
from netbox.filtersets import NetBoxModelFilterSet
from virtualization.models import VirtualMachine, VMInterface
from .models import AccessList, ACLExtendedRule, ACLInterfaceAssignment, ACLStandardRule
__all__ = (
"AccessListFilterSet",
"ACLStandardRuleFilterSet",
"ACLInterfaceAssignmentFilterSet",
"ACLExtendedRuleFilterSet",
)
class AccessListFilterSet(NetBoxModelFilterSet):
"""
Define the filter set for the django model AccessList.
"""
device = django_filters.ModelMultipleChoiceFilter(
field_name="device__name",
queryset=Device.objects.all(),
to_field_name="name",
label="Device (name)",
)
device_id = django_filters.ModelMultipleChoiceFilter(
field_name="device",
queryset=Device.objects.all(),
label="Device (ID)",
)
virtual_chassis = django_filters.ModelMultipleChoiceFilter(
field_name="virtual_chassis__name",
queryset=VirtualChassis.objects.all(),
to_field_name="name",
label="Virtual Chassis (name)",
)
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
field_name="virtual_chassis",
queryset=VirtualChassis.objects.all(),
label="Virtual Chassis (ID)",
)
virtual_machine = django_filters.ModelMultipleChoiceFilter(
field_name="virtual_machine__name",
queryset=VirtualMachine.objects.all(),
to_field_name="name",
label="Virtual Machine (name)",
)
virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
field_name="virtual_machine",
queryset=VirtualMachine.objects.all(),
label="Virtual machine (ID)",
)
class Meta:
"""
Associates the django model AccessList & fields to the filter set.
"""
model = AccessList
fields = (
"id",
"name",
"device",
"device_id",
"virtual_chassis",
"virtual_chassis_id",
"virtual_machine",
"virtual_machine_id",
"type",
"default_action",
"comments",
)
def search(self, queryset, name, value):
"""
Override the default search behavior for the django model.
"""
return queryset.filter(description__icontains=value)
class ACLInterfaceAssignmentFilterSet(NetBoxModelFilterSet):
"""
Define the filter set for the django model ACLInterfaceAssignment.
"""
interface = django_filters.ModelMultipleChoiceFilter(
field_name="interface__name",
queryset=Interface.objects.all(),
to_field_name="name",
label="Interface (name)",
)
interface_id = django_filters.ModelMultipleChoiceFilter(
field_name="interface",
queryset=Interface.objects.all(),
label="Interface (ID)",
)
vminterface = django_filters.ModelMultipleChoiceFilter(
field_name="vminterface__name",
queryset=VMInterface.objects.all(),
to_field_name="name",
label="VM Interface (name)",
)
vminterface_id = django_filters.ModelMultipleChoiceFilter(
field_name="vminterface",
queryset=VMInterface.objects.all(),
label="VM Interface (ID)",
)
class Meta:
"""
Associates the django model ACLInterfaceAssignment & fields to the filter set.
"""
model = ACLInterfaceAssignment
fields = (
"id",
"access_list",
"direction",
"interface",
"interface_id",
"vminterface",
"vminterface_id",
)
def search(self, queryset, name, value):
"""
Override the default search behavior for the django model.
"""
return queryset.filter(description__icontains=value)
class ACLStandardRuleFilterSet(NetBoxModelFilterSet):
"""
Define the filter set for the django model ACLStandardRule.
"""
class Meta:
"""
Associates the django model ACLStandardRule & fields to the filter set.
"""
model = ACLStandardRule
fields = ("id", "access_list", "index", "action")
def search(self, queryset, name, value):
"""
Override the default search behavior for the django model.
"""
return queryset.filter(description__icontains=value)
class ACLExtendedRuleFilterSet(NetBoxModelFilterSet):
"""
Define the filter set for the django model ACLExtendedRule.
"""
class Meta:
"""
Associates the django model ACLExtendedRule & fields to the filter set.
"""
model = ACLExtendedRule
fields = ("id", "access_list", "index", "action", "protocol")
def search(self, queryset, name, value):
"""
Override the default search behavior for the django model.
"""
return queryset.filter(description__icontains=value)