git: 5a711034ee62 - main - net-mgmt/netbox: Update to 4.2.3

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Sat, 08 Feb 2025 09:55:02 UTC
The branch main has been updated by kai:

URL: https://cgit.FreeBSD.org/ports/commit/?id=5a711034ee6259c7e88ec14eadf1ee3c6fd85f03

commit 5a711034ee6259c7e88ec14eadf1ee3c6fd85f03
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2025-02-08 09:13:01 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2025-02-08 09:51:47 +0000

    net-mgmt/netbox: Update to 4.2.3
    
    It contains many bugfixes/enhancements and the following new features:
    
    * Assign Multiple MAC Addresses per Interface
    * Quick Add UI Widget
    * VLAN Translation
    * Virtual Circuits
    * Q-in-Q Encapsulation
    
    https://netbox.readthedocs.io/en/stable/release-notes/version-4.2/
    
    MFH:            No (feature release)
---
 net-mgmt/netbox/Makefile             | 54 +++++++++++------------
 net-mgmt/netbox/distinfo             |  6 +--
 net-mgmt/netbox/files/pkg-message.in | 35 +++++++++++++++
 net-mgmt/netbox/pkg-plist            | 84 +++++++++++++++++++++++++++++-------
 4 files changed, 134 insertions(+), 45 deletions(-)

diff --git a/net-mgmt/netbox/Makefile b/net-mgmt/netbox/Makefile
index 208d894ab1ce..b194ad4072c4 100644
--- a/net-mgmt/netbox/Makefile
+++ b/net-mgmt/netbox/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	netbox
 DISTVERSIONPREFIX=	v
-DISTVERSION=	4.1.11
+DISTVERSION=	4.2.3
 CATEGORIES=	net-mgmt python
 
 MAINTAINER=	kai@FreeBSD.org
@@ -18,34 +18,34 @@ LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 # Django packages that are known for regressions in conjunction with NetBox and
 # should therefore only be updated with caution.
 #
