Skip to content

Commit 0eed31c

Browse files
authored
Merge pull request #142 from k01ek/develop
fix #93
2 parents 66e1b5c + 99af637 commit 0eed31c

File tree

5 files changed

+54
-26
lines changed

5 files changed

+54
-26
lines changed

netbox_bgp/api/serializers.py

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
from rest_framework.serializers import HyperlinkedIdentityField, ValidationError
22
from rest_framework.relations import PrimaryKeyRelatedField
33

4-
# for netbox 3.3
5-
try:
6-
from netbox.api import ChoiceField, WritableNestedSerializer
7-
except ImportError:
8-
from netbox.api.fields import ChoiceField
9-
from netbox.api.serializers.nested import WritableNestedSerializer
4+
from netbox.api.fields import ChoiceField
5+
from netbox.api.serializers.nested import WritableNestedSerializer
106

117
from netbox.api.serializers import NetBoxModelSerializer
128
from dcim.api.nested_serializers import NestedSiteSerializer, NestedDeviceSerializer
@@ -103,7 +99,6 @@ class BGPSessionSerializer(NetBoxModelSerializer):
10399

104100
class Meta:
105101
model = BGPSession
106-
#fields = '__all__'
107102
fields = [
108103
'id', 'tags', 'custom_fields',
109104
'display', 'status', 'site', 'tenant',
@@ -112,21 +107,7 @@ class Meta:
112107
'export_policies', 'created', 'last_updated',
113108
'name', 'description'
114109
]
115-
validators = []
116110

117-
def validate(self, attrs):
118-
qs = BGPSession.objects.filter(
119-
device=attrs.get('device'),
120-
local_as=attrs.get('local_as'),
121-
local_address=attrs.get('local_address'),
122-
remote_as=attrs.get('remote_as'),
123-
remote_address=attrs.get('remote_address'),
124-
)
125-
if qs.exists():
126-
raise ValidationError(
127-
{'error': 'BGP Session with this Device, Local address, Local AS, Remote address and Remote AS already exists.'}
128-
)
129-
return attrs
130111

131112
def to_representation(self, instance):
132113
ret = super().to_representation(instance)
@@ -159,14 +140,12 @@ class CommunitySerializer(NetBoxModelSerializer):
159140

160141
class Meta:
161142
model = Community
162-
# fields = ['id', 'value', 'status', 'description', 'tenant', 'tags']
163143
fields = [
164144
'id', 'tags', 'custom_fields', 'display',
165145
'status', 'tenant', 'created', 'last_updated',
166146
'description',
167147
'value', 'site', 'role'
168148
]
169-
# fields = '__all__'
170149

171150

172151
class RoutingPolicyRuleSerializer(NetBoxModelSerializer):
@@ -194,7 +173,6 @@ class PrefixListRuleSerializer(NetBoxModelSerializer):
194173

195174
class Meta:
196175
model = PrefixListRule
197-
fields = '__all__'
198176
fields = [
199177
'id', 'tags', 'custom_fields', 'display',
200178
'prefix_list', 'created', 'last_updated',
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.1.9 on 2023-05-16 06:38
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('netbox_bgp', '0027_netbox_bgp'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='bgpsession',
16+
name='device',
17+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='dcim.device'),
18+
),
19+
]

netbox_bgp/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ class BGPSession(NetBoxModel):
142142
to='dcim.Device',
143143
on_delete=models.PROTECT,
144144
null=True,
145+
blank=True,
145146
)
146147
local_address = models.ForeignKey(
147148
to='ipam.IPAddress',

netbox_bgp/tests/test_api.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,16 @@ def test_create_session(self):
211211
self.assertEqual(BGPSession.objects.get(pk=response.data['id']).name, 'test_session')
212212
self.assertEqual(BGPSession.objects.get(pk=response.data['id']).description, 'session_descr')
213213

214-
def test_session_no_device(self):
214+
def test_update_session(self):
215+
url = reverse(f'{self.base_url_lookup}-detail', kwargs={'pk': self.session.pk})
216+
data = {'description': 'new_description2'}
217+
218+
response = self.client.patch(url, data, format='json')
219+
self.assertIn(response.status_code, [status.HTTP_200_OK, status.HTTP_204_NO_CONTENT])
220+
self.assertEqual(BGPSession.objects.get(pk=response.data['id']).description, 'new_description2')
221+
222+
223+
def test_duplicate_session(self):
215224
url = reverse(f'{self.base_url_lookup}-list')
216225
data = {
217226
'name': 'test_session',
@@ -221,8 +230,29 @@ def test_session_no_device(self):
221230
'local_address': self.local_ip.pk,
222231
'remote_address': self.remote_ip.pk,
223232
'status': 'active',
233+
'device': self.device.pk,
224234
'peer_group': self.peer_group.pk
225235

236+
}
237+
response = self.client.post(url, data, format='json')
238+
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
239+
240+
response = self.client.post(url, data, format='json')
241+
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
242+
243+
def test_session_no_device(self):
244+
url = reverse(f'{self.base_url_lookup}-list')
245+
data = {
246+
'name': 'test_session',
247+
'description': 'session_descr',
248+
'local_as': self.local_as.pk,
249+
'remote_as': self.remote_as.pk,
250+
'local_address': self.local_ip.pk,
251+
'remote_address': self.remote_ip.pk,
252+
'status': 'active',
253+
'peer_group': self.peer_group.pk,
254+
'device': None
255+
226256
}
227257
response = self.client.post(url, data, format='json')
228258
self.assertEqual(response.status_code, status.HTTP_201_CREATED)

netbox_bgp/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.10.1"
1+
__version__ = "0.10.2"

0 commit comments

Comments
 (0)