git: bbe8e56f6856 - main - net-mgmt/netbox: Update to 3.6.1

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Sun, 10 Sep 2023 13:16:26 UTC
The branch main has been updated by kai:

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

commit bbe8e56f6856f531284f73bf0b30eb52d19e2a39
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2023-09-10 12:49:24 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2023-09-10 13:15:32 +0000

    net-mgmt/netbox: Update to 3.6.1
    
    * Introduce non-default GIT, LDAP and S3 options.
    
    Changelog since 3.5.9
    
    It contains many bugfixes/enhancements and the following new features:
    
    * Relocated Admin UI Views
    * Configurable Default Permissions
    * User Bookmarks
    * Custom Field Choice Sets
    * Pre-Defined Location Choices for Custom Fields
    * Restrict Tag Usage by Object Type
    
    https://netbox.readthedocs.io/en/stable/release-notes/version-3.6/
    MFH:            No (feature release)
---
 net-mgmt/netbox/Makefile             | 74 ++++++++++++++++--------------
 net-mgmt/netbox/distinfo             |  6 +--
 net-mgmt/netbox/files/pkg-message.in | 43 +++++++++++++++++
 net-mgmt/netbox/pkg-plist            | 89 +++++++++++++++++++++++++++---------
 4 files changed, 154 insertions(+), 58 deletions(-)

diff --git a/net-mgmt/netbox/Makefile b/net-mgmt/netbox/Makefile
index 2ae70dded438..c00cb1525012 100644
--- a/net-mgmt/netbox/Makefile
+++ b/net-mgmt/netbox/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	netbox
 DISTVERSIONPREFIX=	v
-DISTVERSION=	3.5.9
-PORTREVISION=	1
+DISTVERSION=	3.6.1
 CATEGORIES=	net-mgmt python
 
 MAINTAINER=	kai@FreeBSD.org
@@ -19,52 +18,49 @@ 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-dj41-django-rq
-# - www/py-dj41-django-filter
-# - www/py-dj41-django-tables2
-# - www/py-dj41-djangorestframework
+# - devel/py-dj42-django-rq
+# - www/py-dj42-django-filter
+# - www/py-dj42-django-tables2
+# - www/py-dj42-djangorestframework
 #
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django41>=4.1.10<4.2:www/py-django41@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-cors-headers>=4.2.0<5:www/py-dj41-django-cors-headers@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-debug-toolbar>=4.1.0<5:www/py-dj41-django-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-filter>=23.2<24:www/py-dj41-django-filter@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-graphiql-debug-toolbar>=0.2.0<1:www/py-dj41-django-graphiql-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-mptt>=0.14.0<0.15:www/py-dj41-django-mptt@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-prometheus>=2.3.1<2.4:www/py-dj41-django-prometheus@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-redis>=5.3.0<6:www/py-dj41-django-redis@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-rich>=1.7.0<2:www/py-dj41-django-rich@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-rq>=2.8.1<2.9:devel/py-dj41-django-rq@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-tables2>=2.6<2.7:www/py-dj41-django-tables2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-taggit>=4.0.0<5:www/py-dj41-django-taggit@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-django-timezone-field>=5.1<6:www/py-dj41-django-timezone-field@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-djangorestframework>=3.14.0<3.15.0:www/py-dj41-djangorestframework@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-drf-spectacular>=0.26.4<1:www/py-dj41-drf-spectacular@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-drf-spectacular-sidecar>=2023.8.1:www/py-dj41-drf-spectacular-sidecar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj41-graphene-django>=3.0.0,1<3.0.0_99,1:devel/py-dj41-graphene-django@${PY_FLAVOR} \
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django42>=4.2.5<4.3:www/py-django42@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-cors-headers>=4.2.0<5:www/py-dj42-django-cors-headers@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-debug-toolbar>=4.2.0<5:www/py-dj42-django-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-filter>=23.2<24:www/py-dj42-django-filter@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-graphiql-debug-toolbar>=0.2.0<1:www/py-dj42-django-graphiql-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-mptt>=0.14.0<0.15:www/py-dj42-django-mptt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-prometheus>=2.3.1<2.4:www/py-dj42-django-prometheus@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-redis>=5.3.0<6:www/py-dj42-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-rich>=1.7.0<2:www/py-dj42-django-rich@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-rq>=2.8.1<2.9:devel/py-dj42-django-rq@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-tables2>=2.6<2.7:www/py-dj42-django-tables2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-taggit>=4.0.0<5:www/py-dj42-django-taggit@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-django-timezone-field>=6.0<7:www/py-dj42-django-timezone-field@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-djangorestframework>=3.14.0<3.15.0:www/py-dj42-djangorestframework@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-drf-spectacular>=0.26.4<1:www/py-dj42-drf-spectacular@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-drf-spectacular-sidecar>=2023.9.1:www/py-dj42-drf-spectacular-sidecar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj42-graphene-django>=3.0.0<3.0.0_99:devel/py-dj42-graphene-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}django-pglocks>=1.0.4<1.1:www/py-django-pglocks@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}bleach>=5.0.1<7:www/py-bleach@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}boto3>=1.26.145<2:www/py-boto3@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dulwich>=0.21.2<1:devel/py-dulwich@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}bleach>=6.0.0<7:www/py-bleach@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}feedparser>=6.0.8<7:textproc/py-feedparser@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.2<4:devel/py-Jinja2@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.7<3.4:textproc/py-markdown@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}markdown-include>=0.7.0<1:textproc/py-markdown-include@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.1.21<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.22.0<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=9.2.7<10:textproc/py-mkdocs-material@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.23.0<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings-python-legacy>0:textproc/py-mkdocstrings-python-legacy@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}netaddr>=0.8.0<1:net/py-netaddr@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}pillow>=9.5.0:graphics/py-pillow@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.6<3:databases/py-psycopg2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pillow>=10.0.0:graphics/py-pillow@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg>=3.1.10<4:databases/py-psycopg@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}sentry-sdk>=1.21.1<2:devel/py-sentry-sdk@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.2.0<6:www/py-social-auth-app-django@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.3.0<6:www/py-social-auth-app-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.4.2<5:security/py-social-auth-core@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}svgwrite>=1.4.3<2:graphics/py-svgwrite@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tablib>=3.5.0<4:textproc/py-tablib@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tzdata>=2023.3:devel/py-tzdata@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}yaml>=6.0<7:devel/py-yaml@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}gunicorn>=20.1.0<22:www/py-gunicorn@${PY_FLAVOR}
+		${PYTHON_PKGNAMEPREFIX}gunicorn>=21.2.0<22:www/py-gunicorn@${PY_FLAVOR}
 