-# - devel/py-dj50-django-rq
-# - www/py-dj50-django-filter
-# - www/py-dj50-django-tables2
-# - www/py-dj50-djangorestframework
+# - devel/py-dj51-django-rq
+# - www/py-dj51-django-filter
+# - www/py-dj51-django-tables2
+# - www/py-dj51-djangorestframework
 #
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=5.0.10<5.1:www/py-django50@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-cors-headers>=4.6.0<5:www/py-dj50-django-cors-headers@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-debug-toolbar>=4.4.6<4.5:www/py-dj50-django-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-filter>=24.3<25:www/py-dj50-django-filter@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-htmx>=1.21.0<2:www/py-dj50-django-htmx@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-mptt>=0.16.0<0.17:www/py-dj50-django-mptt@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-prometheus>=2.3.1<2.4:www/py-dj50-django-prometheus@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-redis>=5.4.0<6:www/py-dj50-django-redis@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-rich>=1.13.0<2:www/py-dj50-django-rich@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-rq>=3.0<3.1:devel/py-dj50-django-rq@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-tables2>=2.7.5<2.8:www/py-dj50-django-tables2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-taggit>=6.1.0<7:www/py-dj50-django-taggit@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-django-timezone-field>=7.0<8:www/py-dj50-django-timezone-field@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-djangorestframework>=3.15.2<3.16.0:www/py-dj50-djangorestframework@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-drf-spectacular>=0.28.0<1:www/py-dj50-drf-spectacular@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-drf-spectacular-sidecar>=2024.12.1:www/py-dj50-drf-spectacular-sidecar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-strawberry-graphql>=0.256.1<0.300:devel/py-dj50-strawberry-graphql@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj50-strawberry-graphql-django>=0.53.1<1:www/py-dj50-strawberry-graphql-django@${PY_FLAVOR} \
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django51>=5.1.3<5.2:www/py-django51@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-cors-headers>=4.6.0<5:www/py-dj51-django-cors-headers@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-debug-toolbar>=5.0.1<6:www/py-dj51-django-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-filter>=24.3<25:www/py-dj51-django-filter@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-htmx>=1.21.0<2:www/py-dj51-django-htmx@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-mptt>=0.16.0<0.17:www/py-dj51-django-mptt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-prometheus>=2.3.1<2.4:www/py-dj51-django-prometheus@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-redis>=5.4.0<6:www/py-dj51-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-rich>=1.13.0<2:www/py-dj51-django-rich@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-rq>=3.0<3.1:devel/py-dj51-django-rq@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-tables2>=2.7.5<2.8:www/py-dj51-django-tables2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-taggit>=6.1.0<7:www/py-dj51-django-taggit@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-django-timezone-field>=7.1<8:www/py-dj51-django-timezone-field@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-djangorestframework>=3.15.2<3.16.0:www/py-dj51-djangorestframework@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-drf-spectacular>=0.28.0<1:www/py-dj51-drf-spectacular@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-drf-spectacular-sidecar>=2025.2.1:www/py-dj51-drf-spectacular-sidecar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-strawberry-graphql>=0.258.0<0.300:devel/py-dj51-strawberry-graphql@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj51-strawberry-graphql-django>=0.52.0<1:www/py-dj51-strawberry-graphql-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}django-pglocks>=1.0.4<1.1:www/py-django-pglocks@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}feedparser>=6.0.11<7:textproc/py-feedparser@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.4<4:devel/py-Jinja2@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}markdown>=3.6<3.8:textproc/py-markdown@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.5.49<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.6.2<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.27.0<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings-python-legacy>0:textproc/py-mkdocstrings-python-legacy@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}netaddr>=1.3.0<2:net/py-netaddr@${PY_FLAVOR} \
@@ -53,13 +53,13 @@ RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=5.0.10<5.1:www/py-django50@${PY_FL
 		${PYTHON_PKGNAMEPREFIX}pillow>=11.0.0:graphics/py-pillow@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}psycopg>=3.1.20<4:databases/py-psycopg@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}psycopg-c>=3.1.20<4:databases/py-psycopg-c@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}psycopg-pool>=3.2.3<4:databases/py-psycopg-pool@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg-pool>=3.2.4<4:databases/py-psycopg-pool@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}requests>=2.32.3<3:www/py-requests@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}rq>=2.1.0<3:devel/py-rq@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.4.2<6:www/py-social-auth-app-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.5.4<5:security/py-social-auth-core@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}svgwrite>=1.4.3<2:graphics/py-svgwrite@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}tablib>=3.7.0<4:textproc/py-tablib@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}tablib>=3.8.0<4:textproc/py-tablib@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tzdata>=2024.2:devel/py-tzdata@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pyyaml>=6.0.1<7:devel/py-pyyaml@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}gunicorn>=23.0.0<24:www/py-gunicorn@${PY_FLAVOR}
@@ -84,7 +84,7 @@ S3_DESC=	Amazon S3 backend support
 SENTRY_DESC=	Sentry monitoring support
 
 GIT_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dulwich>0:devel/py-dulwich@${PY_FLAVOR}
-LDAP_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-django-auth-ldap>0:www/py-dj50-django-auth-ldap
+LDAP_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj51-django-auth-ldap>0:www/py-dj51-django-auth-ldap
 S3_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}boto3>0:www/py-boto3@${PY_FLAVOR}
 SENTRY_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}sentry-sdk>0:devel/py-sentry-sdk@${PY_FLAVOR}
 
diff --git a/net-mgmt/netbox/distinfo b/net-mgmt/netbox/distinfo
index 085ccebd818b..ebab80669cca 100644
--- a/net-mgmt/netbox/distinfo
+++ b/net-mgmt/netbox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1736254561
-SHA256 (netbox-community-netbox-v4.1.11_GH0.tar.gz) = 90916473b371fbd1f9c4a3b757fba15332a76bd5d7e238c7eb9cad3db57b1ffe
-SIZE (netbox-community-netbox-v4.1.11_GH0.tar.gz) = 18113538
+TIMESTAMP = 1738772107
+SHA256 (netbox-community-netbox-v4.2.3_GH0.tar.gz) = 0a654b2f155cec1ada836f7bcdd1c4a24b6e8d9b1ba33a2f950daacb4744cc6a
+SIZE (netbox-community-netbox-v4.2.3_GH0.tar.gz) = 18206292
diff --git a/net-mgmt/netbox/files/pkg-message.in b/net-mgmt/netbox/files/pkg-message.in
index 6114a62bdbb7..a737d0737248 100644
--- a/net-mgmt/netbox/files/pkg-message.in
+++ b/net-mgmt/netbox/files/pkg-message.in
@@ -440,4 +440,39 @@ EOD
      the request argument.
 EOD
 }
