Skip to content

Commit 9a8d99d

Browse files
Eric Hesterwkoot
Eric Hester
authored andcommitted
Implement bulk imports and edits for SLM models
Closes #4 Based on @erichester76's #44 Signed-off-by: wkoot <[email protected]>
1 parent 3539539 commit 9a8d99d

12 files changed

+145
-10
lines changed

netbox_slm/forms/__init__.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
from .software_license import SoftwareLicenseForm, SoftwareLicenseFilterForm
2-
from .software_product import SoftwareProductForm, SoftwareProductFilterForm
3-
from .software_product_installation import SoftwareProductInstallationForm, SoftwareProductInstallationFilterForm
4-
from .software_product_version import SoftwareProductVersionForm, SoftwareProductVersionFilterForm
1+
from .software_license import SoftwareLicenseForm, SoftwareLicenseFilterForm, SoftwareLicenseBulkImportForm
2+
from .software_product import SoftwareProductForm, SoftwareProductFilterForm, SoftwareProductBulkImportForm
3+
from .software_product_installation import (
4+
SoftwareProductInstallationForm,
5+
SoftwareProductInstallationFilterForm,
6+
SoftwareProductInstallationBulkImportForm,
7+
)
8+
from .software_product_version import (
9+
SoftwareProductVersionForm,
10+
SoftwareProductVersionFilterForm,
11+
SoftwareProductVersionBulkImportForm,
12+
)

netbox_slm/forms/software_license.py

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.forms import DateField
22
from django.urls import reverse_lazy
33

4-
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm
4+
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm
55
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion, SoftwareProductInstallation, SoftwareLicense
66
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField, LaxURLField
77
from utilities.forms.rendering import FieldSet
@@ -46,14 +46,14 @@ class Meta:
4646
fields = (
4747
"name",
4848
"description",
49+
"software_product",
4950
"type",
5051
"stored_location",
5152
"stored_location_url",
5253
"start_date",
5354
"expiration_date",
5455
"support",
5556
"license_amount",
56-
"software_product",
5757
"version",
5858
"installation",
5959
"tags",
@@ -65,3 +65,24 @@ class SoftwareLicenseFilterForm(NetBoxModelFilterSetForm):
6565
model = SoftwareLicense
6666
fieldsets = (FieldSet(None, ("q", "tag")),)
6767
tag = TagFilterField(model)
68+
69+
70+
class SoftwareLicenseBulkImportForm(NetBoxModelImportForm):
71+
class Meta:
72+
model = SoftwareLicense
73+
fields = (
74+
"name",
75+
"description",
76+
"software_product",
77+
"type",
78+
"stored_location",
79+
"stored_location_url",
80+
"start_date",
81+
"expiration_date",
82+
"support",
83+
"license_amount",
84+
"version",
85+
"installation",
86+
"tags",
87+
"comments",
88+
)

netbox_slm/forms/software_product.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dcim.models import Manufacturer
2-
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm
2+
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm
33
from netbox_slm.models import SoftwareProduct
44
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
55
from utilities.forms.rendering import FieldSet
@@ -30,3 +30,15 @@ class SoftwareProductFilterForm(NetBoxModelFilterSetForm):
3030
model = SoftwareProduct
3131
fieldsets = (FieldSet(None, ("q", "tag")),)
3232
tag = TagFilterField(model)
33+
34+
35+
class SoftwareProductBulkImportForm(NetBoxModelImportForm):
36+
class Meta:
37+
model = SoftwareProduct
38+
fields = (
39+
"name",
40+
"description",
41+
"manufacturer",
42+
"tags",
43+
"comments",
44+
)

netbox_slm/forms/software_product_installation.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django.urls import reverse_lazy
33

44
from dcim.models import Device
5-
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm
5+
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm
66
from netbox_slm.models import SoftwareProductInstallation, SoftwareProduct, SoftwareProductVersion
77
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
88
from utilities.forms.rendering import FieldSet
@@ -59,3 +59,17 @@ class SoftwareProductInstallationFilterForm(NetBoxModelFilterSetForm):
5959
model = SoftwareProductInstallation
6060
fieldsets = (FieldSet(None, ("q", "tag")),)
6161
tag = TagFilterField(model)
62+
63+
64+
class SoftwareProductInstallationBulkImportForm(NetBoxModelImportForm):
65+
class Meta:
66+
model = SoftwareProductInstallation
67+
fields = (
68+
"device",
69+
"virtualmachine",
70+
"cluster",
71+
"software_product",
72+
"version",
73+
"tags",
74+
"comments",
75+
)

netbox_slm/forms/software_product_version.py

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.forms import DateField
22
from django.urls import reverse_lazy
33

4-
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm
4+
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm
55
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion
66
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
77
from utilities.forms.rendering import FieldSet
@@ -25,14 +25,14 @@ class Meta:
2525
model = SoftwareProductVersion
2626
fields = (
2727
"name",
28+
"software_product",
2829
"release_date",
2930
"documentation_url",
3031
"end_of_support",
3132
"filename",
3233
"file_checksum",
3334
"file_link",
3435
"release_type",
35-
"software_product",
3636
"tags",
3737
"comments",
3838
)
@@ -42,3 +42,21 @@ class SoftwareProductVersionFilterForm(NetBoxModelFilterSetForm):
4242
model = SoftwareProductVersion
4343
fieldsets = (FieldSet(None, ("q", "tag")),)
4444
tag = TagFilterField(model)
45+
46+
47+
class SoftwareProductVersionBulkImportForm(NetBoxModelImportForm):
48+
class Meta:
49+
model = SoftwareProductVersion
50+
fields = (
51+
"name",
52+
"software_product",
53+
"release_date",
54+
"documentation_url",
55+
"end_of_support",
56+
"filename",
57+
"file_checksum",
58+
"file_link",
59+
"release_type",
60+
"tags",
61+
"comments",
62+
)

netbox_slm/navigation.py

+24
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515
"mdi mdi-plus-thick",
1616
permissions=["netbox_slm.add_softwareproduct"],
1717
),
18+
PluginMenuButton(
19+
"plugins:netbox_slm:softwareproduct_import",
20+
"Import",
21+
"mdi mdi-upload",
22+
permissions=["netbox_slm.import_softwareproduct"],
23+
),
1824
),
1925
),
2026
PluginMenuItem(
@@ -28,6 +34,12 @@
2834
"mdi mdi-plus-thick",
2935
permissions=["netbox_slm.add_softwareproductversion"],
3036
),
37+
PluginMenuButton(
38+
"plugins:netbox_slm:softwareproductversion_import",
39+
"Import",
40+
"mdi mdi-upload",
41+
permissions=["netbox_slm.import_softwareproductversion"],
42+
),
3143
),
3244
),
3345
PluginMenuItem(
@@ -41,6 +53,12 @@
4153
"mdi mdi-plus-thick",
4254
permissions=["netbox_slm.add_softwareproductinstallation"],
4355
),
56+
PluginMenuButton(
57+
"plugins:netbox_slm:softwareproductinstallation_import",
58+
"Import",
59+
"mdi mdi-upload",
60+
permissions=["netbox_slm.import_softwareproductinstallation"],
61+
),
4462
),
4563
),
4664
PluginMenuItem(
@@ -54,6 +72,12 @@
5472
"mdi mdi-plus-thick",
5573
permissions=["netbox_slm.add_softwarelicense"],
5674
),
75+
PluginMenuButton(
76+
"plugins:netbox_slm:softwarelicense_import",
77+
"Import",
78+
"mdi mdi-upload",
79+
permissions=["netbox_slm.import_softwarelicense"],
80+
),
5781
),
5882
),
5983
)