-USES=		cpe pgsql:11+ python
+USES=		cpe pgsql:12+ python
 CPE_VENDOR=	netbox_project
 USE_GITHUB=	yes
 GH_ACCOUNT=	netbox-community
@@ -75,6 +71,16 @@ NO_BUILD=	yes
 NO_ARCH=	yes
 
 OPTIONS_DEFINE=	EXAMPLES
+OPTIONS_GROUP=	BACKENDS
+OPTIONS_GROUP_BACKENDS=	GIT LDAP S3
+
+GIT_DESC=	Git backend support
+LDAP_DESC=	LDAP backend support
+S3_DESC=	Amazon S3 backend support
+
+GIT_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dulwich>0:devel/py-dulwich@${PY_FLAVOR}
+LDAP_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj42-django-auth-ldap>0:www/py-dj42-django-auth-ldap
+S3_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}boto3>0:www/py-boto3@${PY_FLAVOR}
 
 do-install:
 	cd ${WRKSRC}/netbox ; \
diff --git a/net-mgmt/netbox/distinfo b/net-mgmt/netbox/distinfo
index 4cbba28d3f38..717de0ec4401 100644
--- a/net-mgmt/netbox/distinfo
+++ b/net-mgmt/netbox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1693289458
-SHA256 (netbox-community-netbox-v3.5.9_GH0.tar.gz) = 98d9dd0dd7e44bc1ce95bc7758eb2c624a444f92516d63f6800bd897ba09a793
-SIZE (netbox-community-netbox-v3.5.9_GH0.tar.gz) = 5790742
+TIMESTAMP = 1694248193
+SHA256 (netbox-community-netbox-v3.6.1_GH0.tar.gz) = 7614307e8257a8f53f6c001470e123e74b816cba0031c80b5b01c2d13ab051be
+SIZE (netbox-community-netbox-v3.6.1_GH0.tar.gz) = 7267993
diff --git a/net-mgmt/netbox/files/pkg-message.in b/net-mgmt/netbox/files/pkg-message.in
index 2ae5d8a55343..21ef608f2c4e 100644
--- a/net-mgmt/netbox/files/pkg-message.in
+++ b/net-mgmt/netbox/files/pkg-message.in
@@ -392,4 +392,47 @@ been adjusted accordingly.  This also includes a fix for the default path of
 the configuration if the rc variable "netbox_config" is not set.
 EOD
 }