+{ type: upgrade
+  maximum_version: 4.2.3
+  message: <<EOD
+1. The NetBox 4.2 release contains some breaking changes, so the following
+   items should be checked before upgrading:
+
+   * Support for the Django admin UI has been completely removed.  (The Django
+     admin UI was disabled by default in NetBox v4.0.)
+
+   * This release drops support for PostgreSQL 12.  PostgreSQL 13 or later is
+     required to run this release.
+
+   * NetBox has adopted collation-based natural ordering for many models.  This
+     may alter the order in which some objects are listed by default.
+
+   * Automatic redirects from pre-v4.1 UI views for virtual disks have been
+     removed.
+
+   * The site and provider_network foreign key fields on
+     "circuits.CircuitTermination" have been replaced by the "termination"
+     generic foreign key.
+
+   * The "site" foreign key field on "ipam.Prefix" has been replaced by the
+     "scope" generic foreign key.
+
+   * The "site" foreign key field on "virtualization.Cluster" has been replaced
+     by the "scope" generic foreign key.
+
+   * The "circuit" foreign key field on "circuits.CircuitGroupAssignment" has
+     been replaced by the "member" generic foreign key.
+
+   * Obsolete nested REST API serializers have been removed.  These were
+     deprecated in NetBox v4.1 under #17143.
+EOD
+}
 ]
diff --git a/net-mgmt/netbox/pkg-plist b/net-mgmt/netbox/pkg-plist
index a970d7387bfe..cf57f2fc83a8 100644
--- a/net-mgmt/netbox/pkg-plist
+++ b/net-mgmt/netbox/pkg-plist
@@ -13,7 +13,6 @@
 %%DATADIR%%/account/views.py
 %%DATADIR%%/circuits/__init__.py
 %%DATADIR%%/circuits/api/__init__.py
-%%DATADIR%%/circuits/api/nested_serializers.py
 %%DATADIR%%/circuits/api/serializers.py
 %%DATADIR%%/circuits/api/serializers_/__init__.py
 %%DATADIR%%/circuits/api/serializers_/circuits.py
@@ -23,6 +22,7 @@
 %%DATADIR%%/circuits/api/views.py
 %%DATADIR%%/circuits/apps.py
 %%DATADIR%%/circuits/choices.py
+%%DATADIR%%/circuits/constants.py
 %%DATADIR%%/circuits/filtersets.py
 %%DATADIR%%/circuits/forms/__init__.py
 %%DATADIR%%/circuits/forms/bulk_edit.py
@@ -39,16 +39,26 @@
 %%DATADIR%%/circuits/migrations/0038_squashed_0042.py
 %%DATADIR%%/circuits/migrations/0043_circuittype_color.py
 %%DATADIR%%/circuits/migrations/0044_circuit_groups.py
+%%DATADIR%%/circuits/migrations/0045_circuit_distance.py
+%%DATADIR%%/circuits/migrations/0046_charfield_null_choices.py
+%%DATADIR%%/circuits/migrations/0047_circuittermination__termination.py
+%%DATADIR%%/circuits/migrations/0048_circuitterminations_cached_relations.py
+%%DATADIR%%/circuits/migrations/0049_natural_ordering.py
+%%DATADIR%%/circuits/migrations/0050_virtual_circuits.py
+%%DATADIR%%/circuits/migrations/0051_virtualcircuit_group_assignment.py
 %%DATADIR%%/circuits/migrations/__init__.py
 %%DATADIR%%/circuits/models/__init__.py
+%%DATADIR%%/circuits/models/base.py
 %%DATADIR%%/circuits/models/circuits.py
 %%DATADIR%%/circuits/models/providers.py
+%%DATADIR%%/circuits/models/virtual_circuits.py
 %%DATADIR%%/circuits/search.py
 %%DATADIR%%/circuits/signals.py
 %%DATADIR%%/circuits/tables/__init__.py
 %%DATADIR%%/circuits/tables/circuits.py
 %%DATADIR%%/circuits/tables/columns.py
 %%DATADIR%%/circuits/tables/providers.py