netbox_slm/urls.py

+10
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
path(
1212
"software-products/delete/", views.SoftwareProductBulkDeleteView.as_view(), name="softwareproduct_bulk_delete"
1313
),
14+
path("software-products/import/", views.SoftwareProductBulkImportView.as_view(), name="softwareproduct_import"),
1415
path("software-products/<int:pk>/", views.SoftwareProductView.as_view(), name="softwareproduct"),
1516
path(
1617
"software-products/<int:pk>/delete/", views.SoftwareProductDeleteView.as_view(), name="softwareproduct_delete"
@@ -30,6 +31,9 @@
3031
views.SoftwareProductVersionBulkDeleteView.as_view(),
3132
name="softwareproductversion_bulk_delete",
3233
),
34+
path(
35+
"versions/import/", views.SoftwareProductVersionBulkImportView.as_view(), name="softwareproductversion_import"
36+
),
3337
path("versions/<int:pk>/", views.SoftwareProductVersionView.as_view(), name="softwareproductversion"),
3438
path(
3539
"versions/<int:pk>/delete/",
@@ -59,6 +63,11 @@
5963
views.SoftwareProductInstallationBulkDeleteView.as_view(),
6064
name="softwareproductinstallation_bulk_delete",
6165
),
66+
path(
67+
"installations/import/",
68+
views.SoftwareProductInstallationBulkImportView.as_view(),
69+
name="softwareproductinstallation_import",
70+
),
6271
path(
6372
"installations/<int:pk>/",
6473
views.SoftwareProductInstallationView.as_view(),
@@ -84,6 +93,7 @@
8493
path("licenses/", views.SoftwareLicenseListView.as_view(), name="softwarelicense_list"),
8594
path("licenses/add/", views.SoftwareLicenseEditView.as_view(), name="softwarelicense_add"),
8695
path("licenses/delete/", views.SoftwareLicenseBulkDeleteView.as_view(), name="softwarelicense_bulk_delete"),
96+
path("licenses/import/", views.SoftwareLicenseBulkImportView.as_view(), name="softwarelicense_import"),
8797
path("licenses/<int:pk>/", views.SoftwareLicenseView.as_view(), name="softwarelicense"),
8898
path("licenses/<int:pk>/delete/", views.SoftwareLicenseDeleteView.as_view(), name="softwarelicense_delete"),
8999
path("licenses/<int:pk>/edit/", views.SoftwareLicenseEditView.as_view(), name="softwarelicense_edit"),

netbox_slm/views/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,29 @@
44
SoftwareLicenseEditView,
55
SoftwareLicenseDeleteView,
66
SoftwareLicenseBulkDeleteView,
7+
SoftwareLicenseBulkImportView,
78
)
89
from .software_product import (
910
SoftwareProductListView,
1011
SoftwareProductView,
1112
SoftwareProductEditView,
1213
SoftwareProductDeleteView,
1314
SoftwareProductBulkDeleteView,
15+
SoftwareProductBulkImportView,
1416
)
1517
from .software_product_installation import (
1618
SoftwareProductInstallationListView,
1719
SoftwareProductInstallationView,
1820
SoftwareProductInstallationEditView,
1921
SoftwareProductInstallationDeleteView,
2022
SoftwareProductInstallationBulkDeleteView,
23+
SoftwareProductInstallationBulkImportView,
2124
)
2225
from .software_product_version import (
2326
SoftwareProductVersionListView,
2427
SoftwareProductVersionView,
2528
SoftwareProductVersionEditView,
2629
SoftwareProductVersionDeleteView,
2730
SoftwareProductVersionBulkDeleteView,
31+
SoftwareProductVersionBulkImportView,
2832
)

