Skip to content

Commit

Permalink
Merge pull request #8 from jasonyates/022
Browse files Browse the repository at this point in the history
v0.2.2
  • Loading branch information
jasonyates authored Jan 18, 2023
2 parents 9ddb2da + d8d0d25 commit 1e60faf
Show file tree
Hide file tree
Showing 12 changed files with 114 additions and 23 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.2.2 (2023-01-18)

* Fix API Filtersets
* Viewing notification content opens a new tab
* Updating RESCHEDULED to RE-SCHEDULED to match circuitparser

## 0.2.1 (2023-01-17)

* Updating to DynamicModelChoiceField
* Hiding maintenance schedule for now

## 0.1.0 (2023-01-15)

* First release on PyPI.


2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Provides the ability to record circuit maintenance, maintenance impact and maint

| NetBox Version | Plugin Version |
|----------------|----------------|
| 3.4 | 0.2.1 |
| 3.4 | 0.2.2 |

## Installing

Expand Down
2 changes: 1 addition & 1 deletion netbox_circuitmaintenance/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

__author__ = """Jason Yates"""
__email__ = 'me@jasonyates.co.uk'
__version__ = '0.2.1'
__version__ = '0.2.2'


from extras.plugins import PluginConfig
Expand Down
4 changes: 2 additions & 2 deletions netbox_circuitmaintenance/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ class CircuitMaintenanceSerializer(NetBoxModelSerializer):
)

provider = NestedProviderSerializer()
impact = NestedCircuitMaintenanceImpactSerializer(many=True)
notification = NestedCircuitMaintenanceNotificationsSerializer(many=True)
impact = NestedCircuitMaintenanceImpactSerializer(required=False, many=True)
notification = NestedCircuitMaintenanceNotificationsSerializer(required=False, many=True)

class Meta:
model = CircuitMaintenance
Expand Down
7 changes: 5 additions & 2 deletions netbox_circuitmaintenance/api/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
from netbox.api.viewsets import NetBoxModelViewSet

from .. import models
from .. import models, filtersets
from .serializers import CircuitMaintenanceSerializer, CircuitMaintenanceImpactSerializer, CircuitMaintenanceNotificationsSerializer

class CircuitMaintenanceViewSet(NetBoxModelViewSet):
queryset = models.CircuitMaintenance.objects.prefetch_related('tags')
serializer_class = CircuitMaintenanceSerializer
filterset_class = filtersets.CircuitMaintenanceFilterSet

class CircuitMaintenanceImpactViewSet(NetBoxModelViewSet):
queryset = models.CircuitMaintenanceImpact.objects.prefetch_related('tags')
serializer_class = CircuitMaintenanceImpactSerializer
filterset_class = filtersets.CircuitMaintenanceImpactFilterSet

class CircuitMaintenanceNotificationsViewSet(NetBoxModelViewSet):
queryset = models.CircuitMaintenanceNotifications.objects.prefetch_related('tags')
serializer_class = CircuitMaintenanceNotificationsSerializer
serializer_class = CircuitMaintenanceNotificationsSerializer
filterset_class = filtersets.CircuitMaintenanceNotificationsFilterSet
48 changes: 39 additions & 9 deletions netbox_circuitmaintenance/filtersets.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,42 @@
from netbox.filtersets import NetBoxModelFilterSet
from .models import CircuitMaintenance
from .models import CircuitMaintenance, CircuitMaintenanceImpact, CircuitMaintenanceNotifications
from django.db.models import Q

class CircuitMaintenanceFilterSet(NetBoxModelFilterSet):

# class circuitmaintenanceFilterSet(NetBoxModelFilterSet):
#
# class Meta:
# model = circuitmaintenance
# fields = ['name', ]
#
# def search(self, queryset, name, value):
# return queryset.filter(description__icontains=value)
class Meta:
model = CircuitMaintenance
fields = ('id', 'name', 'summary', 'status', 'provider', 'start', 'end', 'impact', 'internal_ticket', 'acknowledged', 'comments')

def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value)
)

class CircuitMaintenanceImpactFilterSet(NetBoxModelFilterSet):

class Meta:
model = CircuitMaintenanceImpact
fields = ('id', 'circuitmaintenance', 'circuit', 'impact')

def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(circuit__icontains=value)
)

class CircuitMaintenanceNotificationsFilterSet(NetBoxModelFilterSet):

class Meta:
model = CircuitMaintenanceNotifications
fields = ('id', 'email_body', 'subject', 'email_from', 'email_recieved')