+%%DATADIR%%/circuits/tables/virtual_circuits.py
 %%DATADIR%%/circuits/tests/__init__.py
 %%DATADIR%%/circuits/tests/test_api.py
 %%DATADIR%%/circuits/tests/test_filtersets.py
@@ -57,13 +67,13 @@
 %%DATADIR%%/circuits/views.py
 %%DATADIR%%/core/__init__.py
 %%DATADIR%%/core/api/__init__.py
-%%DATADIR%%/core/api/nested_serializers.py
 %%DATADIR%%/core/api/schema.py
 %%DATADIR%%/core/api/serializers.py
 %%DATADIR%%/core/api/serializers_/__init__.py
 %%DATADIR%%/core/api/serializers_/change_logging.py
 %%DATADIR%%/core/api/serializers_/data.py
 %%DATADIR%%/core/api/serializers_/jobs.py
+%%DATADIR%%/core/api/serializers_/tasks.py
 %%DATADIR%%/core/api/urls.py
 %%DATADIR%%/core/api/views.py
 %%DATADIR%%/core/apps.py
@@ -127,11 +137,11 @@
 %%DATADIR%%/core/tests/test_models.py
 %%DATADIR%%/core/tests/test_views.py
 %%DATADIR%%/core/urls.py
+%%DATADIR%%/core/utils.py
 %%DATADIR%%/core/views.py
 %%DATADIR%%/dcim/__init__.py
 %%DATADIR%%/dcim/api/__init__.py
 %%DATADIR%%/dcim/api/exceptions.py
-%%DATADIR%%/dcim/api/nested_serializers.py
 %%DATADIR%%/dcim/api/serializers.py
 %%DATADIR%%/dcim/api/serializers_/__init__.py
 %%DATADIR%%/dcim/api/serializers_/base.py
@@ -152,6 +162,7 @@
 %%DATADIR%%/dcim/api/urls.py
 %%DATADIR%%/dcim/api/views.py
 %%DATADIR%%/dcim/apps.py
+%%DATADIR%%/dcim/base_filtersets.py
 %%DATADIR%%/dcim/choices.py
 %%DATADIR%%/dcim/constants.py
 %%DATADIR%%/dcim/fields.py
@@ -164,6 +175,7 @@
 %%DATADIR%%/dcim/forms/connections.py
 %%DATADIR%%/dcim/forms/filtersets.py
 %%DATADIR%%/dcim/forms/formsets.py
+%%DATADIR%%/dcim/forms/mixins.py
 %%DATADIR%%/dcim/forms/model_forms.py
 %%DATADIR%%/dcim/forms/object_create.py
 %%DATADIR%%/dcim/forms/object_import.py
@@ -193,6 +205,15 @@
 %%DATADIR%%/dcim/migrations/0189_moduletype_rack_airflow.py
 %%DATADIR%%/dcim/migrations/0190_nested_modules.py
 %%DATADIR%%/dcim/migrations/0191_module_bay_rebuild.py
+%%DATADIR%%/dcim/migrations/0192_inventoryitem_status.py
+%%DATADIR%%/dcim/migrations/0193_poweroutlet_color.py
+%%DATADIR%%/dcim/migrations/0194_charfield_null_choices.py
+%%DATADIR%%/dcim/migrations/0195_interface_vlan_translation_policy.py
+%%DATADIR%%/dcim/migrations/0196_qinq_svlan.py
+%%DATADIR%%/dcim/migrations/0197_natural_sort_collation.py
+%%DATADIR%%/dcim/migrations/0198_natural_ordering.py
+%%DATADIR%%/dcim/migrations/0199_macaddress.py
+%%DATADIR%%/dcim/migrations/0200_populate_mac_addresses.py
 %%DATADIR%%/dcim/migrations/__init__.py
 %%DATADIR%%/dcim/models/__init__.py
 %%DATADIR%%/dcim/models/cables.py
@@ -355,6 +376,9 @@
 %%DATADIR%%/docs/models/circuits/provider.md
 %%DATADIR%%/docs/models/circuits/provideraccount.md
 %%DATADIR%%/docs/models/circuits/providernetwork.md
+%%DATADIR%%/docs/models/circuits/virtualcircuit.md
+%%DATADIR%%/docs/models/circuits/virtualcircuittermination.md
+%%DATADIR%%/docs/models/circuits/virtualcircuittype.md
 %%DATADIR%%/docs/models/core/datafile.md
 %%DATADIR%%/docs/models/core/datasource.md
 %%DATADIR%%/docs/models/core/job.md