netbox_slm/views/software_license.py

+6
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,9 @@ class SoftwareLicenseDeleteView(generic.ObjectDeleteView):
3434
class SoftwareLicenseBulkDeleteView(generic.BulkDeleteView):
3535
queryset = SoftwareLicense.objects.all()
3636
table = tables.SoftwareLicenseTable
37+
38+
39+
class SoftwareLicenseBulkImportView(generic.BulkImportView):
40+
queryset = SoftwareLicense.objects.all()
41+
table = tables.SoftwareLicenseTable
42+
model_form = forms.SoftwareLicenseBulkImportForm

netbox_slm/views/software_product.py

+6
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,9 @@ class SoftwareProductDeleteView(generic.ObjectDeleteView):
3838
class SoftwareProductBulkDeleteView(generic.BulkDeleteView):
3939
queryset = SoftwareProduct.objects.all()
4040
table = tables.SoftwareProductTable
41+
42+
43+
class SoftwareProductBulkImportView(generic.BulkImportView):
44+
queryset = SoftwareProduct.objects.all()
45+
table = tables.SoftwareProductTable
46+
model_form = forms.SoftwareProductBulkImportForm

netbox_slm/views/software_product_installation.py

+6
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,9 @@ class SoftwareProductInstallationDeleteView(generic.ObjectDeleteView):
3434
class SoftwareProductInstallationBulkDeleteView(generic.BulkDeleteView):
3535
queryset = SoftwareProductInstallation.objects.all()
3636
table = tables.SoftwareProductInstallationTable
37+
38+
39+
class SoftwareProductInstallationBulkImportView(generic.BulkImportView):
40+
queryset = SoftwareProductInstallation.objects.all()
41+
table = tables.SoftwareProductInstallationTable
42+
model_form = forms.SoftwareProductInstallationBulkImportForm

netbox_slm/views/software_product_version.py

+6
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,9 @@ class SoftwareProductVersionDeleteView(generic.ObjectDeleteView):
3838
class SoftwareProductVersionBulkDeleteView(generic.BulkDeleteView):
3939
queryset = SoftwareProductVersion.objects.all()
4040
table = tables.SoftwareProductVersionTable
41+
42+
43+
class SoftwareProductVersionBulkImportView(generic.BulkImportView):
44+
queryset = SoftwareProductVersion.objects.all()
45+
table = tables.SoftwareProductVersionTable
46+
model_form = forms.SoftwareProductVersionBulkImportForm

0 commit comments

Comments
 (0)