+{ type: upgrade
+  maximum_version: 3.6.1
+  message: <<EOD
+1. The NetBox 3.6 release contains some breaking changes, so the following
+   items should be checked before upgrading:
+
+   * PostgreSQL 11 is no longer supported (dropped in Django 4.2). NetBox v3.6
+     requires PostgreSQL 12 or later.
+
+   * The "device_role" field on the Device model has been renamed to "role".
+     The "device_role" field has been temporarily retained on the REST API
+     serializer for devices for backward compatibility, but is read-only.
+
+   * The "choices" array field has been removed from the CustomField model.
+     Any defined choices are automatically migrated to CustomFieldChoiceSets,
+     accessible via the new "choice_set" field on the CustomField model.
+
+   * The "napalm_driver" and "napalm_args" fields (which were deprecated in v3.5)
+     have been removed from the Platform model.
+
+   * The "device" and "device_id" filter for interfaces will no longer include
+     interfaces from virtual chassis peers. Two new filters,
+     "virtual_chassis_member" and "virtual_chassis_member_id", have been
+     introduced to match all interfaces belonging to the specified device's
+     virtual chassis (if any).
+
+   * Reports and scripts are now returned within a "results" list when fetched via
+     the REST API, consistent with other models.
+
+   * Superusers can no longer retrieve API token keys via the web UI if
+     ALLOW_TOKEN_RETRIEVAL is disabled. (The admin view has been removed
+     per #13044.)
+
+2. The following dependencies are now optional and have therefore been moved to
+   corresponding options. An exception is the LDAP option, which has been added
+   for the sake of completeness, because this backend has been around for a
+   good while:
+
+   * devel/py-dulwich			-> non-default GIT option
+   * www/py-dj42-django-auth-ldap	-> non-default LDAP option
+   * www/py-boto3			-> non-default S3 option
+EOD
+}
 ]
diff --git a/net-mgmt/netbox/pkg-plist b/net-mgmt/netbox/pkg-plist
index 0e0ece6cbd2b..2854ce44bff3 100644
--- a/net-mgmt/netbox/pkg-plist
+++ b/net-mgmt/netbox/pkg-plist
@@ -4,6 +4,13 @@
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/netbox_rq.sample
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/netboxrc.sample
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/nginx.conf
+%%DATADIR%%/account/__init__.py
+%%DATADIR%%/account/migrations/0001_initial.py
+%%DATADIR%%/account/migrations/__init__.py
+%%DATADIR%%/account/models.py
+%%DATADIR%%/account/tables.py
+%%DATADIR%%/account/urls.py
+%%DATADIR%%/account/views.py
 %%DATADIR%%/circuits/__init__.py
 %%DATADIR%%/circuits/api/__init__.py
 %%DATADIR%%/circuits/api/nested_serializers.py
@@ -78,7 +85,6 @@
 %%DATADIR%%/core/management/commands/__init__.py
 %%DATADIR%%/core/management/commands/clearcache.py
 %%DATADIR%%/core/management/commands/makemigrations.py
-%%DATADIR%%/core/management/commands/migrate.py
 %%DATADIR%%/core/management/commands/nbshell.py
 %%DATADIR%%/core/management/commands/rqworker.py
 %%DATADIR%%/core/management/commands/syncdatasource.py
@@ -181,6 +187,16 @@
 %%DATADIR%%/dcim/migrations/0170_configtemplate.py
 %%DATADIR%%/dcim/migrations/0171_cabletermination_change_logging.py
 %%DATADIR%%/dcim/migrations/0172_larger_power_draw_values.py