@@ -376,6 +400,7 @@
 %%DATADIR%%/docs/models/dcim/inventoryitemrole.md
 %%DATADIR%%/docs/models/dcim/inventoryitemtemplate.md
 %%DATADIR%%/docs/models/dcim/location.md
+%%DATADIR%%/docs/models/dcim/macaddress.md
 %%DATADIR%%/docs/models/dcim/manufacturer.md
 %%DATADIR%%/docs/models/dcim/module.md
 %%DATADIR%%/docs/models/dcim/modulebay.md
@@ -432,6 +457,8 @@
 %%DATADIR%%/docs/models/ipam/servicetemplate.md
 %%DATADIR%%/docs/models/ipam/vlan.md
 %%DATADIR%%/docs/models/ipam/vlangroup.md
+%%DATADIR%%/docs/models/ipam/vlantranslationpolicy.md
+%%DATADIR%%/docs/models/ipam/vlantranslationrule.md
 %%DATADIR%%/docs/models/ipam/vrf.md
 %%DATADIR%%/docs/models/tenancy/contact.md
 %%DATADIR%%/docs/models/tenancy/contactgroup.md
@@ -506,11 +533,11 @@
 %%DATADIR%%/docs/release-notes/version-3.7.md
 %%DATADIR%%/docs/release-notes/version-4.0.md
 %%DATADIR%%/docs/release-notes/version-4.1.md
+%%DATADIR%%/docs/release-notes/version-4.2.md
 %%DATADIR%%/extras/__init__.py
 %%DATADIR%%/extras/api/__init__.py
 %%DATADIR%%/extras/api/customfields.py
 %%DATADIR%%/extras/api/mixins.py
-%%DATADIR%%/extras/api/nested_serializers.py
 %%DATADIR%%/extras/api/serializers.py
 %%DATADIR%%/extras/api/serializers_/__init__.py
 %%DATADIR%%/extras/api/serializers_/attachments.py
@@ -595,6 +622,7 @@
 %%DATADIR%%/extras/migrations/0119_notifications.py
 %%DATADIR%%/extras/migrations/0120_eventrule_event_types.py
 %%DATADIR%%/extras/migrations/0121_customfield_related_object_filter.py
+%%DATADIR%%/extras/migrations/0122_charfield_null_choices.py
 %%DATADIR%%/extras/migrations/__init__.py
 %%DATADIR%%/extras/models/__init__.py
 %%DATADIR%%/extras/models/configs.py
@@ -641,7 +669,6 @@
 %%DATADIR%%/ipam/__init__.py
 %%DATADIR%%/ipam/api/__init__.py
 %%DATADIR%%/ipam/api/field_serializers.py
-%%DATADIR%%/ipam/api/nested_serializers.py
 %%DATADIR%%/ipam/api/serializers.py
 %%DATADIR%%/ipam/api/serializers_/__init__.py
 %%DATADIR%%/ipam/api/serializers_/asns.py
@@ -683,6 +710,12 @@
 %%DATADIR%%/ipam/migrations/0068_move_l2vpn.py
 %%DATADIR%%/ipam/migrations/0069_gfk_indexes.py
 %%DATADIR%%/ipam/migrations/0070_vlangroup_vlan_id_ranges.py
+%%DATADIR%%/ipam/migrations/0071_prefix_scope.py
+%%DATADIR%%/ipam/migrations/0072_prefix_cached_relations.py
+%%DATADIR%%/ipam/migrations/0073_charfield_null_choices.py
+%%DATADIR%%/ipam/migrations/0074_vlantranslationpolicy_vlantranslationrule.py
+%%DATADIR%%/ipam/migrations/0075_vlan_qinq.py
+%%DATADIR%%/ipam/migrations/0076_natural_ordering.py
 %%DATADIR%%/ipam/migrations/__init__.py
 %%DATADIR%%/ipam/models/__init__.py
 %%DATADIR%%/ipam/models/asns.py
@@ -699,6 +732,7 @@
 %%DATADIR%%/ipam/tables/fhrp.py
 %%DATADIR%%/ipam/tables/ip.py
 %%DATADIR%%/ipam/tables/services.py
