Prepare for upgrade to NetBox v4.0.6 (#40)

Closes #38
This commit is contained in:
wkoot
2024-07-09 22:15:58 +02:00
committed by GitHub
parent 230b3b5115
commit 86215f43a6
18 changed files with 179 additions and 216 deletions
+5 -5
View File
@@ -16,13 +16,13 @@ jobs:
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v4 uses: actions/setup-python@v4
with: with:
python-version: "3.9" python-version: "3.11"
- name: Install tools - name: Install tools
run: pip install .[tools] run: pip install .[tools]
- name: Run ruff - name: Run ruff lint
run: ruff netbox_slm run: ruff check netbox_slm
- name: Run black - name: Run ruff format
run: black netbox_slm run: ruff format netbox_slm
+3 -3
View File
@@ -1,4 +1,4 @@
ARG PYTHON_VERSION=3.10 ARG PYTHON_VERSION=3.11
FROM python:${PYTHON_VERSION}-alpine AS compile-image FROM python:${PYTHON_VERSION}-alpine AS compile-image
WORKDIR /build WORKDIR /build
@@ -11,7 +11,7 @@ RUN pip install -U .[build]
RUN python -m build RUN python -m build
RUN pip install --no-index /build RUN pip install --no-index /build
FROM netboxcommunity/netbox:v3.7.2 FROM netboxcommunity/netbox:v4.0.6
ARG PYTHON_VERSION=3.10 ARG PYTHON_VERSION=3.11
COPY --from=compile-image /opt/netbox/venv/lib/python${PYTHON_VERSION}/site-packages/netbox_slm /opt/netbox/venv/lib/python${PYTHON_VERSION}/site-packages/netbox_slm COPY --from=compile-image /opt/netbox/venv/lib/python${PYTHON_VERSION}/site-packages/netbox_slm /opt/netbox/venv/lib/python${PYTHON_VERSION}/site-packages/netbox_slm
+1 -1
View File
@@ -1,4 +1,4 @@
FROM netboxcommunity/netbox:v3.7.2 FROM netboxcommunity/netbox:v4.0.6
RUN mkdir /ci && chmod go+w /ci RUN mkdir /ci && chmod go+w /ci
COPY ../ci/requirements_ci.txt /ci/ COPY ../ci/requirements_ci.txt /ci/
+1 -1
View File
@@ -1,4 +1,4 @@
version: '3.7' ---
services: services:
netbox: netbox:
ports: ports:
+2 -2
View File
@@ -1,7 +1,7 @@
version: '3.7' ---
services: services:
netbox: &netbox netbox: &netbox
image: netboxcommunity/netbox:${VERSION-v3.7.2} image: netboxcommunity/netbox:${VERSION-v4.0.6}
depends_on: depends_on:
- postgres - postgres
- redis - redis
+1 -1
View File
@@ -1,2 +1,2 @@
coverage==7.2.2 coverage==7.5.4
unittest-xml-reporting==3.2.0 unittest-xml-reporting==3.2.0
+1 -1
View File
@@ -1,4 +1,4 @@
from extras.plugins import PluginConfig from netbox.plugins import PluginConfig
__version__ = "1.6.0" __version__ = "1.6.0"
+12 -8
View File
@@ -10,7 +10,7 @@ class SoftwareLicenseSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = SoftwareLicense model = SoftwareLicense
fields = [ fields = (
"id", "id",
"display", "display",
"url", "url",
@@ -31,7 +31,8 @@ class SoftwareLicenseSerializer(NetBoxModelSerializer):
"custom_field_data", "custom_field_data",
"created", "created",
"last_updated", "last_updated",
] )
brief_fields = ("id", "display", "url", "name", "description")
def get_display(self, obj): def get_display(self, obj):
return f"{obj}" return f"{obj}"
@@ -43,7 +44,7 @@ class SoftwareProductSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = SoftwareProduct model = SoftwareProduct
fields = [ fields = (
"id", "id",
"display", "display",
"url", "url",
@@ -55,7 +56,8 @@ class SoftwareProductSerializer(NetBoxModelSerializer):
"custom_field_data", "custom_field_data",
"created", "created",
"last_updated", "last_updated",
] )
brief_fields = ("id", "display", "url", "name", "description")
def get_display(self, obj): def get_display(self, obj):
return f"{obj.manufacturer} - {obj}" return f"{obj.manufacturer} - {obj}"
@@ -69,7 +71,7 @@ class SoftwareProductInstallationSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = SoftwareProductInstallation model = SoftwareProductInstallation
fields = [ fields = (
"id", "id",
"display", "display",
"url", "url",
@@ -83,7 +85,8 @@ class SoftwareProductInstallationSerializer(NetBoxModelSerializer):
"custom_field_data", "custom_field_data",
"created", "created",
"last_updated", "last_updated",
] )
brief_fields = ("id", "display", "url", "name")
def get_display(self, obj): def get_display(self, obj):
return f"{obj}" return f"{obj}"
@@ -95,7 +98,7 @@ class SoftwareProductVersionSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = SoftwareProductVersion model = SoftwareProductVersion
fields = [ fields = (
"id", "id",
"display", "display",
"url", "url",
@@ -113,7 +116,8 @@ class SoftwareProductVersionSerializer(NetBoxModelSerializer):
"custom_field_data", "custom_field_data",
"created", "created",
"last_updated", "last_updated",
] )
brief_fields = ("id", "display", "url", "name")
def get_display(self, obj): def get_display(self, obj):
return f"{obj}" return f"{obj}"
+3 -11
View File
@@ -4,6 +4,7 @@ from django.urls import reverse_lazy
from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion, SoftwareProductInstallation, SoftwareLicense from netbox_slm.models import SoftwareProduct, SoftwareProductVersion, SoftwareProductInstallation, SoftwareLicense
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField, LaxURLField from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField, LaxURLField
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import APISelect, DatePicker from utilities.forms.widgets import APISelect, DatePicker
@@ -62,7 +63,7 @@ class SoftwareLicenseForm(NetBoxModelForm):
class SoftwareLicenseFilterForm(NetBoxModelFilterSetForm): class SoftwareLicenseFilterForm(NetBoxModelFilterSetForm):
model = SoftwareLicense model = SoftwareLicense
fieldsets = ((None, ("q", "tag")),) fieldsets = (FieldSet(None, ("q", "tag")),)
tag = TagFilterField(model) tag = TagFilterField(model)
@@ -85,13 +86,4 @@ class SoftwareLicenseBulkEditForm(NetBoxModelBulkEditForm):
version = DynamicModelChoiceField(queryset=SoftwareProductVersion.objects.all(), required=False) version = DynamicModelChoiceField(queryset=SoftwareProductVersion.objects.all(), required=False)
installation = DynamicModelChoiceField(queryset=SoftwareProductInstallation.objects.all(), required=False) installation = DynamicModelChoiceField(queryset=SoftwareProductInstallation.objects.all(), required=False)
model = SoftwareLicense model = SoftwareLicense
fieldsets = ( fieldsets = (FieldSet(None, ("software_product", "version", "installation")),)
(
None,
(
"software_product",
"version",
"installation",
),
),
)
+2 -1
View File
@@ -4,6 +4,7 @@ from dcim.models import Manufacturer
from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm
from netbox_slm.models import SoftwareProduct from netbox_slm.models import SoftwareProduct
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet
class SoftwareProductForm(NetBoxModelForm): class SoftwareProductForm(NetBoxModelForm):
@@ -29,7 +30,7 @@ class SoftwareProductForm(NetBoxModelForm):
class SoftwareProductFilterForm(NetBoxModelFilterSetForm): class SoftwareProductFilterForm(NetBoxModelFilterSetForm):
model = SoftwareProduct model = SoftwareProduct
fieldsets = ((None, ("q", "tag")),) fieldsets = (FieldSet(None, ("q", "tag")),)
tag = TagFilterField(model) tag = TagFilterField(model)
@@ -5,6 +5,7 @@ from dcim.models import Device
from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm
from netbox_slm.models import SoftwareProductInstallation, SoftwareProduct, SoftwareProductVersion from netbox_slm.models import SoftwareProductInstallation, SoftwareProduct, SoftwareProductVersion
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import APISelect from utilities.forms.widgets import APISelect
from virtualization.models import VirtualMachine, Cluster from virtualization.models import VirtualMachine, Cluster
@@ -56,7 +57,7 @@ class SoftwareProductInstallationForm(NetBoxModelForm):
class SoftwareProductInstallationFilterForm(NetBoxModelFilterSetForm): class SoftwareProductInstallationFilterForm(NetBoxModelFilterSetForm):
model = SoftwareProductInstallation model = SoftwareProductInstallation
fieldsets = ((None, ("q", "tag")),) fieldsets = (FieldSet(None, ("q", "tag")),)
tag = TagFilterField(model) tag = TagFilterField(model)
@@ -70,12 +71,4 @@ class SoftwareProductInstallationBulkEditForm(NetBoxModelBulkEditForm):
software_product = DynamicModelChoiceField(queryset=SoftwareProduct.objects.all(), required=False) software_product = DynamicModelChoiceField(queryset=SoftwareProduct.objects.all(), required=False)
version = DynamicModelChoiceField(queryset=SoftwareProductVersion.objects.all(), required=False) version = DynamicModelChoiceField(queryset=SoftwareProductVersion.objects.all(), required=False)
model = SoftwareProductInstallation model = SoftwareProductInstallation
fieldsets = ( fieldsets = (FieldSet(None, ("software_product", "version")),)
(
None,
(
"software_product",
"version",
),
),
)
+2 -1
View File
@@ -4,6 +4,7 @@ from django.urls import reverse_lazy
from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm from netbox.forms import NetBoxModelForm, NetBoxModelImportForm, NetBoxModelBulkEditForm, NetBoxModelFilterSetForm
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion from netbox_slm.models import SoftwareProduct, SoftwareProductVersion
from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField from utilities.forms.fields import CommentField, DynamicModelChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import APISelect, DatePicker from utilities.forms.widgets import APISelect, DatePicker
@@ -39,7 +40,7 @@ class SoftwareProductVersionForm(NetBoxModelForm):
class SoftwareProductVersionFilterForm(NetBoxModelFilterSetForm): class SoftwareProductVersionFilterForm(NetBoxModelFilterSetForm):
model = SoftwareProductVersion model = SoftwareProductVersion
fieldsets = ((None, ("q", "tag")),) fieldsets = (FieldSet(None, ("q", "tag")),)
tag = TagFilterField(model) tag = TagFilterField(model)
+1 -10
View File
@@ -1,5 +1,4 @@
from extras.plugins import PluginMenuButton, PluginMenuItem from netbox.plugins import PluginMenuButton, PluginMenuItem
from utilities.choices import ButtonColorChoices
menu_items = ( menu_items = (
PluginMenuItem( PluginMenuItem(
@@ -10,14 +9,12 @@ menu_items = (
"plugins:netbox_slm:softwareproduct_add", "plugins:netbox_slm:softwareproduct_add",
"Add", "Add",
"mdi mdi-plus-thick", "mdi mdi-plus-thick",
ButtonColorChoices.GREEN,
permissions=["netbox_slm.add_softwareproduct"], permissions=["netbox_slm.add_softwareproduct"],
), ),
PluginMenuButton( PluginMenuButton(
"plugins:netbox_slm:softwareproduct_import", "plugins:netbox_slm:softwareproduct_import",
"Import", "Import",
"mdi mdi-upload", "mdi mdi-upload",
ButtonColorChoices.CYAN,
permissions=["netbox_slm.add_softwareproduct"], permissions=["netbox_slm.add_softwareproduct"],
), ),
), ),
@@ -30,14 +27,12 @@ menu_items = (
"plugins:netbox_slm:softwareproductversion_add", "plugins:netbox_slm:softwareproductversion_add",
"Add", "Add",
"mdi mdi-plus-thick", "mdi mdi-plus-thick",
ButtonColorChoices.GREEN,
permissions=["netbox_slm.add_softwareproductversion"], permissions=["netbox_slm.add_softwareproductversion"],
), ),
PluginMenuButton( PluginMenuButton(
"plugins:netbox_slm:softwareproductversion_import", "plugins:netbox_slm:softwareproductversion_import",
"Import", "Import",
"mdi mdi-upload", "mdi mdi-upload",
ButtonColorChoices.CYAN,
permissions=["netbox_slm.add_softwareproductversion"], permissions=["netbox_slm.add_softwareproductversion"],
), ),
), ),
@@ -50,14 +45,12 @@ menu_items = (
"plugins:netbox_slm:softwareproductinstallation_add", "plugins:netbox_slm:softwareproductinstallation_add",
"Add", "Add",
"mdi mdi-plus-thick", "mdi mdi-plus-thick",
ButtonColorChoices.GREEN,
permissions=["netbox_slm.add_softwareproductinstallation"], permissions=["netbox_slm.add_softwareproductinstallation"],
), ),
PluginMenuButton( PluginMenuButton(
"plugins:netbox_slm:softwareproductinstallation_import", "plugins:netbox_slm:softwareproductinstallation_import",
"Import", "Import",
"mdi mdi-upload", "mdi mdi-upload",
ButtonColorChoices.CYAN,
permissions=["netbox_slm.add_softwareproductinstallation"], permissions=["netbox_slm.add_softwareproductinstallation"],
), ),
), ),
@@ -70,14 +63,12 @@ menu_items = (
"plugins:netbox_slm:softwarelicense_add", "plugins:netbox_slm:softwarelicense_add",
"Add", "Add",
"mdi mdi-plus-thick", "mdi mdi-plus-thick",
ButtonColorChoices.GREEN,
permissions=["netbox_slm.add_softwarelicense"], permissions=["netbox_slm.add_softwarelicense"],
), ),
PluginMenuButton( PluginMenuButton(
"plugins:netbox_slm:softwarelicense_import", "plugins:netbox_slm:softwarelicense_import",
"Import", "Import",
"mdi mdi-upload", "mdi mdi-upload",
ButtonColorChoices.CYAN,
permissions=["netbox_slm.add_softwarelicense"], permissions=["netbox_slm.add_softwarelicense"],
), ),
), ),
@@ -11,7 +11,6 @@
<h5 class="card-header"> <h5 class="card-header">
Software License Software License
</h5> </h5>
<div class="card-body">
<table class="table table-hover attr-table"> <table class="table table-hover attr-table">
<tr> <tr>
<th scope="row">Name</th> <th scope="row">Name</th>
@@ -63,7 +62,6 @@
</tr> </tr>
</table> </table>
</div> </div>
</div>
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}
@@ -11,7 +11,6 @@
<h5 class="card-header"> <h5 class="card-header">
Software Product Software Product
</h5> </h5>
<div class="card-body">
<table class="table table-hover attr-table"> <table class="table table-hover attr-table">
<tr> <tr>
<th scope="row">Name</th> <th scope="row">Name</th>
@@ -39,7 +38,6 @@
</tr> </tr>
</table> </table>
</div> </div>
</div>
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}
@@ -11,7 +11,6 @@
<h5 class="card-header"> <h5 class="card-header">
Software Product Installation Software Product Installation
</h5> </h5>
<div class="card-body">
<table class="table table-hover attr-table"> <table class="table table-hover attr-table">
{% if object.device %} {% if object.device %}
<tr> <tr>
@@ -39,7 +38,6 @@
</tr> </tr>
</table> </table>
</div> </div>
</div>
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}
@@ -11,7 +11,6 @@
<h5 class="card-header"> <h5 class="card-header">
Software Product Version Software Product Version
</h5> </h5>
<div class="card-body">
<table class="table table-hover attr-table"> <table class="table table-hover attr-table">
<tr> <tr>
<th scope="row">Name</th> <th scope="row">Name</th>
@@ -55,7 +54,6 @@
</tr> </tr>
</table> </table>
</div> </div>
</div>
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}
+11 -22
View File
@@ -7,7 +7,7 @@ name = "netbox-slm"
dynamic = ["version"] dynamic = ["version"]
description = "Software Lifecycle Management Netbox Plugin" description = "Software Lifecycle Management Netbox Plugin"
readme = "README.md" readme = "README.md"
requires-python = ">=3.9" requires-python = ">=3.11"
license = { text = "Apache-2.0" } license = { text = "Apache-2.0" }
authors = [ authors = [
{name = "ICTU", email = "open-source-projects@ictu.nl"}, {name = "ICTU", email = "open-source-projects@ictu.nl"},
@@ -21,9 +21,8 @@ classifiers = [
"Programming Language :: Python", "Programming Language :: Python",
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
] ]
@@ -31,13 +30,12 @@ dependencies = []
[project.optional-dependencies] [project.optional-dependencies]
build = [ build = [
"build == 1.0.3", "build == 1.2.1",
"setuptools == 68.2.0", "setuptools == 70.3.0",
"twine == 3.7.1", "twine == 5.1.1",
] ]
tools = [ tools = [
"black == 23.3.0", "ruff == 0.5.1",
"ruff == 0.0.275",
] ]
[tool.setuptools.dynamic] [tool.setuptools.dynamic]
@@ -46,24 +44,12 @@ version = {attr = "netbox_slm.__version__"}
[tool.setuptools.packages.find] [tool.setuptools.packages.find]
include = ["netbox_slm"] include = ["netbox_slm"]
[tool.black]
line-length = 120
target-version = ["py39"]
color = true
check = true
diff = true
fast = true
extend-exclude = '''
netbox_slm/migrations/.*.py
'''
[tool.ruff] [tool.ruff]
line-length = 120 line-length = 120
target-version = "py39" target-version = "py311"
format = "github"
src = ["netbox_slm"] src = ["netbox_slm"]
[tool.ruff.per-file-ignores] [tool.ruff.lint.per-file-ignores]
"__init__.py" = [ "__init__.py" = [
"D104", # https://beta.ruff.rs/docs/rules/#pydocstyle-d - don't require doc strings in __init__.py files "D104", # https://beta.ruff.rs/docs/rules/#pydocstyle-d - don't require doc strings in __init__.py files
"F401", # https://beta.ruff.rs/docs/rules/#pyflakes-f - don't complain about unused imports in __init__.py files "F401", # https://beta.ruff.rs/docs/rules/#pyflakes-f - don't complain about unused imports in __init__.py files
@@ -71,3 +57,6 @@ src = ["netbox_slm"]
"netbox_slm/migrations/*.py" = [ "netbox_slm/migrations/*.py" = [
"E501", # https://beta.ruff.rs/docs/rules/line-too-long/ - don't check on Django generated migration files "E501", # https://beta.ruff.rs/docs/rules/line-too-long/ - don't check on Django generated migration files
] ]
[tool.ruff.format]
exclude = ["netbox_slm/migrations/*.py"]