mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 08:38:16 -06:00
7025 CircuitRedundancyGroups api
This commit is contained in:
parent
a4f84d6206
commit
6260af3623
@ -1,7 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from circuits.choices import CircuitStatusChoices
|
||||
from circuits.models import Circuit, CircuitTermination, CircuitType
|
||||
from circuits.models import Circuit, CircuitRedundancyGroup, CircuitTermination, CircuitType
|
||||
from dcim.api.serializers_.cables import CabledObjectSerializer
|
||||
from dcim.api.serializers_.sites import SiteSerializer
|
||||
from netbox.api.fields import ChoiceField, RelatedObjectCountField
|
||||
@ -12,6 +12,7 @@ from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, Pro
|
||||
|
||||
__all__ = (
|
||||
'CircuitSerializer',
|
||||
'CircuitRedundancyGroupSerializer',
|
||||
'CircuitTerminationSerializer',
|
||||
'CircuitTypeSerializer',
|
||||
)
|
||||
@ -75,3 +76,14 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer
|
||||
'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied',
|
||||
]
|
||||
brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
|
||||
|
||||
|
||||
class CircuitRedundancyGroupSerializer(NetBoxModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = CircuitRedundancyGroup
|
||||
fields = [
|
||||
'id', 'url', 'display_url', 'display', 'name',
|
||||
'tags', 'custom_fields', 'created', 'last_updated',
|
||||
]
|
||||
brief_fields = ('id', 'url', 'display', 'name',)
|
||||
|
@ -14,6 +14,7 @@ router.register('provider-networks', views.ProviderNetworkViewSet)
|
||||
router.register('circuit-types', views.CircuitTypeViewSet)
|
||||
router.register('circuits', views.CircuitViewSet)
|
||||
router.register('circuit-terminations', views.CircuitTerminationViewSet)
|
||||
router.register('circuit-redundancy-groups', views.CircuitRedundancyGroupViewSet)
|
||||
|
||||
app_name = 'circuits-api'
|
||||
urlpatterns = router.urls
|
||||
|
@ -55,6 +55,16 @@ class CircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet):
|
||||
filterset_class = filtersets.CircuitTerminationFilterSet
|
||||
|
||||
|
||||
#
|
||||
# Circuits
|
||||
#
|
||||
|
||||
class CircuitRedundancyGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
serializer_class = serializers.CircuitRedundancyGroupSerializer
|
||||
filterset_class = filtersets.CircuitRedundancyGroupFilterSet
|
||||
|
||||
|
||||
#
|
||||
# Provider accounts
|
||||
#
|
||||
|
@ -7,6 +7,7 @@ from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
|
||||
__all__ = (
|
||||
'CircuitTerminationFilter',
|
||||
'CircuitFilter',
|
||||
'CircuitRedundancyGroupFilter',
|
||||
'CircuitTypeFilter',
|
||||
'ProviderFilter',
|
||||
'ProviderAccountFilter',
|
||||
@ -32,6 +33,12 @@ class CircuitTypeFilter(BaseFilterMixin):
|
||||
pass
|
||||
|
||||
|
||||
@strawberry_django.filter(models.CircuitRedundancyGroup, lookups=True)
|
||||
@autotype_decorator(filtersets.CircuitRedundancyGroupFilterSet)
|
||||
class CircuitRedundancyGroupFilter(BaseFilterMixin):
|
||||
pass
|
||||
|
||||
|
||||
@strawberry_django.filter(models.Provider, lookups=True)
|
||||
@autotype_decorator(filtersets.ProviderFilterSet)
|
||||
class ProviderFilter(BaseFilterMixin):
|
||||
|
@ -24,6 +24,11 @@ class CircuitsQuery:
|
||||
return models.CircuitType.objects.get(pk=id)
|
||||
circuit_type_list: List[CircuitTypeType] = strawberry_django.field()
|
||||
|
||||
@strawberry.field
|
||||
def circuit_redundancy_group(self, id: int) -> CircuitRedundancyGroupType:
|
||||
return models.CircuitRedundancyGroup.objects.get(pk=id)
|
||||
circuit_redundancy_group_list: List[CircuitRedundancyGroupType] = strawberry_django.field()
|
||||
|
||||
@strawberry.field
|
||||
def provider(self, id: int) -> ProviderType:
|
||||
return models.Provider.objects.get(pk=id)
|
||||
|
@ -13,6 +13,7 @@ from .filters import *
|
||||
__all__ = (
|
||||
'CircuitTerminationType',
|
||||
'CircuitType',
|
||||
'CircuitRedundancyGroupType',
|
||||
'CircuitTypeType',
|
||||
'ProviderType',
|
||||
'ProviderAccountType',
|
||||
@ -91,3 +92,12 @@ class CircuitType(NetBoxObjectType, ContactsMixin):
|
||||
tenant: TenantType | None
|
||||
|
||||
terminations: List[CircuitTerminationType]
|
||||
|
||||
|
||||
@strawberry_django.type(
|
||||
models.CircuitRedundancyGroup,
|
||||
fields='__all__',
|
||||
filters=CircuitRedundancyGroupFilter
|
||||
)
|
||||
class CircuitRedundancyGroupType(CustomFieldsMixin, TagsMixin, ObjectType):
|
||||
pass
|
||||
|
@ -0,0 +1,53 @@
|
||||
# Generated by Django 5.0.7 on 2024-07-16 09:18
|
||||
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
import utilities.json
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('circuits', '0043_circuittype_color'),
|
||||
('extras', '0118_notifications'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CircuitGroupAssignment',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('priority', models.CharField(blank=True, max_length=50)),
|
||||
('circuit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CircuitRedundancyGroup',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||
(
|
||||
'custom_field_data',
|
||||
models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
|
||||
),
|
||||
('description', models.CharField(blank=True, max_length=200)),
|
||||
('comments', models.TextField(blank=True)),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('slug', models.SlugField(max_length=100)),
|
||||
('circuits', models.ManyToManyField(through='circuits.CircuitGroupAssignment', to='circuits.circuit')),
|
||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Circuit redundancy group',
|
||||
'verbose_name_plural': 'Circuit redundancy group',
|
||||
'ordering': ('name', 'pk'),
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='circuitgroupassignment',
|
||||
name='group',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuitredundancygroup'),
|
||||
),
|
||||
]
|
Loading…
Reference in New Issue
Block a user