Skip to content

Commit 4503995

Browse files
authored
Merge pull request #60 from netbox-community/0.5.0
Reinstate image upload
2 parents bcc6d16 + 8f73ec2 commit 4503995

31 files changed

+624
-31237
lines changed

.flake8

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[flake8]
2+
max-line-length = 140
3+
ignore = E126, E722

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Enable Migrations:
4242
cd /opt/netbox
4343
sudo ./venv/bin/python3 netbox/manage.py makemigrations netbox_floorplan_plugin
4444
sudo ./venv/bin/python3 netbox/manage.py migrate
45+
sudo ./venv/bin/python3 netbox/manage.py collectstatic
4546
```
4647

4748
Restart NetBox and add `netbox-floorplan-plugin` to your local_requirements.txt

netbox_floorplan/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
from netbox.plugins import PluginConfig
2+
from .version import __version__
23

34

45
class FloorplanConfig(PluginConfig):
56

67
name = "netbox_floorplan"
78
verbose_name = "Netbox Floorplan"
89
description = ""
9-
version = "0.4.1"
10+
version = __version__
1011
base_url = "floorplan"
11-
min_version = "4.0.2"
12-
max_version = "4.0.11"
12+
min_version = "4.1.0"
13+
max_version = "4.1.99"
1314

1415

1516
config = FloorplanConfig

netbox_floorplan/admin.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.contrib import admin
2+
from .models import Floorplan
3+
4+
5+
@admin.register(Floorplan)
6+
class FloorplanAdmin(admin.ModelAdmin):
7+
list_display = (
8+
"pk",
9+
)
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
from rest_framework import serializers
22
from netbox.api.serializers import NetBoxModelSerializer
3-
from ..models import Floorplan
3+
from ..models import Floorplan, FloorplanImage
4+
5+
6+
class FloorplanImageSerializer(NetBoxModelSerializer):
7+
url = serializers.HyperlinkedIdentityField(
8+
view_name='plugins-api:netbox_floorplan-api:floorplanimage-detail')
9+
10+
class Meta:
11+
model = FloorplanImage
12+
fields = ['id', 'url', 'name', 'file', 'external_url', 'filename', 'comments', 'tags', 'custom_fields', 'created', 'last_updated']
13+
brief_fields = ['id', 'url', 'name', 'file', 'filename', 'external_url']
414

515

616
class FloorplanSerializer(NetBoxModelSerializer):
717
url = serializers.HyperlinkedIdentityField(
818
view_name='plugins-api:netbox_floorplan-api:floorplan-detail')
19+
assigned_image = FloorplanImageSerializer(nested=True, required=False, allow_null=True)
920

1021
class Meta:
1122
model = Floorplan
12-
fields = ['id', 'url', 'site', 'location', 'background_image',
23+
fields = ['id', 'url', 'site', 'location', 'assigned_image',
1324
'width', 'height', 'tags', 'custom_fields', 'created',
1425
'last_updated', 'canvas', 'measurement_unit']

netbox_floorplan/api/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55

66
router = NetBoxRouter()
77
router.register('floorplans', views.FloorplanViewSet)
8-
8+
router.register('floorplanimages', views.FloorplanImageViewSet)
99
urlpatterns = router.urls

netbox_floorplan/api/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
from netbox.api.viewsets import NetBoxModelViewSet
22

33
from .. import filtersets, models
4-
from .serializers import FloorplanSerializer
4+
from .serializers import FloorplanSerializer, FloorplanImageSerializer
55

66

77
class FloorplanViewSet(NetBoxModelViewSet):
88
queryset = models.Floorplan.objects.all()
99
serializer_class = FloorplanSerializer
1010
filterset_class = filtersets.FloorplanFilterSet
11+
12+
13+
class FloorplanImageViewSet(NetBoxModelViewSet):
14+
queryset = models.FloorplanImage.objects.prefetch_related('tags')
15+
serializer_class = FloorplanImageSerializer

netbox_floorplan/forms.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
from netbox.forms import NetBoxModelForm
2-
from .models import Floorplan
2+
from .models import Floorplan, FloorplanImage
33
from dcim.models import Rack, Device
4+
from utilities.forms.rendering import FieldSet
5+
from utilities.forms.fields import CommentField
6+
7+
8+
class FloorplanImageForm(NetBoxModelForm):
9+
10+
comments = CommentField()
11+
12+
fieldsets = (
13+
FieldSet(('name', 'file', 'external_url', 'comments'), name='General'),
14+
FieldSet(('comments', 'tags'), name='')
15+
)
16+
17+
class Meta:
18+
model = FloorplanImage
19+
fields = [
20+
'name',
21+
'file',
22+
'external_url'
23+
]
424

525

626
class FloorplanForm(NetBoxModelForm):
727
class Meta:
828
model = Floorplan
9-
fields = ['site', 'location', 'background_image', 'width', 'height']
29+
fields = ['site', 'location', 'assigned_image', 'width', 'height']
1030

1131

1232
class FloorplanRackFilterForm(NetBoxModelForm):
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Generated by Django 5.0.7 on 2024-07-19 23:49
2+
3+
import taggit.managers
4+
import utilities.json
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('extras', '0115_convert_dashboard_widgets'),
12+
('netbox_floorplan', '0007_alter_floorplan_options_and_more'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='FloorplanImage',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
20+
('created', models.DateTimeField(auto_now_add=True, null=True)),
21+
('last_updated', models.DateTimeField(auto_now=True, null=True)),
22+
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
23+
('name', models.CharField(max_length=128)),
24+
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
25+
],
26+
options={
27+
'ordering': ('name',),
28+
},
29+
),
30+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.0.7 on 2024-07-20 19:02
2+
3+
import netbox_floorplan.utils
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('netbox_floorplan', '0008_floorplanimage'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='floorplanimage',
16+
name='file',
17+
field=models.FileField(blank=True, upload_to=netbox_floorplan.utils.file_upload),
18+
),
19+
]

0 commit comments

Comments
 (0)