+%%DATADIR%%/ipam/tables/template_code.py
 %%DATADIR%%/ipam/tables/vlans.py
 %%DATADIR%%/ipam/tables/vrfs.py
 %%DATADIR%%/ipam/tests/__init__.py
@@ -716,7 +750,6 @@
 %%DATADIR%%/media/image-attachments/.gitignore
 %%DATADIR%%/mkdocs.yml
 %%DATADIR%%/netbox/__init__.py
-%%DATADIR%%/netbox/admin.py
 %%DATADIR%%/netbox/api/__init__.py
 %%DATADIR%%/netbox/api/authentication.py
 %%DATADIR%%/netbox/api/exceptions.py
@@ -763,6 +796,7 @@
 %%DATADIR%%/netbox/middleware.py
 %%DATADIR%%/netbox/models/__init__.py
 %%DATADIR%%/netbox/models/features.py
+%%DATADIR%%/netbox/models/mixins.py
 %%DATADIR%%/netbox/navigation/__init__.py
 %%DATADIR%%/netbox/navigation/menu.py
 %%DATADIR%%/netbox/plugins/__init__.py
@@ -786,12 +820,13 @@
 %%DATADIR%%/netbox/tables/template_code.py
 %%DATADIR%%/netbox/tests/__init__.py
 %%DATADIR%%/netbox/tests/dummy_plugin/__init__.py
-%%DATADIR%%/netbox/tests/dummy_plugin/admin.py
 %%DATADIR%%/netbox/tests/dummy_plugin/api/serializers.py
 %%DATADIR%%/netbox/tests/dummy_plugin/api/urls.py
 %%DATADIR%%/netbox/tests/dummy_plugin/api/views.py
 %%DATADIR%%/netbox/tests/dummy_plugin/data_backends.py
+%%DATADIR%%/netbox/tests/dummy_plugin/events.py
 %%DATADIR%%/netbox/tests/dummy_plugin/graphql.py
+%%DATADIR%%/netbox/tests/dummy_plugin/jobs.py
 %%DATADIR%%/netbox/tests/dummy_plugin/middleware.py
 %%DATADIR%%/netbox/tests/dummy_plugin/migrations/0001_initial.py
 %%DATADIR%%/netbox/tests/dummy_plugin/migrations/__init__.py
@@ -955,6 +990,7 @@
 %%DATADIR%%/project-static/src/messages.ts
 %%DATADIR%%/project-static/src/netbox.ts
 %%DATADIR%%/project-static/src/objectSelector.ts
+%%DATADIR%%/project-static/src/quickAdd.ts
 %%DATADIR%%/project-static/src/racks.ts
 %%DATADIR%%/project-static/src/search.ts
 %%DATADIR%%/project-static/src/select/classes/dynamicParamsMap.ts
@@ -1028,6 +1064,9 @@
 %%DATADIR%%/templates/circuits/provider.html
 %%DATADIR%%/templates/circuits/provideraccount.html
 %%DATADIR%%/templates/circuits/providernetwork.html
+%%DATADIR%%/templates/circuits/virtualcircuit.html
+%%DATADIR%%/templates/circuits/virtualcircuittermination.html
+%%DATADIR%%/templates/circuits/virtualcircuittype.html
 %%DATADIR%%/templates/core/configrevision.html
 %%DATADIR%%/templates/core/configrevision_restore.html
 %%DATADIR%%/templates/core/datafile.html
@@ -1083,7 +1122,6 @@
 %%DATADIR%%/templates/dcim/inc/cable_termination.html
 %%DATADIR%%/templates/dcim/inc/cable_toggle_buttons.html
 %%DATADIR%%/templates/dcim/inc/connection_endpoints.html
-%%DATADIR%%/templates/dcim/inc/devicetype_breadcrumbs.html
 %%DATADIR%%/templates/dcim/inc/endpoint_connection.html
 %%DATADIR%%/templates/dcim/inc/interface_vlans_table.html
 %%DATADIR%%/templates/dcim/inc/moduletype_buttons.html
@@ -1095,6 +1133,7 @@
 %%DATADIR%%/templates/dcim/inventoryitem.html
 %%DATADIR%%/templates/dcim/inventoryitemrole.html
 %%DATADIR%%/templates/dcim/location.html