+%%DATADIR%%/dcim/migrations/0173_remove_napalm_fields.py
+%%DATADIR%%/dcim/migrations/0174_device_latitude_device_longitude.py
+%%DATADIR%%/dcim/migrations/0174_rack_starting_unit.py
+%%DATADIR%%/dcim/migrations/0175_device_oob_ip.py
+%%DATADIR%%/dcim/migrations/0176_device_component_counters.py
+%%DATADIR%%/dcim/migrations/0177_devicetype_component_counters.py
+%%DATADIR%%/dcim/migrations/0178_virtual_chassis_member_counter.py
+%%DATADIR%%/dcim/migrations/0179_interfacetemplate_rf_role.py
+%%DATADIR%%/dcim/migrations/0180_powerfeed_tenant.py
+%%DATADIR%%/dcim/migrations/0181_rename_device_role_device_role.py
 %%DATADIR%%/dcim/migrations/__init__.py
 %%DATADIR%%/dcim/models/__init__.py
 %%DATADIR%%/dcim/models/cables.py
@@ -250,6 +266,7 @@
 %%DATADIR%%/docs/development/getting-started.md
 %%DATADIR%%/docs/development/git-cheat-sheet.md
 %%DATADIR%%/docs/development/index.md
+%%DATADIR%%/docs/development/internationalization.md
 %%DATADIR%%/docs/development/models.md
 %%DATADIR%%/docs/development/release-checklist.md
 %%DATADIR%%/docs/development/search.md
@@ -296,7 +313,6 @@
 %%DATADIR%%/docs/integrations/synchronized-data.md
 %%DATADIR%%/docs/integrations/webhooks.md
 %%DATADIR%%/docs/introduction.md
-%%DATADIR%%/docs/media/admin_ui_grant_permission.png
 %%DATADIR%%/docs/media/admin_ui_run_permission.png
 %%DATADIR%%/docs/media/authentication/azure_ad_add_app_registration.png
 %%DATADIR%%/docs/media/authentication/azure_ad_add_client_secret.png
@@ -374,10 +390,12 @@
 %%DATADIR%%/docs/models/dcim/sitegroup.md
 %%DATADIR%%/docs/models/dcim/virtualchassis.md
 %%DATADIR%%/docs/models/dcim/virtualdevicecontext.md
+%%DATADIR%%/docs/models/extras/bookmark.md
 %%DATADIR%%/docs/models/extras/branch.md
 %%DATADIR%%/docs/models/extras/configcontext.md
 %%DATADIR%%/docs/models/extras/configtemplate.md
 %%DATADIR%%/docs/models/extras/customfield.md
+%%DATADIR%%/docs/models/extras/customfieldchoiceset.md
 %%DATADIR%%/docs/models/extras/customlink.md
 %%DATADIR%%/docs/models/extras/exporttemplate.md
 %%DATADIR%%/docs/models/extras/imageattachment.md
@@ -457,6 +475,7 @@
 %%DATADIR%%/docs/release-notes/version-3.3.md
 %%DATADIR%%/docs/release-notes/version-3.4.md
 %%DATADIR%%/docs/release-notes/version-3.5.md
+%%DATADIR%%/docs/release-notes/version-3.6.md
 %%DATADIR%%/extras/__init__.py
 %%DATADIR%%/extras/admin.py
 %%DATADIR%%/extras/api/__init__.py
@@ -475,13 +494,16 @@
 %%DATADIR%%/extras/dashboard/forms.py
 %%DATADIR%%/extras/dashboard/utils.py
 %%DATADIR%%/extras/dashboard/widgets.py
+%%DATADIR%%/extras/data/__init__.py
+%%DATADIR%%/extras/data/iata.py
+%%DATADIR%%/extras/data/iso_3166.py
+%%DATADIR%%/extras/data/un_locode.py
 %%DATADIR%%/extras/fields.py
 %%DATADIR%%/extras/filters.py
 %%DATADIR%%/extras/filtersets.py
 %%DATADIR%%/extras/forms/__init__.py
 %%DATADIR%%/extras/forms/bulk_edit.py
 %%DATADIR%%/extras/forms/bulk_import.py
-%%DATADIR%%/extras/forms/config.py
 %%DATADIR%%/extras/forms/filtersets.py
 %%DATADIR%%/extras/forms/misc.py
 %%DATADIR%%/extras/forms/mixins.py
@@ -536,6 +558,12 @@
 %%DATADIR%%/extras/migrations/0090_objectchange_index_request_id.py
 %%DATADIR%%/extras/migrations/0091_create_managedfiles.py
 %%DATADIR%%/extras/migrations/0092_delete_jobresult.py
