diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py index 870635f25b3387f7d767a9d6eae75f1d09e9557d..e956f21066d795aa732ecaccb1525c8a439e388a 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py @@ -5,7 +5,7 @@ class NetBoxRpsConfig(PluginConfig): name = 'netbox_rps_plugin' verbose_name = 'NetBox RPS' description = 'A Netbox plugin to add RPS resources' - version = '0.8.1' + version = '0.8.2' author = "Vincent Simonin" author_email = "vincent.simonin@ext.ec.europa.eu" base_url = 'rps' diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/filtersets.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/filtersets.py index b7658fec310d92930845294e562852f199017c64..40adf27860f1d2cd79a23554686ad207c935723b 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/filtersets.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/filtersets.py @@ -1,28 +1,35 @@ from netbox.filtersets import NetBoxModelFilterSet -from .models import Mapping, HttpHeader +from .models import Mapping, HttpHeader, AuthenticationChoices from django.db.models import Q +import django_filters + class MappingFilterSet(NetBoxModelFilterSet): class Meta: model = Mapping - fields = ('id', 'authentication', 'source', 'target', 'Comment') + fields = ('id', 'authentication', 'source', 'target', 'Comment', 'webdav', 'testingpage') def search(self, queryset, name, value): - return queryset.filter( Q(source__icontains=value) | Q(target__icontains=value) - | Q(authentication__icontains=value) | Q(Comment__icontains=value)) + if not value.strip(): + return queryset + return queryset.filter( + Q(source__icontains=value) | + Q(target__icontains=value) | + Q(Comment__icontains=value) + ) + class HttpHeaderFilterSet(NetBoxModelFilterSet): class Meta: model = HttpHeader - fields = ('id', 'name', 'value', 'apply_to') + fields = ('id', 'name', 'value', 'apply_to', 'mapping') def search(self, queryset, name, value): - """Perform the filtered search.""" if not value.strip(): return queryset - qs_filter = ( - Q(name__icontains=value) + return queryset.filter( + Q(name__icontains=value) | + Q(value__icontains=value) ) - return queryset.filter(qs_filter) diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/forms.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/forms.py index abb293e5b3211a863949fa2aea9f87763fa9f773..aa9eb6743cc0ceb26b1d9b19ae1fc1a98374f410 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/forms.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/forms.py @@ -1,7 +1,9 @@ from django import forms from django.utils.translation import gettext as _ from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm -from .models import Mapping, AuthenticationChoices, HttpHeader +from .models import Mapping, AuthenticationChoices, HttpHeader, ApplyToChoices +from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField +from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice class MappingForm(NetBoxModelForm): @@ -22,10 +24,19 @@ class MappingForm(NetBoxModelForm): class MappingFilterForm(NetBoxModelFilterSetForm): model = Mapping + source = forms.CharField(max_length=120, min_length=1, required=False, label='Source URL') + target = forms.CharField(max_length=120, min_length=1, required=False, label='Target URL') authentication = forms.MultipleChoiceField( choices=AuthenticationChoices, required=False, ) + webdav = forms.BooleanField( + required=False, + widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES) + ) + testingpage = forms.CharField(max_length=120, min_length=1, required=False, label='Testing URL') + Comment = forms.CharField(max_length=500, min_length=1, required=False, label='Comment') + tag = TagFilterField(model) class MappingImportForm(NetBoxModelImportForm): @@ -48,3 +59,15 @@ class HttpHeaderForm(NetBoxModelForm): 'value': 'Value', 'apply_to': 'Apply to', } + +class HttpHeaderFilterForm(NetBoxModelFilterSetForm): + model = HttpHeader + name = forms.CharField(max_length=120, min_length=1, required=False, label='Header name') + value = forms.CharField(max_length=256, min_length=1, required=False, label='Header value') + apply_to = forms.ChoiceField(choices=add_blank_choice(ApplyToChoices), required=False, label='Apply to') + mapping = DynamicModelMultipleChoiceField( + queryset=Mapping.objects.all(), + required=False, + label=_('Mapping') + ) + tag = TagFilterField(model) diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/search.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/search.py index 72bd59e5a508d477047aeb9565ab182bcc2daed0..0f35de95557abb23dab8c285b38ef64f10e1fa9e 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/search.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/search.py @@ -1,6 +1,5 @@ from netbox.search import SearchIndex, register_search -from .models import Mapping - +from .models import Mapping, HttpHeader @register_search @@ -13,3 +12,11 @@ class MappingIndex(SearchIndex): ('Comment', 500), ) +@register_search +class HttpHeaderIndex(SearchIndex): + model = HttpHeader + fields = ( + ('name', 120), + ('value', 256), + ('apply_to', 8) + ) diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/tables.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/tables.py index 8dcc4ee815f2da48130160505c674b5389427d19..f7ff0b933d2bdd7c9cf3ab5670b3fd98fc78a011 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/tables.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/tables.py @@ -12,14 +12,15 @@ class MappingTable(NetBoxTable): url_params={'mapping_id': 'pk'}, verbose_name='HTTP Headers count' ) + tags = columns.TagColumn() class Meta(NetBoxTable.Meta): model = Mapping fields = ( - 'pk', 'id', 'source', 'target', 'authentication', 'testingpage', 'webdav', 'Comment', 'httpheader_count' + 'pk', 'id', 'source', 'target', 'authentication', 'testingpage', 'webdav', 'Comment', 'httpheader_count', 'tags', 'created', 'last_updated', ) default_columns = ( - 'source', 'target', 'authentication', 'Comment', 'httpheader_count' + 'source', 'target', 'authentication', 'webdav', 'httpheader_count' ) class HttpHeaderTable(NetBoxTable): @@ -30,8 +31,8 @@ class HttpHeaderTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = HttpHeader fields = ( - 'pk', 'id', 'name', 'value', 'apply_to', 'mapping' + 'pk', 'id', 'mapping', 'name', 'value', 'apply_to', 'tags', 'created', 'last_updated', ) default_columns = ( - 'name', 'value', 'apply_to' + 'mapping', 'name', 'value', 'apply_to' ) diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/templates/netbox_rps_plugin/httpheader/child.html b/plugins/netbox-rps-plugin/netbox_rps_plugin/templates/netbox_rps_plugin/httpheader/child.html index 031ee55bfe0ebd9d9793f4b340b25a99f16a3f0e..e88a709c227af815b78f6db85ddcc58a06cf34d9 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/templates/netbox_rps_plugin/httpheader/child.html +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/templates/netbox_rps_plugin/httpheader/child.html @@ -1,7 +1,6 @@ {% extends 'generic/object.html' %} {% load helpers %} {% load render_table from django_tables2 %} -{% load perms %} {% block extra_controls %} <a href="{% url 'plugins:netbox_rps_plugin:httpheader_add' %}?mapping={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary"> diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/views.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/views.py index 063c3eefe95bd9858c3cf1754b1239e77a153fac..1990591fd7d01772ef4bfedbf5e2e0152cf35df6 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/views.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/views.py @@ -66,7 +66,7 @@ class HttpHeaderListView(generic.ObjectListView): queryset = models.HttpHeader.objects.all() table = tables.HttpHeaderTable filterset = filtersets.HttpHeaderFilterSet - filterset_form = forms.HttpHeaderForm + filterset_form = forms.HttpHeaderFilterForm class HttpHeaderEditView(generic.ObjectEditView): diff --git a/plugins/netbox-rps-plugin/setup.py b/plugins/netbox-rps-plugin/setup.py index c45e217bbb6535a35ef2e68beff2ed6cad7bc81f..6656b70cd4a5830cdf1c33cb3200cf823b86b0cd 100644 --- a/plugins/netbox-rps-plugin/setup.py +++ b/plugins/netbox-rps-plugin/setup.py @@ -2,7 +2,7 @@ from setuptools import find_packages, setup setup( name='netbox_rps_plugin', - version='0.8.1', + version='0.8.2', description='A Netbox plugin to add RPS resources', install_requires=[], packages=find_packages(),