def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(subject__icontains=value)
)
47 changes: 45 additions & 2 deletions netbox_circuitmaintenance/forms.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from django import forms
from netbox.forms import NetBoxModelForm
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm
from utilities.forms import DateTimePicker, DynamicModelChoiceField
from circuits.models import Provider, Circuit
from .models import CircuitMaintenance, CircuitMaintenanceImpact, CircuitMaintenanceNotifications
from .models import CircuitMaintenance, CircuitMaintenanceImpact, CircuitMaintenanceNotifications, CircuitMaintenanceTypeChoices, CircuitMaintenanceImpactTypeChoices

class CircuitMaintenanceForm(NetBoxModelForm):

Expand All @@ -18,6 +18,49 @@ class Meta:
'end': DateTimePicker()
}

class CircuitMaintenanceFilterForm(NetBoxModelFilterSetForm):
model = CircuitMaintenance

name = forms.CharField(
required=False
)

summary = forms.CharField(
required=False
)

provider = forms.ModelMultipleChoiceField(
queryset=Provider.objects.all(),
required=False
)

status = forms.MultipleChoiceField(
choices=CircuitMaintenanceTypeChoices,
required=False
)

start = forms.CharField(
required=False
)

end = forms.CharField(
required=False
)

acknowledged = forms.BooleanField(
required=False
)

internal_ticket = forms.CharField(
required=False
)

impact = forms.ModelMultipleChoiceField(
queryset=CircuitMaintenanceImpact.objects.all(),
required=False
)


class CircuitMaintenanceImpactForm(NetBoxModelForm):

circuit = DynamicModelChoiceField(
Expand Down
2 changes: 1 addition & 1 deletion netbox_circuitmaintenance/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class CircuitMaintenanceTypeChoices(ChoiceSet):
('CANCELLED', 'Cancelled', 'gray'),
('IN-PROCESS', 'In-Process', 'orange'),
('COMPLETED', 'Completed', 'indigo'),
('RESCHEDULED', 'Rescheduled', 'green'),
('RE-SCHEDULED', 'Rescheduled', 'green'),
('UNKNOWN', 'Unknown', 'gray'),
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ <h5 class="card-header">Recieved Maintenance Notifications</h5>
<td>{{email.email_from}}</td>
<td>{{email.email_recieved}}</td>
<td class="text-end noprint">
<a href="{% url 'plugins:netbox_circuitmaintenance:circuitnotification' pk=email.pk %}" class="btn btn-primary btn-sm lh-1" title="View Notification">
<a href="{% url 'plugins:netbox_circuitmaintenance:circuitnotification' pk=email.pk %}" class="btn btn-primary btn-sm lh-1" title="View Notification" target="_blank">
<i class="mdi mdi-book" aria-hidden="true"></i>
</a>
<a href="{% url 'plugins:netbox_circuitmaintenance:circuitnotification_delete' pk=email.pk %}?return_url={% url 'plugins:netbox_circuitmaintenance:circuitmaintenance' pk=object.pk %}" class="btn btn-danger btn-sm lh-1" title="Delete Notification">
Expand Down
4 changes: 3 additions & 1 deletion netbox_circuitmaintenance/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from netbox.views import generic
from django.db.models import Count
from . import forms, models, tables
from . import forms, models, tables, filtersets

# Circuit Maintenance Views
class CircuitMaintenanceView(generic.ObjectView):
Expand All @@ -24,6 +24,8 @@ class CircuitMaintenanceListView(generic.ObjectListView):
impact_count=Count('impact')
)
table = tables.CircuitMaintenanceTable
filterset = filtersets.CircuitMaintenanceFilterSet
filterset_form = forms.CircuitMaintenanceFilterForm

class CircuitMaintenanceEditView(generic.ObjectEditView):
queryset = models.CircuitMaintenance.objects.all()
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "netbox-circuitmaintenance"
version = "0.2.1"
version = "0.2.2"
description = "Provides the ability to record circuit maintenance, maintenance impact and maintenance notifications in Netbox and link them to Providers and Circuits."
readme = "README.md"
authors = [{ name = "Jason Yates", email = "me@jasonyates.co.uk" }]
Expand All @@ -19,7 +19,7 @@ Homepage = "https://github.com/jasonyates/netbox-circuitmaintenance"
dev = ["black", "bumpver", "isort", "pip-tools", "pytest"]

[tool.bumpver]
current_version = "0.2.1"
current_version = "0.2.2"
version_pattern = "MAJOR.MINOR.PATCH"
commit_message = "bump version {old_version} -> {new_version}"
commit = true
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@
packages=find_packages(include=['netbox_circuitmaintenance', 'netbox_circuitmaintenance.*']),
test_suite='tests',
url='https://github.com/jasonyates/netbox-circuitmaintenance',
version='0.2.1',
version='0.2.2',
zip_safe=False,
)

0 comments on commit 1e60faf

Please sign in to comment.