+%%DATADIR%%/extras/migrations/0093_configrevision_ordering.py
+%%DATADIR%%/extras/migrations/0094_tag_object_types.py
+%%DATADIR%%/extras/migrations/0095_bookmarks.py
+%%DATADIR%%/extras/migrations/0096_customfieldchoiceset.py
+%%DATADIR%%/extras/migrations/0097_customfield_remove_choices.py
+%%DATADIR%%/extras/migrations/0098_webhook_custom_field_data_webhook_tags.py
 %%DATADIR%%/extras/migrations/__init__.py
 %%DATADIR%%/extras/models/__init__.py
 %%DATADIR%%/extras/models/change_logging.py
@@ -657,6 +685,7 @@
 %%DATADIR%%/ipam/migrations/0064_clear_search_cache.py
 %%DATADIR%%/ipam/migrations/0065_asnrange.py
 %%DATADIR%%/ipam/migrations/0066_iprange_mark_utilized.py
+%%DATADIR%%/ipam/migrations/0067_ipaddress_index_host.py
 %%DATADIR%%/ipam/migrations/__init__.py
 %%DATADIR%%/ipam/models/__init__.py
 %%DATADIR%%/ipam/models/asns.py
@@ -876,7 +905,13 @@
 %%DATADIR%%/templates/403.html
 %%DATADIR%%/templates/404.html
 %%DATADIR%%/templates/500.html
-%%DATADIR%%/templates/admin/extras/configrevision/restore.html
+%%DATADIR%%/templates/account/base.html
+%%DATADIR%%/templates/account/bookmarks.html
+%%DATADIR%%/templates/account/password.html
+%%DATADIR%%/templates/account/preferences.html
+%%DATADIR%%/templates/account/profile.html
+%%DATADIR%%/templates/account/token.html
+%%DATADIR%%/templates/account/token_list.html
 %%DATADIR%%/templates/admin/index.html
 %%DATADIR%%/templates/base/40x.html
 %%DATADIR%%/templates/base/base.html
@@ -899,11 +934,10 @@
 %%DATADIR%%/templates/dcim/cable_edit.html
 %%DATADIR%%/templates/dcim/cable_trace.html
 %%DATADIR%%/templates/dcim/component_create.html
+%%DATADIR%%/templates/dcim/component_list.html
 %%DATADIR%%/templates/dcim/connections_list.html
 %%DATADIR%%/templates/dcim/consoleport.html
-%%DATADIR%%/templates/dcim/consoleport_delete.html
 %%DATADIR%%/templates/dcim/consoleserverport.html
-%%DATADIR%%/templates/dcim/consoleserverport_delete.html
 %%DATADIR%%/templates/dcim/device.html
 %%DATADIR%%/templates/dcim/device/base.html
 %%DATADIR%%/templates/dcim/device/components_base.html
@@ -938,10 +972,8 @@
 %%DATADIR%%/templates/dcim/inc/panels/inventory_items.html
 %%DATADIR%%/templates/dcim/inc/rack_elevation.html
 %%DATADIR%%/templates/dcim/interface.html
-%%DATADIR%%/templates/dcim/interface_delete.html
 %%DATADIR%%/templates/dcim/inventoryitem.html
 %%DATADIR%%/templates/dcim/inventoryitem_bulk_delete.html
-%%DATADIR%%/templates/dcim/inventoryitem_delete.html
 %%DATADIR%%/templates/dcim/inventoryitem_edit.html
 %%DATADIR%%/templates/dcim/inventoryitemrole.html
 %%DATADIR%%/templates/dcim/location.html
@@ -954,10 +986,8 @@
 %%DATADIR%%/templates/dcim/platform.html
 %%DATADIR%%/templates/dcim/powerfeed.html
 %%DATADIR%%/templates/dcim/poweroutlet.html
-%%DATADIR%%/templates/dcim/poweroutlet_delete.html
 %%DATADIR%%/templates/dcim/powerpanel.html
 %%DATADIR%%/templates/dcim/powerport.html
-%%DATADIR%%/templates/dcim/powerport_delete.html
 %%DATADIR%%/templates/dcim/rack.html
 %%DATADIR%%/templates/dcim/rack/base.html
 %%DATADIR%%/templates/dcim/rack/non_racked_devices.html