+%%DATADIR%%/templates/dcim/macaddress.html
 %%DATADIR%%/templates/dcim/manufacturer.html
 %%DATADIR%%/templates/dcim/module.html
 %%DATADIR%%/templates/dcim/modulebay.html
@@ -1202,6 +1241,8 @@
 %%DATADIR%%/templates/htmx/notifications.html
 %%DATADIR%%/templates/htmx/object_selector.html
 %%DATADIR%%/templates/htmx/object_selector_results.html
+%%DATADIR%%/templates/htmx/quick_add.html
+%%DATADIR%%/templates/htmx/quick_add_created.html
 %%DATADIR%%/templates/htmx/table.html
 %%DATADIR%%/templates/inc/alerts/danger.html
 %%DATADIR%%/templates/inc/alerts/info.html
@@ -1260,6 +1301,8 @@
 %%DATADIR%%/templates/ipam/vlan/base.html
 %%DATADIR%%/templates/ipam/vlan_edit.html
 %%DATADIR%%/templates/ipam/vlangroup.html
+%%DATADIR%%/templates/ipam/vlantranslationpolicy.html
+%%DATADIR%%/templates/ipam/vlantranslationrule.html
 %%DATADIR%%/templates/ipam/vrf.html
 %%DATADIR%%/templates/login.html
 %%DATADIR%%/templates/media_failure.html
@@ -1307,7 +1350,6 @@
 %%DATADIR%%/templates/wireless/wirelesslink.html
 %%DATADIR%%/tenancy/__init__.py
 %%DATADIR%%/tenancy/api/__init__.py
-%%DATADIR%%/tenancy/api/nested_serializers.py
 %%DATADIR%%/tenancy/api/serializers.py
 %%DATADIR%%/tenancy/api/serializers_/__init__.py
 %%DATADIR%%/tenancy/api/serializers_/contacts.py
@@ -1335,6 +1377,8 @@
 %%DATADIR%%/tenancy/migrations/0013_gfk_indexes.py
 %%DATADIR%%/tenancy/migrations/0014_contactassignment_ordering.py
 %%DATADIR%%/tenancy/migrations/0015_contactassignment_rename_content_type.py
+%%DATADIR%%/tenancy/migrations/0016_charfield_null_choices.py
+%%DATADIR%%/tenancy/migrations/0017_natural_ordering.py
 %%DATADIR%%/tenancy/migrations/__init__.py
 %%DATADIR%%/tenancy/models/__init__.py
 %%DATADIR%%/tenancy/models/contacts.py
@@ -1343,6 +1387,7 @@
 %%DATADIR%%/tenancy/tables/__init__.py
 %%DATADIR%%/tenancy/tables/columns.py
 %%DATADIR%%/tenancy/tables/contacts.py
+%%DATADIR%%/tenancy/tables/template_code.py
 %%DATADIR%%/tenancy/tables/tenants.py
 %%DATADIR%%/tenancy/tests/__init__.py
 %%DATADIR%%/tenancy/tests/test_api.py
@@ -1381,9 +1426,7 @@
 %%DATADIR%%/translations/zh/LC_MESSAGES/django.mo
 %%DATADIR%%/translations/zh/LC_MESSAGES/django.po
 %%DATADIR%%/users/__init__.py
-%%DATADIR%%/users/admin.py
 %%DATADIR%%/users/api/__init__.py
-%%DATADIR%%/users/api/nested_serializers.py
 %%DATADIR%%/users/api/serializers.py
 %%DATADIR%%/users/api/serializers_/__init__.py
 %%DATADIR%%/users/api/serializers_/nested.py
@@ -1558,7 +1601,6 @@
 %%DATADIR%%/utilities/views.py
 %%DATADIR%%/virtualization/__init__.py
 %%DATADIR%%/virtualization/api/__init__.py
-%%DATADIR%%/virtualization/api/nested_serializers.py
 %%DATADIR%%/virtualization/api/serializers.py
 %%DATADIR%%/virtualization/api/serializers_/__init__.py
 %%DATADIR%%/virtualization/api/serializers_/clusters.py
@@ -1586,6 +1628,14 @@
 %%DATADIR%%/virtualization/migrations/0038_virtualdisk.py
 %%DATADIR%%/virtualization/migrations/0039_virtualmachine_serial_number.py
 %%DATADIR%%/virtualization/migrations/0040_convert_disk_size.py
