mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Move CircuitTermination.term_side choices to a ChoiceSet
This commit is contained in:
parent
afd82fd9d3
commit
4e2863e4ec
@ -1,6 +1,10 @@
|
|||||||
from utilities.choices import ChoiceSet
|
from utilities.choices import ChoiceSet
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Circuits
|
||||||
|
#
|
||||||
|
|
||||||
class CircuitStatusChoices(ChoiceSet):
|
class CircuitStatusChoices(ChoiceSet):
|
||||||
|
|
||||||
STATUS_DEPROVISIONING = 'deprovisioning'
|
STATUS_DEPROVISIONING = 'deprovisioning'
|
||||||
@ -27,3 +31,18 @@ class CircuitStatusChoices(ChoiceSet):
|
|||||||
STATUS_OFFLINE: 4,
|
STATUS_OFFLINE: 4,
|
||||||
STATUS_DECOMMISSIONED: 5,
|
STATUS_DECOMMISSIONED: 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# CircuitTerminations
|
||||||
|
#
|
||||||
|
|
||||||
|
class CircuitTerminationSideChoices(ChoiceSet):
|
||||||
|
|
||||||
|
SIDE_A = 'A'
|
||||||
|
SIDE_Z = 'Z'
|
||||||
|
|
||||||
|
CHOICES = (
|
||||||
|
(SIDE_A, 'A'),
|
||||||
|
(SIDE_Z, 'Z')
|
||||||
|
)
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
# CircuitTermination sides
|
|
||||||
TERM_SIDE_A = 'A'
|
|
||||||
TERM_SIDE_Z = 'Z'
|
|
||||||
TERM_SIDE_CHOICES = (
|
|
||||||
(TERM_SIDE_A, 'A'),
|
|
||||||
(TERM_SIDE_Z, 'Z'),
|
|
||||||
)
|
|
@ -6,7 +6,6 @@ from extras.filters import CustomFieldFilterSet
|
|||||||
from tenancy.filtersets import TenancyFilterSet
|
from tenancy.filtersets import TenancyFilterSet
|
||||||
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
|
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
|
||||||
from .choices import *
|
from .choices import *
|
||||||
from .constants import *
|
|
||||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ from utilities.forms import (
|
|||||||
FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple
|
FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple
|
||||||
)
|
)
|
||||||
from .choices import CircuitStatusChoices
|
from .choices import CircuitStatusChoices
|
||||||
from .constants import *
|
|
||||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,14 +3,13 @@ from django.db import models
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from taggit.managers import TaggableManager
|
from taggit.managers import TaggableManager
|
||||||
|
|
||||||
from dcim.constants import CONNECTION_STATUS_CHOICES, STATUS_CLASSES
|
from dcim.constants import CONNECTION_STATUS_CHOICES
|
||||||
from dcim.fields import ASNField
|
from dcim.fields import ASNField
|
||||||
from dcim.models import CableTermination
|
from dcim.models import CableTermination
|
||||||
from extras.models import CustomFieldModel, ObjectChange, TaggedItem
|
from extras.models import CustomFieldModel, ObjectChange, TaggedItem
|
||||||
from utilities.models import ChangeLoggedModel
|
from utilities.models import ChangeLoggedModel
|
||||||
from utilities.utils import serialize_object
|
from utilities.utils import serialize_object
|
||||||
from .choices import *
|
from .choices import *
|
||||||
from .constants import *
|
|
||||||
|
|
||||||
|
|
||||||
class Provider(ChangeLoggedModel, CustomFieldModel):
|
class Provider(ChangeLoggedModel, CustomFieldModel):
|
||||||
@ -231,7 +230,7 @@ class CircuitTermination(CableTermination):
|
|||||||
)
|
)
|
||||||
term_side = models.CharField(
|
term_side = models.CharField(
|
||||||
max_length=1,
|
max_length=1,
|
||||||
choices=TERM_SIDE_CHOICES,
|
choices=CircuitTerminationSideChoices,
|
||||||
verbose_name='Termination'
|
verbose_name='Termination'
|
||||||
)
|
)
|
||||||
site = models.ForeignKey(
|
site = models.ForeignKey(
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
|
||||||
from circuits.choices import CircuitStatusChoices
|
from circuits.choices import *
|
||||||
from circuits.constants import TERM_SIDE_A, TERM_SIDE_Z
|
|
||||||
from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
|
from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
from dcim.models import Site
|
from dcim.models import Site
|
||||||
from extras.constants import GRAPH_TYPE_PROVIDER
|
from extras.constants import GRAPH_TYPE_PROVIDER
|
||||||
@ -337,16 +336,28 @@ class CircuitTerminationTest(APITestCase):
|
|||||||
self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=provider, type=circuittype)
|
self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=provider, type=circuittype)
|
||||||
self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=provider, type=circuittype)
|
self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=provider, type=circuittype)
|
||||||
self.circuittermination1 = CircuitTermination.objects.create(
|
self.circuittermination1 = CircuitTermination.objects.create(
|
||||||
circuit=self.circuit1, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
|
circuit=self.circuit1,
|
||||||
|
term_side=CircuitTerminationSideChoices.SIDE_A,
|
||||||
|
site=self.site1,
|
||||||
|
port_speed=1000000
|
||||||
)
|
)
|
||||||
self.circuittermination2 = CircuitTermination.objects.create(
|
self.circuittermination2 = CircuitTermination.objects.create(
|
||||||
circuit=self.circuit1, term_side=TERM_SIDE_Z, site=self.site2, port_speed=1000000
|
circuit=self.circuit1,
|
||||||
|
term_side=CircuitTerminationSideChoices.SIDE_Z,
|
||||||
|
site=self.site2,
|
||||||
|
port_speed=1000000
|
||||||
)
|
)
|
||||||
self.circuittermination3 = CircuitTermination.objects.create(
|
self.circuittermination3 = CircuitTermination.objects.create(
|
||||||
circuit=self.circuit2, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
|
circuit=self.circuit2,
|
||||||
|
term_side=CircuitTerminationSideChoices.SIDE_A,
|
||||||
|
site=self.site1,
|
||||||
|
port_speed=1000000
|
||||||
)
|
)
|
||||||
self.circuittermination4 = CircuitTermination.objects.create(
|
self.circuittermination4 = CircuitTermination.objects.create(
|
||||||
circuit=self.circuit2, term_side=TERM_SIDE_Z, site=self.site2, port_speed=1000000
|
circuit=self.circuit2,
|
||||||
|
term_side=CircuitTerminationSideChoices.SIDE_Z,
|
||||||
|
site=self.site2,
|
||||||
|
port_speed=1000000
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_get_circuittermination(self):
|
def test_get_circuittermination(self):
|
||||||
@ -367,7 +378,7 @@ class CircuitTerminationTest(APITestCase):
|
|||||||
|
|
||||||
data = {
|
data = {
|
||||||
'circuit': self.circuit3.pk,
|
'circuit': self.circuit3.pk,
|
||||||
'term_side': TERM_SIDE_A,
|
'term_side': CircuitTerminationSideChoices.SIDE_A,
|
||||||
'site': self.site1.pk,
|
'site': self.site1.pk,
|
||||||
'port_speed': 1000000,
|
'port_speed': 1000000,
|
||||||
}
|
}
|
||||||
@ -386,12 +397,15 @@ class CircuitTerminationTest(APITestCase):
|
|||||||
def test_update_circuittermination(self):
|
def test_update_circuittermination(self):
|
||||||
|
|
||||||
circuittermination5 = CircuitTermination.objects.create(
|
circuittermination5 = CircuitTermination.objects.create(
|
||||||
circuit=self.circuit3, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
|
circuit=self.circuit3,
|
||||||
|
term_side=CircuitTerminationSideChoices.SIDE_A,
|
||||||
|
site=self.site1,
|
||||||
|
port_speed=1000000
|
||||||
)
|
)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'circuit': self.circuit3.pk,
|
'circuit': self.circuit3.pk,
|
||||||
'term_side': TERM_SIDE_Z,
|
'term_side': CircuitTerminationSideChoices.SIDE_Z,
|
||||||
'site': self.site2.pk,
|
'site': self.site2.pk,
|
||||||
'port_speed': 1000000,
|
'port_speed': 1000000,
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ from utilities.views import (
|
|||||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||||
)
|
)
|
||||||
from . import filters, forms, tables
|
from . import filters, forms, tables
|
||||||
from .constants import TERM_SIDE_A, TERM_SIDE_Z
|
from .choices import CircuitTerminationSideChoices
|
||||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
|
|
||||||
|
|
||||||
@ -151,12 +151,12 @@ class CircuitView(PermissionRequiredMixin, View):
|
|||||||
termination_a = CircuitTermination.objects.prefetch_related(
|
termination_a = CircuitTermination.objects.prefetch_related(
|
||||||
'site__region', 'connected_endpoint__device'
|
'site__region', 'connected_endpoint__device'
|
||||||
).filter(
|
).filter(
|
||||||
circuit=circuit, term_side=TERM_SIDE_A
|
circuit=circuit, term_side=CircuitTerminationSideChoices.SIDE_A
|
||||||
).first()
|
).first()
|
||||||
termination_z = CircuitTermination.objects.prefetch_related(
|
termination_z = CircuitTermination.objects.prefetch_related(
|
||||||
'site__region', 'connected_endpoint__device'
|
'site__region', 'connected_endpoint__device'
|
||||||
).filter(
|
).filter(
|
||||||
circuit=circuit, term_side=TERM_SIDE_Z
|
circuit=circuit, term_side=CircuitTerminationSideChoices.SIDE_Z
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
return render(request, 'circuits/circuit.html', {
|
return render(request, 'circuits/circuit.html', {
|
||||||
@ -212,8 +212,12 @@ class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
def circuit_terminations_swap(request, pk):
|
def circuit_terminations_swap(request, pk):
|
||||||
|
|
||||||
circuit = get_object_or_404(Circuit, pk=pk)
|
circuit = get_object_or_404(Circuit, pk=pk)
|
||||||
termination_a = CircuitTermination.objects.filter(circuit=circuit, term_side=TERM_SIDE_A).first()
|
termination_a = CircuitTermination.objects.filter(
|
||||||
termination_z = CircuitTermination.objects.filter(circuit=circuit, term_side=TERM_SIDE_Z).first()
|
circuit=circuit, term_side=CircuitTerminationSideChoices.SIDE_A
|
||||||
|
).first()
|
||||||
|
termination_z = CircuitTermination.objects.filter(
|
||||||
|
circuit=circuit, term_side=CircuitTerminationSideChoices.SIDE_Z
|
||||||
|
).first()
|
||||||
if not termination_a and not termination_z:
|
if not termination_a and not termination_z:
|
||||||
messages.error(request, "No terminations have been defined for circuit {}.".format(circuit))
|
messages.error(request, "No terminations have been defined for circuit {}.".format(circuit))
|
||||||
return redirect('circuits:circuit', pk=circuit.pk)
|
return redirect('circuits:circuit', pk=circuit.pk)
|
||||||
|
Loading…
Reference in New Issue
Block a user