@@ -990,14 +1020,18 @@
 %%DATADIR%%/templates/extras/admin/plugins_list.html
 %%DATADIR%%/templates/extras/configcontext.html
 %%DATADIR%%/templates/extras/configcontext_list.html
+%%DATADIR%%/templates/extras/configrevision.html
+%%DATADIR%%/templates/extras/configrevision_restore.html
 %%DATADIR%%/templates/extras/configtemplate.html
 %%DATADIR%%/templates/extras/configtemplate_list.html
 %%DATADIR%%/templates/extras/customfield.html
+%%DATADIR%%/templates/extras/customfieldchoiceset.html
 %%DATADIR%%/templates/extras/customlink.html
 %%DATADIR%%/templates/extras/dashboard/reset.html
 %%DATADIR%%/templates/extras/dashboard/widget.html
 %%DATADIR%%/templates/extras/dashboard/widget_add.html
 %%DATADIR%%/templates/extras/dashboard/widget_config.html
+%%DATADIR%%/templates/extras/dashboard/widgets/bookmarks.html
 %%DATADIR%%/templates/extras/dashboard/widgets/objectcounts.html
 %%DATADIR%%/templates/extras/dashboard/widgets/objectlist.html
 %%DATADIR%%/templates/extras/dashboard/widgets/rssfeed.html
@@ -1121,12 +1155,10 @@
 %%DATADIR%%/templates/tenancy/object_contacts.html
 %%DATADIR%%/templates/tenancy/tenant.html
 %%DATADIR%%/templates/tenancy/tenantgroup.html
-%%DATADIR%%/templates/users/api_token.html
-%%DATADIR%%/templates/users/api_tokens.html
-%%DATADIR%%/templates/users/base.html
-%%DATADIR%%/templates/users/password.html
-%%DATADIR%%/templates/users/preferences.html
-%%DATADIR%%/templates/users/profile.html
+%%DATADIR%%/templates/users/group.html
+%%DATADIR%%/templates/users/objectpermission.html
+%%DATADIR%%/templates/users/token.html
+%%DATADIR%%/templates/users/user.html
 %%DATADIR%%/templates/virtualization/cluster.html
 %%DATADIR%%/templates/virtualization/cluster/base.html
 %%DATADIR%%/templates/virtualization/cluster/devices.html
@@ -1136,6 +1168,7 @@
 %%DATADIR%%/templates/virtualization/virtualmachine.html
 %%DATADIR%%/templates/virtualization/virtualmachine/base.html
 %%DATADIR%%/templates/virtualization/virtualmachine/interfaces.html
+%%DATADIR%%/templates/virtualization/virtualmachine/render_config.html
 %%DATADIR%%/templates/virtualization/virtualmachine_list.html
 %%DATADIR%%/templates/virtualization/vminterface.html
 %%DATADIR%%/templates/wireless/inc/authentication_attrs.html
@@ -1171,6 +1204,7 @@
 %%DATADIR%%/tenancy/migrations/0008_unique_constraints.py
 %%DATADIR%%/tenancy/migrations/0009_standardize_description_comments.py
 %%DATADIR%%/tenancy/migrations/0010_tenant_relax_uniqueness.py
+%%DATADIR%%/tenancy/migrations/0011_contactassignment_tags.py
 %%DATADIR%%/tenancy/migrations/__init__.py
 %%DATADIR%%/tenancy/models/__init__.py
 %%DATADIR%%/tenancy/models/contacts.py
@@ -1187,10 +1221,7 @@
 %%DATADIR%%/tenancy/urls.py
 %%DATADIR%%/tenancy/views.py
 %%DATADIR%%/users/__init__.py
-%%DATADIR%%/users/admin/__init__.py
-%%DATADIR%%/users/admin/filters.py
-%%DATADIR%%/users/admin/forms.py
-%%DATADIR%%/users/admin/inlines.py
+%%DATADIR%%/users/admin.py
 %%DATADIR%%/users/api/__init__.py
 %%DATADIR%%/users/api/nested_serializers.py
 %%DATADIR%%/users/api/serializers.py
@@ -1199,13 +1230,19 @@
 %%DATADIR%%/users/apps.py
 %%DATADIR%%/users/constants.py
 %%DATADIR%%/users/filtersets.py
