netbox/netbox/circuits/filtersets.py

270 lines
8.7 KiB
Python
Raw Normal View History

2016-03-01 11:23:03 -05:00
import django_filters
from django.db.models import Q
from django.utils.translation import gettext as _
from dcim.filtersets import CabledObjectFilterSet
from dcim.models import Region, Site, SiteGroup
from ipam.models import ASN
2022-07-12 12:30:07 -04:00
from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
2021-04-29 16:12:31 -04:00
from utilities.filters import TreeNodeMultipleChoiceFilter
2019-11-07 11:10:46 -05:00
from .choices import *
2021-03-18 11:10:48 -04:00
from .models import *
2016-03-01 11:23:03 -05:00
2020-01-08 17:20:31 -05:00
__all__ = (
2020-01-09 20:25:33 -05:00
'CircuitFilterSet',
'CircuitTerminationFilterSet',
'CircuitTypeFilterSet',
2021-04-01 10:21:41 -04:00
'ProviderNetworkFilterSet',
'ProviderAccountFilterSet',
2020-01-09 20:25:33 -05:00
'ProviderFilterSet',
2020-01-08 17:20:31 -05:00
)
2016-03-01 11:23:03 -05:00
2022-03-18 13:17:11 -04:00
class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
2020-02-09 17:46:21 -05:00
field_name='circuits__terminations__site__region',
lookup_expr='in',
label=_('Region (ID)'),
)
region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
2020-02-09 17:46:21 -05:00
field_name='circuits__terminations__site__region',
lookup_expr='in',
to_field_name='slug',
label=_('Region (slug)'),
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='circuits__terminations__site__group',
lookup_expr='in',
label=_('Site group (ID)'),
)
site_group = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='circuits__terminations__site__group',
lookup_expr='in',
to_field_name='slug',
label=_('Site group (slug)'),
)
site_id = django_filters.ModelMultipleChoiceFilter(
2018-11-02 13:46:28 -04:00
field_name='circuits__terminations__site',
queryset=Site.objects.all(),
label=_('Site'),
)
site = django_filters.ModelMultipleChoiceFilter(
2018-11-02 13:46:28 -04:00
field_name='circuits__terminations__site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label=_('Site (slug)'),
)
asn_id = django_filters.ModelMultipleChoiceFilter(
field_name='asns',
queryset=ASN.objects.all(),
label=_('ASN (ID)'),
)
class Meta:
model = Provider
fields = ['id', 'name', 'slug']
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value) |
Q(accounts__account__icontains=value) |
Q(accounts__name__icontains=value) |
Q(comments__icontains=value)
)
class ProviderAccountFilterSet(NetBoxModelFilterSet):
provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(),
label=_('Provider (ID)'),
)
provider = django_filters.ModelMultipleChoiceFilter(
field_name='provider__slug',
queryset=Provider.objects.all(),
to_field_name='slug',
label=_('Provider (slug)'),
)
class Meta:
model = ProviderAccount
fields = ['id', 'name', 'account', 'description']
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value) |
Q(account__icontains=value) |
Q(comments__icontains=value)
).distinct()
class ProviderNetworkFilterSet(NetBoxModelFilterSet):
2021-03-18 11:10:48 -04:00
provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(),
label=_('Provider (ID)'),
2021-03-18 11:10:48 -04:00
)
provider = django_filters.ModelMultipleChoiceFilter(
field_name='provider__slug',
queryset=Provider.objects.all(),
to_field_name='slug',
label=_('Provider (slug)'),
2021-03-18 11:10:48 -04:00
)
class Meta:
2021-04-01 10:21:41 -04:00
model = ProviderNetwork
2022-02-25 14:06:45 -05:00
fields = ['id', 'name', 'service_id', 'description']
2021-03-18 11:10:48 -04:00
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value) |
Q(service_id__icontains=value) |
2021-03-18 11:10:48 -04:00
Q(description__icontains=value) |
Q(comments__icontains=value)
).distinct()
2021-04-29 15:59:11 -04:00
class CircuitTypeFilterSet(OrganizationalModelFilterSet):
class Meta:
model = CircuitType
fields = ['id', 'name', 'slug', 'description']
2022-03-18 13:17:11 -04:00
class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
2016-03-01 11:23:03 -05:00
provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(),
label=_('Provider (ID)'),
2016-03-01 11:23:03 -05:00
)
provider = django_filters.ModelMultipleChoiceFilter(
2018-11-02 13:46:28 -04:00
field_name='provider__slug',
2016-03-01 11:23:03 -05:00
queryset=Provider.objects.all(),
to_field_name='slug',
label=_('Provider (slug)'),
2016-03-01 11:23:03 -05:00
)
provider_account_id = django_filters.ModelMultipleChoiceFilter(
field_name='provider_account',
queryset=ProviderAccount.objects.all(),
label=_('ProviderAccount (ID)'),
)
2021-04-01 10:21:41 -04:00
provider_network_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__provider_network',
queryset=ProviderNetwork.objects.all(),
label=_('ProviderNetwork (ID)'),
2021-03-18 14:32:28 -04:00
)
2016-03-01 11:23:03 -05:00
type_id = django_filters.ModelMultipleChoiceFilter(
queryset=CircuitType.objects.all(),
label=_('Circuit type (ID)'),
2016-03-01 11:23:03 -05:00
)
type = django_filters.ModelMultipleChoiceFilter(
2018-11-02 13:46:28 -04:00
field_name='type__slug',
2016-03-01 11:23:03 -05:00
queryset=CircuitType.objects.all(),
to_field_name='slug',
label=_('Circuit type (slug)'),
2016-03-01 11:23:03 -05:00
)
status = django_filters.MultipleChoiceFilter(
2019-11-07 11:10:46 -05:00
choices=CircuitStatusChoices,
null_value=None
)
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
2020-02-09 17:46:21 -05:00
field_name='terminations__site__region',
lookup_expr='in',
label=_('Region (ID)'),
)
region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
2020-02-09 17:46:21 -05:00
field_name='terminations__site__region',
lookup_expr='in',
to_field_name='slug',
label=_('Region (slug)'),
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='terminations__site__group',
lookup_expr='in',
label=_('Site group (ID)'),
)
site_group = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='terminations__site__group',
lookup_expr='in',
to_field_name='slug',
label=_('Site group (slug)'),
)
site_id = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site',
queryset=Site.objects.all(),
label=_('Site (ID)'),
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='terminations__site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label=_('Site (slug)'),
)
2016-03-01 11:23:03 -05:00
class Meta:
model = Circuit
fields = ['id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate']
2016-03-01 11:23:03 -05:00
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(cid__icontains=value) |
Q(terminations__xconnect_id__icontains=value) |
Q(terminations__pp_info__icontains=value) |
Q(terminations__description__icontains=value) |
Q(description__icontains=value) |
Q(comments__icontains=value)
).distinct()
class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
q = django_filters.CharFilter(
method='search',
label=_('Search'),
)
circuit_id = django_filters.ModelMultipleChoiceFilter(
queryset=Circuit.objects.all(),
label=_('Circuit'),
)
site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(),
label=_('Site (ID)'),
)
site = django_filters.ModelMultipleChoiceFilter(
2018-11-02 13:46:28 -04:00
field_name='site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label=_('Site (slug)'),
)
2021-04-01 10:21:41 -04:00
provider_network_id = django_filters.ModelMultipleChoiceFilter(
queryset=ProviderNetwork.objects.all(),
label=_('ProviderNetwork (ID)'),
)
class Meta:
model = CircuitTermination
fields = ['id', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id', 'description', 'cable_end']
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(circuit__cid__icontains=value) |
Q(xconnect_id__icontains=value) |
Q(pp_info__icontains=value) |
Q(description__icontains=value)
).distinct()