+%%DATADIR%%/virtualization/migrations/0041_charfield_null_choices.py
+%%DATADIR%%/virtualization/migrations/0042_vminterface_vlan_translation_policy.py
+%%DATADIR%%/virtualization/migrations/0043_qinq_svlan.py
+%%DATADIR%%/virtualization/migrations/0044_cluster_scope.py
+%%DATADIR%%/virtualization/migrations/0045_clusters_cached_relations.py
+%%DATADIR%%/virtualization/migrations/0046_alter_cluster__location_alter_cluster__region_and_more.py
+%%DATADIR%%/virtualization/migrations/0047_natural_ordering.py
+%%DATADIR%%/virtualization/migrations/0048_populate_mac_addresses.py
 %%DATADIR%%/virtualization/migrations/__init__.py
 %%DATADIR%%/virtualization/models/__init__.py
 %%DATADIR%%/virtualization/models/clusters.py
@@ -1594,6 +1644,7 @@
 %%DATADIR%%/virtualization/signals.py
 %%DATADIR%%/virtualization/tables/__init__.py
 %%DATADIR%%/virtualization/tables/clusters.py
+%%DATADIR%%/virtualization/tables/template_code.py
 %%DATADIR%%/virtualization/tables/virtualmachines.py
 %%DATADIR%%/virtualization/tests/__init__.py
 %%DATADIR%%/virtualization/tests/test_api.py
@@ -1604,7 +1655,6 @@
 %%DATADIR%%/virtualization/views.py
 %%DATADIR%%/vpn/__init__.py
 %%DATADIR%%/vpn/api/__init__.py
-%%DATADIR%%/vpn/api/nested_serializers.py
 %%DATADIR%%/vpn/api/serializers.py
 %%DATADIR%%/vpn/api/serializers_/__init__.py
 %%DATADIR%%/vpn/api/serializers_/crypto.py
@@ -1630,6 +1680,8 @@
 %%DATADIR%%/vpn/migrations/0003_ipaddress_multiple_tunnel_terminations.py
 %%DATADIR%%/vpn/migrations/0004_alter_ikepolicy_mode.py
 %%DATADIR%%/vpn/migrations/0005_rename_indexes.py
+%%DATADIR%%/vpn/migrations/0006_charfield_null_choices.py
+%%DATADIR%%/vpn/migrations/0007_natural_ordering.py
 %%DATADIR%%/vpn/migrations/__init__.py
 %%DATADIR%%/vpn/models/__init__.py
 %%DATADIR%%/vpn/models/crypto.py
@@ -1649,7 +1701,6 @@
 %%DATADIR%%/vpn/views.py
 %%DATADIR%%/wireless/__init__.py
 %%DATADIR%%/wireless/api/__init__.py
-%%DATADIR%%/wireless/api/nested_serializers.py
 %%DATADIR%%/wireless/api/serializers.py
 %%DATADIR%%/wireless/api/serializers_/__init__.py
 %%DATADIR%%/wireless/api/serializers_/nested.py
@@ -1672,12 +1723,15 @@
 %%DATADIR%%/wireless/graphql/types.py
 %%DATADIR%%/wireless/migrations/0001_squashed_0008.py
 %%DATADIR%%/wireless/migrations/0009_wirelesslink_distance.py
+%%DATADIR%%/wireless/migrations/0010_charfield_null_choices.py
+%%DATADIR%%/wireless/migrations/0011_wirelesslan__location_wirelesslan__region_and_more.py
+%%DATADIR%%/wireless/migrations/0012_alter_wirelesslan__location_and_more.py
+%%DATADIR%%/wireless/migrations/0013_natural_ordering.py
 %%DATADIR%%/wireless/migrations/__init__.py
 %%DATADIR%%/wireless/models.py
 %%DATADIR%%/wireless/search.py
 %%DATADIR%%/wireless/signals.py
 %%DATADIR%%/wireless/tables/__init__.py
-%%DATADIR%%/wireless/tables/template_code.py
 %%DATADIR%%/wireless/tables/wirelesslan.py
 %%DATADIR%%/wireless/tables/wirelesslink.py
 %%DATADIR%%/wireless/tests/__init__.py