-%%DATADIR%%/users/forms.py
+%%DATADIR%%/users/forms/__init__.py
+%%DATADIR%%/users/forms/authentication.py
+%%DATADIR%%/users/forms/bulk_edit.py
+%%DATADIR%%/users/forms/bulk_import.py
+%%DATADIR%%/users/forms/filtersets.py
+%%DATADIR%%/users/forms/model_forms.py
 %%DATADIR%%/users/graphql/__init__.py
 %%DATADIR%%/users/graphql/schema.py
 %%DATADIR%%/users/graphql/types.py
 %%DATADIR%%/users/migrations/0001_squashed_0011.py
 %%DATADIR%%/users/migrations/0002_standardize_id_fields.py
 %%DATADIR%%/users/migrations/0003_token_allowed_ips_last_used.py
+%%DATADIR%%/users/migrations/0004_netboxgroup_netboxuser.py
 %%DATADIR%%/users/migrations/__init__.py
 %%DATADIR%%/users/models.py
 %%DATADIR%%/users/preferences.py
@@ -1216,6 +1253,7 @@
 %%DATADIR%%/users/tests/test_filtersets.py
 %%DATADIR%%/users/tests/test_models.py
 %%DATADIR%%/users/tests/test_preferences.py
+%%DATADIR%%/users/tests/test_views.py
 %%DATADIR%%/users/urls.py
 %%DATADIR%%/users/utils.py
 %%DATADIR%%/users/views.py
@@ -1223,6 +1261,7 @@
 %%DATADIR%%/utilities/api.py
 %%DATADIR%%/utilities/choices.py
 %%DATADIR%%/utilities/constants.py
+%%DATADIR%%/utilities/counters.py
 %%DATADIR%%/utilities/error_handlers.py
 %%DATADIR%%/utilities/exceptions.py
 %%DATADIR%%/utilities/fields.py
@@ -1250,6 +1289,9 @@
 %%DATADIR%%/utilities/htmx.py
 %%DATADIR%%/utilities/jinja2.py
 %%DATADIR%%/utilities/json.py
+%%DATADIR%%/utilities/management/__init__.py
+%%DATADIR%%/utilities/management/commands/__init__.py
+%%DATADIR%%/utilities/management/commands/calculate_cached_counts.py
 %%DATADIR%%/utilities/markdown.py
 %%DATADIR%%/utilities/migration.py
 %%DATADIR%%/utilities/mptt.py
@@ -1269,6 +1311,7 @@
 %%DATADIR%%/utilities/templates/builtins/htmx_table.html
 %%DATADIR%%/utilities/templates/builtins/tag.html
 %%DATADIR%%/utilities/templates/buttons/add.html
+%%DATADIR%%/utilities/templates/buttons/bookmark.html
 %%DATADIR%%/utilities/templates/buttons/bulk_delete.html
 %%DATADIR%%/utilities/templates/buttons/bulk_edit.html
 %%DATADIR%%/utilities/templates/buttons/clone.html
@@ -1313,11 +1356,13 @@
 %%DATADIR%%/utilities/tests/__init__.py
 %%DATADIR%%/utilities/tests/test_api.py
 %%DATADIR%%/utilities/tests/test_choices.py
+%%DATADIR%%/utilities/tests/test_counters.py
 %%DATADIR%%/utilities/tests/test_filters.py
 %%DATADIR%%/utilities/tests/test_forms.py
 %%DATADIR%%/utilities/tests/test_managers.py
 %%DATADIR%%/utilities/tests/test_ordering.py
 %%DATADIR%%/utilities/tests/test_utils.py
+%%DATADIR%%/utilities/tracking.py
 %%DATADIR%%/utilities/urls.py
 %%DATADIR%%/utilities/utils.py
 %%DATADIR%%/utilities/validators.py
@@ -1354,6 +1399,8 @@
 %%DATADIR%%/virtualization/migrations/0032_virtualmachine_update_sites.py
 %%DATADIR%%/virtualization/migrations/0033_unique_constraints.py
 %%DATADIR%%/virtualization/migrations/0034_standardize_description_comments.py
+%%DATADIR%%/virtualization/migrations/0035_virtualmachine_interface_count.py
+%%DATADIR%%/virtualization/migrations/0036_virtualmachine_config_template.py
 %%DATADIR%%/virtualization/migrations/__init__.py
 %%DATADIR%%/virtualization/models/__init__.py
 %%DATADIR%%/virtualization/models/clusters.py