git: d96a960530f3 - main - net-mgmt/netbox: Update to 3.2.4

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Thu, 16 Jun 2022 16:30:30 UTC
The branch main has been updated by kai:

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

commit d96a960530f3c20a9edd7837583ff7bec092566f
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2022-06-16 16:03:50 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2022-06-16 16:28:34 +0000

    net-mgmt/netbox: Update to 3.2.4
    
    * Prune obsolete update instructions/notes for NetBox releases older
      than 2.9.
    
    * Remove the DOCS option as the embedded documentation for NetBox now
      needs to be built locally because the necessary procedure requires a
      running instance of NetBox.
    
    Changelog since 3.1.11:
    
    It contains many bugfixes/enhancements and the following new features:
    
    * Plugins Framework Extensions
    * Modules & Module Types
    * Custom Object Fields
    * Custom Status Choices
    * Improved User Preferences
    * Inventory Item Roles
    * Inventory Item Templates
    * Service Templates
    * Automatic Provisioning of Next Available VLANs
    
    https://netbox.readthedocs.io/en/stable/release-notes/version-3.2/
    
    MFH:            No (feature release)
---
 net-mgmt/netbox/Makefile               |  80 ++--
 net-mgmt/netbox/distinfo               |   6 +-
 net-mgmt/netbox/files/patch-mkdocs.yml |  17 +
 net-mgmt/netbox/files/pkg-message.in   | 188 ++++-----
 net-mgmt/netbox/pkg-plist              | 709 +++++++++++++++------------------
 5 files changed, 448 insertions(+), 552 deletions(-)

diff --git a/net-mgmt/netbox/Makefile b/net-mgmt/netbox/Makefile
index b0e513535b8c..8a2d45c33a81 100644
--- a/net-mgmt/netbox/Makefile
+++ b/net-mgmt/netbox/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	netbox
 DISTVERSIONPREFIX=	v
-DISTVERSION=	3.1.11
+DISTVERSION=	3.2.4
 CATEGORIES=	net-mgmt python
 
 MAINTAINER=	kai@FreeBSD.org
@@ -17,55 +17,55 @@ 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-dj32-django-rq
-# - www/py-dj32-django-filter
-# - www/py-dj32-django-tables2
-# - www/py-dj32-djangorestframework (in conjunction with www/py-dj32-drf-yasg)
+# - devel/py-dj40-django-rq
+# - www/py-dj40-django-filter
+# - www/py-dj40-django-tables2
+# - www/py-dj40-djangorestframework (in conjunction with www/py-dj40-drf-yasg)
 #
-BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}markdown-include>=0.6.0<1:textproc/py-markdown-include@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=8.2.7<9:textproc/py-mkdocs-material@${PY_FLAVOR}
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django32>=3.2.11<3.3:www/py-django32@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-cors-headers>=3.11.0<4:www/py-dj32-django-cors-headers@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-debug-toolbar>=3.2.4<4:www/py-dj32-django-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-filter>=21.1<22:www/py-dj32-django-filter@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-graphiql-debug-toolbar>=0.2.0<1:www/py-dj32-django-graphiql-debug-toolbar@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-mptt>=0.13.4<0.14:www/py-dj32-django-mptt@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-prometheus>=2.1.0<2.3:www/py-dj32-django-prometheus@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-redis>=5.2.0<6:www/py-dj32-django-redis@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-rq>=2.5.1<2.6:devel/py-dj32-django-rq@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-tables2>=2.4.1<2.5:www/py-dj32-django-tables2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-taggit>=2.1.0<3:www/py-dj32-django-taggit@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-django-timezone-field>=5.0<6:www/py-dj32-django-timezone-field@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-djangorestframework>=3.12.4<3.13.0:www/py-dj32-djangorestframework@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-drf-yasg>=1.20.0<1.21:www/py-dj32-drf-yasg@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj32-graphene-django>=2.15.0<3:devel/py-dj32-graphene-django@${PY_FLAVOR} \
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django40>=4.0.4<4.1:www/py-django40@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-cors-headers>=3.12.0<4:www/py-dj40-django-cors-headers@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-debug-toolbar>=3.2.4<4:www/py-dj40-django-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-filter>=21.1<22:www/py-dj40-django-filter@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-graphiql-debug-toolbar>=0.2.0<1:www/py-dj40-django-graphiql-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-mptt>=0.13.4<0.14:www/py-dj40-django-mptt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-prometheus>=2.2.0<2.3:www/py-dj40-django-prometheus@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-redis>=5.2.0<6:www/py-dj40-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-rq>=2.5.1<2.6:devel/py-dj40-django-rq@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-tables2>=2.4.1<2.5:www/py-dj40-django-tables2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-taggit>=2.1.0<3:www/py-dj40-django-taggit@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-timezone-field>=5.0<6:www/py-dj40-django-timezone-field@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-djangorestframework>=3.13.1<3.14.0:www/py-dj40-djangorestframework@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-drf-yasg>=1.20.0<1.21:www/py-dj40-drf-yasg@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-graphene-django>=2.15.0<3:devel/py-dj40-graphene-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}django-pglocks>=1.0.4<1.1:www/py-django-pglocks@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0.1<4:devel/py-Jinja2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.6<3.5:textproc/py-markdown@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.7<3.5:textproc/py-markdown@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}markdown-include>=0.6.0<1:textproc/py-markdown-include@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=8.2.11<9:textproc/py-mkdocs-material@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.17.0<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}netaddr>=0.8.0<1:net/py-netaddr@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}pillow>=8.2.0:graphics/py-pillow@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.2<3:databases/py-psycopg2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pillow>=9.1.1:graphics/py-pillow@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.3<3:databases/py-psycopg2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}sentry-sdk>=1.5.12<2:devel/py-sentry-sdk@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.0.0<6:www/py-social-auth-app-django@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.1.0<5:security/py-social-auth-core@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.2.0<5:security/py-social-auth-core@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}svgwrite>=1.4.2<2:graphics/py-svgwrite@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}tablib>=3.2.0<4:textproc/py-tablib@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}tzdata>=2021.5:devel/py-tzdata@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}tablib>=3.2.1<4:textproc/py-tablib@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}tzdata>=2022.1:devel/py-tzdata@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}yaml>=5.4.1<7:devel/py-yaml@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}gunicorn>=20.1.0<21:www/py-gunicorn@${PY_FLAVOR}
 
-USES=		cpe pgsql:10+ python:3.7+
+USES=		cpe pgsql:10+ python:3.8+
 CPE_VENDOR=	netbox_project
 USE_GITHUB=	yes
 GH_ACCOUNT=	netbox-community
 
 SUB_FILES=	850.netbox-housekeeping.sample netbox_rq.sample netboxrc.sample pkg-message
 SUB_LIST=	DATADIR=${DATADIR} PYTHON_CMD=${PYTHON_CMD} PYTHON_VER=${PYTHON_VER} WWWOWN=${WWWOWN}
+NO_BUILD=	yes
 NO_ARCH=	yes
 
-OPTIONS_DEFINE=	DOCS EXAMPLES
-
-do-build:
-	cd ${WRKSRC} && ${PYTHON_CMD} -m mkdocs build
+OPTIONS_DEFINE=	EXAMPLES
 
 do-install:
 	cd ${WRKSRC}/netbox ; \
@@ -77,18 +77,8 @@ do-install:
 			${INSTALL_DATA} "$$src" "$$dst" ; \
 		fi \
 	done
-
-post-install-DOCS-on:
-	cd ${WRKSRC}/docs ; \
-	${MKDIR} ${STAGEDIR}${DOCSDIR} ; \
-	for src in $$( ${FIND} . ! -name '*.bak' ) ; do \
-		dst=${STAGEDIR}${DOCSDIR}$${src#.} ; \
-		if ${TEST} -d "$$src" ; then \
-			${MKDIR} "$$dst" ; \
-		else \
-			${INSTALL_DATA} "$$src" "$$dst" ; \
-		fi \
-	done
+	cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DATADIR}
+	${INSTALL_DATA} ${WRKSRC}/mkdocs.yml ${STAGEDIR}${DATADIR}
 
 post-install-EXAMPLES-on:
 	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
diff --git a/net-mgmt/netbox/distinfo b/net-mgmt/netbox/distinfo
index 0374696db26f..df9d4b1fad14 100644
--- a/net-mgmt/netbox/distinfo
+++ b/net-mgmt/netbox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1649185847
-SHA256 (netbox-community-netbox-v3.1.11_GH0.tar.gz) = d7f6f4ad5b1305aabbc9bee133455e913be3765972b35ed030d689d73ba7daa7
-SIZE (netbox-community-netbox-v3.1.11_GH0.tar.gz) = 4408997
+TIMESTAMP = 1654793742
+SHA256 (netbox-community-netbox-v3.2.4_GH0.tar.gz) = 6eaf5b63812f2055c6a1d11a4465086e11a8968eec0b3c055e4abbb8512f6550
+SIZE (netbox-community-netbox-v3.2.4_GH0.tar.gz) = 4828917
diff --git a/net-mgmt/netbox/files/patch-mkdocs.yml b/net-mgmt/netbox/files/patch-mkdocs.yml
new file mode 100644
index 000000000000..af37b9b07ff0
--- /dev/null
+++ b/net-mgmt/netbox/files/patch-mkdocs.yml
@@ -0,0 +1,17 @@
+--- mkdocs.yml.orig	2022-04-28 19:00:11 UTC
++++ mkdocs.yml
+@@ -1,5 +1,5 @@ site_name: NetBox Documentation
+ site_name: NetBox Documentation
+-site_dir: netbox/project-static/docs
++site_dir: project-static/docs
+ site_url: https://docs.netbox.dev/
+ repo_name: netbox-community/netbox
+ repo_url: https://github.com/netbox-community/netbox
+@@ -26,7 +26,6 @@ plugins:
+           setup_commands:
+             - import os
+             - import django
+-            - os.chdir('netbox/')
+             - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "netbox.settings")
+             - django.setup()
+           rendering:
diff --git a/net-mgmt/netbox/files/pkg-message.in b/net-mgmt/netbox/files/pkg-message.in
index 6d9bbced27ec..dd29a7a50431 100644
--- a/net-mgmt/netbox/files/pkg-message.in
+++ b/net-mgmt/netbox/files/pkg-message.in
@@ -17,12 +17,14 @@ database migrations will be executed.
 
 The following steps are required to finish the upgrade: 
 
-1. Run database migrations, trace any missing cable paths, collect static
-   files, remove stale content files and delete any expired user sessions
+1. Run database migrations, trace any missing cable paths, build the embedded
+   documentation, collect static files, remove stale content files and delete
+   any expired user sessions
 
 # cd %%DATADIR%%
 # python%%PYTHON_VER%% manage.py migrate
 # python%%PYTHON_VER%% manage.py trace_paths --no-input
+# mkdocs build
 # python%%PYTHON_VER%% manage.py collectstatic --no-input
 # python%%PYTHON_VER%% manage.py remove_stale_contenttypes --no-input
 # python%%PYTHON_VER%% manage.py clearsessions
@@ -30,114 +32,6 @@ The following steps are required to finish the upgrade:
 2. Restart WSGI/httpd environment (supervisord/apache/nginx/etc.)
 EOD
 }
-{ type: upgrade
-  maximum_version: 2.7.7
-  message: <<EOD
-1. Removal of the Topology Maps feature
-
-The deprecated topology maps feature has been removed.  Please replicate any
-required data to another source before upgrading NetBox to v2.7.7, as any
-existing topology maps will be deleted.
-
-
-2. Changed REDIS database configuration settings
-
-The REDIS database configuration parameters were splitted up in two discrete
-subsections named "webhooks" and "caching".  This requires modification of the
-REDIS parameter in configuration.py as follows: 
-
-Old Redis sample configuration:
-
-REDIS = {
-    'HOST': 'localhost',
-    'PORT': 6379,
-    'PASSWORD': '',
-    'DATABASE': 0,
-    'CACHE_DATABASE': 1,
-    'DEFAULT_TIMEOUT': 300,
-    'SSL': False,
-}
-
-New Redis sample configuration:
-
-REDIS = {
-    'webhooks': {
-        'HOST': 'redis.example.com',
-        'PORT': 1234,
-        'PASSWORD': 'foobar',
-        'DATABASE': 0,
-        'DEFAULT_TIMEOUT': 300,
-        'SSL': False,
-    },
-    'caching': {
-        'HOST': 'localhost',
-        'PORT': 6379,
-        'PASSWORD': '',
-        'DATABASE': 1,
-        'DEFAULT_TIMEOUT': 300,
-        'SSL': False,
-    }
-}
-
-Note that the CACHE_DATABASE parameter has been removed and the connection
-settings have been duplicated for both "webhooks" and "caching".  This allows
-one to make use of separate Redis instances if desired.  It is fine to use the
-same Redis service for both functions, although the database identifiers should
-be different.
-
-
-3. Removal of the WEBHOOKS_ENABLED configuration parameter
-
-As django-rq is now a required library, NetBox assumes that the RQ worker
-process is running and the WEBHOOKS_ENABLED configuration parameter is no
-longer used.  Please ensure that both the NetBox WSGI service and the RQ worker
-process are running on all production installations.
-
-
-4. Fixed natural orderding of interfaces
-
-The 2.7.7 release contains a bug fix regarding the natural ordering of
-interfaces.  If any interfaces appear unordered, run the following management
-command to recalculate their naturalized values after the usual upgrading steps
-(database migrations, collect static files, etc.) were issued:
-
-# cd %%DATADIR%%
-# python%%PYTHON_VER%% manage.py renaturalize dcim.Interface
-
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.7.9
-  message: <<EOD
-Please note that two additional steps (remove stale content & clear cached
-files) are now required after each update of NetBox.
-
-These were added to the existing update instructions which are displayed with
-each update.
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.7.10
-  message: <<EOD
-Please note that another additional step (delete expired user sessions) is now
-required after each update of NetBox.
-
-That step was added to the existing update instructions which are displayed
-with each update.
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.7.11
-  message: <<EOD
-The "webhooks" REDIS configuration section has been renamed to "tasks".  Please
-update your configuration as support for the old name will be removed in a
-future release.
-
-Also the sample rc script got some new default values and improvements, e.g.
-the possibility to add extra arguments or to use a configuration file instead
-of using rc variables.
-EOD
-}
 { type: upgrade
   maximum_version: 2.9.8
   message: <<EOD
@@ -353,4 +247,78 @@ EOD
       changelogs for further details.
 EOD
 }
+{ type: upgrade
+  maximum_version: 3.2.4
+  message: <<EOD
+/!\ WARNING /!\
+
+The NetBox 3.2 release contains major changes, so at least items 1.), 2.) and
+3.) must be checked before proceeding with the upgrade!
+
+/!\ WARNING /!\
+
+1. This release includes a database migration that will remove the "asn",
+   "contact_name", "contact_phone", and "contact_email" fields from the site
+   model.  (These fields have been superseded by the ASN and contact models
+   introduced in NetBox v3.1.)
+
+   To protect against the accidental destruction of data, the upgrade process
+   will fail if any sites still have data in any of these fields.  To bypass
+   this safeguard, set the NETBOX_DELETE_LEGACY_DATA environment variable when
+   running the upgrade script, which will permit the destruction of legacy
+   data.
+
+   A set of migration scripts is available to assist with the migration of
+   legacy site data:
+
+   https://github.com/netbox-community/migration-scripts
+
+
+2. NetBox v3.2 requires Python 3.8 or later.
+
+
+3. If the NetBox Plugin "net-mgmt/py-netbox-plugin-extension" is used, please
+   disable it before the migrations are applied.  This can be done by removing
+   the entry "netbox_plugin_extensions" from the "PLUGINS" section in the
+   NetBox configuration.
+
+   Once the upgrade is done, this port/package can be safely removed as it's no
+   longer required.
+
+
+4. Following items should be checked as well:
+
+    * The embedded documentation now needs to be built locally as the procedure
+      requires a running instance of NetBox:
+
+      # cd %%DATADIR%%
+      # mkdocs build
+
+      Please also refer to the general updating instructions as this needs to
+      be done with every future update of NetBox.
+
+    * Automatic redirection of legacy slug-based URL paths has been removed.
+      URL-based slugs were changed to use numeric IDs in v2.11.0.
+
+    * The "asn" query filter for sites now matches against the AS number of
+      assigned ASN objects.
+
+    * The "created" field of all change-logged models now conveys a full
+      datetime object, rather than only a date.  (Previous date-only values
+      will receive a timestamp of 00:00.)  While this change is largely
+      unconcerning, strictly-typed API consumers may need to be updated.
+
+    * A "pre_run()" method has been added to the base Report class.  Although
+      unlikely to affect most installations, you may need to alter any reports
+      which already use this name for a method.
+
+    * Webhook URLs now support Jinja2 templating.  Although this is unlikely to
+      introduce any issues, it's possible that an unusual URL might trigger a
+      Jinja2 rendering error, in which case the URL would need to be properly
+      escaped.
+
+    * Several changes to the REST API were made as well.  Please check the
+      changelogs for further details.
+EOD
+}
 ]
diff --git a/net-mgmt/netbox/pkg-plist b/net-mgmt/netbox/pkg-plist
index 359820288e39..223a930334e4 100644
--- a/net-mgmt/netbox/pkg-plist
+++ b/net-mgmt/netbox/pkg-plist
@@ -1,168 +1,3 @@
-%%PORTDOCS%%%%DOCSDIR%%/additional-features/change-logging.md
-%%PORTDOCS%%%%DOCSDIR%%/additional-features/journaling.md
-%%PORTDOCS%%%%DOCSDIR%%/additional-features/napalm.md
-%%PORTDOCS%%%%DOCSDIR%%/additional-features/prometheus-metrics.md
-%%PORTDOCS%%%%DOCSDIR%%/additional-features/webhooks.md
-%%PORTDOCS%%%%DOCSDIR%%/administration/authentication.md
-%%PORTDOCS%%%%DOCSDIR%%/administration/housekeeping.md
-%%PORTDOCS%%%%DOCSDIR%%/administration/netbox-shell.md
-%%PORTDOCS%%%%DOCSDIR%%/administration/permissions.md
-%%PORTDOCS%%%%DOCSDIR%%/administration/replicating-netbox.md
-%%PORTDOCS%%%%DOCSDIR%%/configuration/dynamic-settings.md
-%%PORTDOCS%%%%DOCSDIR%%/configuration/index.md
-%%PORTDOCS%%%%DOCSDIR%%/configuration/optional-settings.md
-%%PORTDOCS%%%%DOCSDIR%%/configuration/remote-authentication.md
-%%PORTDOCS%%%%DOCSDIR%%/configuration/required-settings.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/circuits.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/contacts.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/device-types.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/devices.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/ipam.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/power.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/services.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/sites-and-racks.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/tenancy.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/virtualization.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/vlans.md
-%%PORTDOCS%%%%DOCSDIR%%/core-functionality/wireless.md
-%%PORTDOCS%%%%DOCSDIR%%/customization/custom-fields.md
-%%PORTDOCS%%%%DOCSDIR%%/customization/custom-scripts.md
-%%PORTDOCS%%%%DOCSDIR%%/customization/custom-validation.md
-%%PORTDOCS%%%%DOCSDIR%%/customization/export-templates.md
-%%PORTDOCS%%%%DOCSDIR%%/customization/reports.md
-%%PORTDOCS%%%%DOCSDIR%%/development/adding-models.md
-%%PORTDOCS%%%%DOCSDIR%%/development/application-registry.md
-%%PORTDOCS%%%%DOCSDIR%%/development/extending-models.md
-%%PORTDOCS%%%%DOCSDIR%%/development/getting-started.md
-%%PORTDOCS%%%%DOCSDIR%%/development/index.md
-%%PORTDOCS%%%%DOCSDIR%%/development/models.md
-%%PORTDOCS%%%%DOCSDIR%%/development/release-checklist.md
-%%PORTDOCS%%%%DOCSDIR%%/development/signals.md
-%%PORTDOCS%%%%DOCSDIR%%/development/style-guide.md
-%%PORTDOCS%%%%DOCSDIR%%/development/user-preferences.md
-%%PORTDOCS%%%%DOCSDIR%%/development/web-ui.md
-%%PORTDOCS%%%%DOCSDIR%%/extra.css
-%%PORTDOCS%%%%DOCSDIR%%/graphql-api/overview.md
-%%PORTDOCS%%%%DOCSDIR%%/index.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/1-postgresql.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/2-redis.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/3-netbox.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/4-gunicorn.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/5-http-server.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/6-ldap.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/index.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/migrating-to-systemd.md
-%%PORTDOCS%%%%DOCSDIR%%/installation/upgrading.md
-%%PORTDOCS%%%%DOCSDIR%%/media/admin_ui_run_permission.png
-%%PORTDOCS%%%%DOCSDIR%%/media/installation/netbox_application_stack.png
-%%PORTDOCS%%%%DOCSDIR%%/media/models/dcim_cable_trace.png
-%%PORTDOCS%%%%DOCSDIR%%/media/plugins/plugin_admin_ui.png
-%%PORTDOCS%%%%DOCSDIR%%/media/plugins/plugin_rest_api_endpoint.png
-%%PORTDOCS%%%%DOCSDIR%%/media/power_distribution.png
-%%PORTDOCS%%%%DOCSDIR%%/media/release-notes/netbox30_ui.png
-%%PORTDOCS%%%%DOCSDIR%%/media/screenshots/cable-trace.png
-%%PORTDOCS%%%%DOCSDIR%%/media/screenshots/home-dark.png
-%%PORTDOCS%%%%DOCSDIR%%/media/screenshots/home-light.png
-%%PORTDOCS%%%%DOCSDIR%%/media/screenshots/prefixes-list.png
-%%PORTDOCS%%%%DOCSDIR%%/media/screenshots/rack.png
-%%PORTDOCS%%%%DOCSDIR%%/models/circuits/circuit.md
-%%PORTDOCS%%%%DOCSDIR%%/models/circuits/circuittermination.md
-%%PORTDOCS%%%%DOCSDIR%%/models/circuits/circuittype.md
-%%PORTDOCS%%%%DOCSDIR%%/models/circuits/provider.md
-%%PORTDOCS%%%%DOCSDIR%%/models/circuits/providernetwork.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/cable.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/consoleport.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/consoleporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/consoleserverport.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/consoleserverporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/device.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/devicebay.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/devicebaytemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/devicerole.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/devicetype.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/frontport.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/frontporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/interface.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/interfacetemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/inventoryitem.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/location.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/manufacturer.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/platform.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/powerfeed.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/poweroutlet.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/poweroutlettemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/powerpanel.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/powerport.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/powerporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/rack.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/rackreservation.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/rackrole.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/rearport.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/rearporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/region.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/site.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/sitegroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/dcim/virtualchassis.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/configcontext.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/customfield.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/customlink.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/exporttemplate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/imageattachment.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/tag.md
-%%PORTDOCS%%%%DOCSDIR%%/models/extras/webhook.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/aggregate.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/asn.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/fhrpgroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/fhrpgroupassignment.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/ipaddress.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/iprange.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/prefix.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/rir.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/role.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/routetarget.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/service.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/vlan.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/vlangroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/ipam/vrf.md
-%%PORTDOCS%%%%DOCSDIR%%/models/tenancy/contact.md
-%%PORTDOCS%%%%DOCSDIR%%/models/tenancy/contactgroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/tenancy/contactrole.md
-%%PORTDOCS%%%%DOCSDIR%%/models/tenancy/tenant.md
-%%PORTDOCS%%%%DOCSDIR%%/models/tenancy/tenantgroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/users/objectpermission.md
-%%PORTDOCS%%%%DOCSDIR%%/models/users/token.md
-%%PORTDOCS%%%%DOCSDIR%%/models/virtualization/cluster.md
-%%PORTDOCS%%%%DOCSDIR%%/models/virtualization/clustergroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/virtualization/clustertype.md
-%%PORTDOCS%%%%DOCSDIR%%/models/virtualization/virtualmachine.md
-%%PORTDOCS%%%%DOCSDIR%%/models/virtualization/vminterface.md
-%%PORTDOCS%%%%DOCSDIR%%/models/wireless/wirelesslan.md
-%%PORTDOCS%%%%DOCSDIR%%/models/wireless/wirelesslangroup.md
-%%PORTDOCS%%%%DOCSDIR%%/models/wireless/wirelesslink.md
-%%PORTDOCS%%%%DOCSDIR%%/netbox_logo.png
-%%PORTDOCS%%%%DOCSDIR%%/netbox_logo.svg
-%%PORTDOCS%%%%DOCSDIR%%/plugins/development.md
-%%PORTDOCS%%%%DOCSDIR%%/plugins/index.md
-%%PORTDOCS%%%%DOCSDIR%%/reference/conditions.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/index.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.0.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.1.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.10.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.11.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.2.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.3.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.4.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.5.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.6.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.7.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.8.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-2.9.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-3.0.md
-%%PORTDOCS%%%%DOCSDIR%%/release-notes/version-3.1.md
-%%PORTDOCS%%%%DOCSDIR%%/requirements.txt
-%%PORTDOCS%%%%DOCSDIR%%/rest-api/authentication.md
-%%PORTDOCS%%%%DOCSDIR%%/rest-api/filtering.md
-%%PORTDOCS%%%%DOCSDIR%%/rest-api/overview.md
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/850.netbox-housekeeping.sample
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/apache.conf
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/gunicorn.py
@@ -190,12 +25,19 @@
 %%DATADIR%%/circuits/migrations/0002_squashed_0029.py
 %%DATADIR%%/circuits/migrations/0003_extend_tag_support.py
 %%DATADIR%%/circuits/migrations/0004_rename_cable_peer.py
+%%DATADIR%%/circuits/migrations/0032_provider_service_id.py
+%%DATADIR%%/circuits/migrations/0033_standardize_id_fields.py
+%%DATADIR%%/circuits/migrations/0034_created_datetimefield.py
+%%DATADIR%%/circuits/migrations/0035_provider_asns.py
 %%DATADIR%%/circuits/migrations/__init__.py
 %%DATADIR%%/circuits/models/__init__.py
 %%DATADIR%%/circuits/models/circuits.py
 %%DATADIR%%/circuits/models/providers.py
 %%DATADIR%%/circuits/signals.py
-%%DATADIR%%/circuits/tables.py
+%%DATADIR%%/circuits/tables/__init__.py
+%%DATADIR%%/circuits/tables/circuits.py
+%%DATADIR%%/circuits/tables/columns.py
+%%DATADIR%%/circuits/tables/providers.py
 %%DATADIR%%/circuits/tests/__init__.py
 %%DATADIR%%/circuits/tests/test_api.py
 %%DATADIR%%/circuits/tests/test_filtersets.py
@@ -249,6 +91,15 @@
 %%DATADIR%%/dcim/migrations/0142_rename_128gfc_qsfp28.py
 %%DATADIR%%/dcim/migrations/0143_remove_primary_for_related_name.py
 %%DATADIR%%/dcim/migrations/0144_fix_cable_abs_length.py
+%%DATADIR%%/dcim/migrations/0145_site_remove_deprecated_fields.py
+%%DATADIR%%/dcim/migrations/0146_modules.py
+%%DATADIR%%/dcim/migrations/0147_inventoryitemrole.py
+%%DATADIR%%/dcim/migrations/0148_inventoryitem_component.py
+%%DATADIR%%/dcim/migrations/0149_inventoryitem_templates.py
+%%DATADIR%%/dcim/migrations/0150_interface_vrf.py
+%%DATADIR%%/dcim/migrations/0151_interface_speed_duplex.py
+%%DATADIR%%/dcim/migrations/0152_standardize_id_fields.py
+%%DATADIR%%/dcim/migrations/0153_created_datetimefield.py
 %%DATADIR%%/dcim/migrations/__init__.py
 %%DATADIR%%/dcim/models/__init__.py
 %%DATADIR%%/dcim/models/cables.py
@@ -264,6 +115,7 @@
 %%DATADIR%%/dcim/tables/cables.py
 %%DATADIR%%/dcim/tables/devices.py
 %%DATADIR%%/dcim/tables/devicetypes.py
+%%DATADIR%%/dcim/tables/modules.py
 %%DATADIR%%/dcim/tables/power.py
 %%DATADIR%%/dcim/tables/racks.py
 %%DATADIR%%/dcim/tables/sites.py
@@ -279,6 +131,206 @@
 %%DATADIR%%/dcim/urls.py
 %%DATADIR%%/dcim/utils.py
 %%DATADIR%%/dcim/views.py
+%%DATADIR%%/docs/additional-features/change-logging.md
+%%DATADIR%%/docs/additional-features/journaling.md
+%%DATADIR%%/docs/additional-features/napalm.md
+%%DATADIR%%/docs/additional-features/prometheus-metrics.md
+%%DATADIR%%/docs/additional-features/webhooks.md
+%%DATADIR%%/docs/administration/authentication/microsoft-azure-ad.md
+%%DATADIR%%/docs/administration/authentication/okta.md
+%%DATADIR%%/docs/administration/authentication/overview.md
+%%DATADIR%%/docs/administration/error-reporting.md
+%%DATADIR%%/docs/administration/housekeeping.md
+%%DATADIR%%/docs/administration/netbox-shell.md
+%%DATADIR%%/docs/administration/permissions.md
+%%DATADIR%%/docs/administration/replicating-netbox.md
+%%DATADIR%%/docs/configuration/dynamic-settings.md
+%%DATADIR%%/docs/configuration/error-reporting.md
+%%DATADIR%%/docs/configuration/index.md
+%%DATADIR%%/docs/configuration/optional-settings.md
+%%DATADIR%%/docs/configuration/remote-authentication.md
+%%DATADIR%%/docs/configuration/required-settings.md
+%%DATADIR%%/docs/core-functionality/circuits.md
+%%DATADIR%%/docs/core-functionality/contacts.md
+%%DATADIR%%/docs/core-functionality/device-types.md
+%%DATADIR%%/docs/core-functionality/devices.md
+%%DATADIR%%/docs/core-functionality/ipam.md
+%%DATADIR%%/docs/core-functionality/modules.md
+%%DATADIR%%/docs/core-functionality/power.md
+%%DATADIR%%/docs/core-functionality/services.md
+%%DATADIR%%/docs/core-functionality/sites-and-racks.md
+%%DATADIR%%/docs/core-functionality/tenancy.md
+%%DATADIR%%/docs/core-functionality/virtualization.md
+%%DATADIR%%/docs/core-functionality/vlans.md
+%%DATADIR%%/docs/core-functionality/wireless.md
+%%DATADIR%%/docs/customization/custom-fields.md
+%%DATADIR%%/docs/customization/custom-scripts.md
+%%DATADIR%%/docs/customization/custom-validation.md
+%%DATADIR%%/docs/customization/export-templates.md
+%%DATADIR%%/docs/customization/reports.md
+%%DATADIR%%/docs/development/adding-models.md
+%%DATADIR%%/docs/development/application-registry.md
+%%DATADIR%%/docs/development/extending-models.md
+%%DATADIR%%/docs/development/getting-started.md
+%%DATADIR%%/docs/development/index.md
+%%DATADIR%%/docs/development/models.md
+%%DATADIR%%/docs/development/release-checklist.md
+%%DATADIR%%/docs/development/signals.md
+%%DATADIR%%/docs/development/style-guide.md
+%%DATADIR%%/docs/development/user-preferences.md
+%%DATADIR%%/docs/development/web-ui.md
+%%DATADIR%%/docs/extra.css
+%%DATADIR%%/docs/graphql-api/overview.md
+%%DATADIR%%/docs/index.md
+%%DATADIR%%/docs/installation/1-postgresql.md
+%%DATADIR%%/docs/installation/2-redis.md
+%%DATADIR%%/docs/installation/3-netbox.md
+%%DATADIR%%/docs/installation/4-gunicorn.md
+%%DATADIR%%/docs/installation/5-http-server.md
+%%DATADIR%%/docs/installation/6-ldap.md
+%%DATADIR%%/docs/installation/index.md
+%%DATADIR%%/docs/installation/migrating-to-systemd.md
+%%DATADIR%%/docs/installation/upgrading.md
+%%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
+%%DATADIR%%/docs/media/authentication/azure_ad_app_registration.png
+%%DATADIR%%/docs/media/authentication/azure_ad_app_registration_created.png
+%%DATADIR%%/docs/media/authentication/azure_ad_client_secret.png
+%%DATADIR%%/docs/media/authentication/azure_ad_client_secret_created.png
+%%DATADIR%%/docs/media/authentication/azure_ad_login_portal.png
+%%DATADIR%%/docs/media/authentication/netbox_azure_ad_login.png
+%%DATADIR%%/docs/media/authentication/netbox_okta_login.png
+%%DATADIR%%/docs/media/authentication/okta_create_app_registration.png
+%%DATADIR%%/docs/media/authentication/okta_integration_parameters.png
+%%DATADIR%%/docs/media/authentication/okta_login_portal.png
+%%DATADIR%%/docs/media/authentication/okta_web_app_integration.png
+%%DATADIR%%/docs/media/development/github_fork_button.png
+%%DATADIR%%/docs/media/development/github_fork_dialog.png
+%%DATADIR%%/docs/media/installation/netbox_application_stack.png
+%%DATADIR%%/docs/media/models/dcim_cable_trace.png
+%%DATADIR%%/docs/media/power_distribution.png
+%%DATADIR%%/docs/media/release-notes/netbox30_ui.png
+%%DATADIR%%/docs/media/screenshots/cable-trace.png
+%%DATADIR%%/docs/media/screenshots/home-dark.png
+%%DATADIR%%/docs/media/screenshots/home-light.png
+%%DATADIR%%/docs/media/screenshots/prefixes-list.png
+%%DATADIR%%/docs/media/screenshots/rack.png
+%%DATADIR%%/docs/models/circuits/circuit.md
+%%DATADIR%%/docs/models/circuits/circuittermination.md
+%%DATADIR%%/docs/models/circuits/circuittype.md
+%%DATADIR%%/docs/models/circuits/provider.md
+%%DATADIR%%/docs/models/circuits/providernetwork.md
+%%DATADIR%%/docs/models/dcim/cable.md
+%%DATADIR%%/docs/models/dcim/consoleport.md
+%%DATADIR%%/docs/models/dcim/consoleporttemplate.md
+%%DATADIR%%/docs/models/dcim/consoleserverport.md
+%%DATADIR%%/docs/models/dcim/consoleserverporttemplate.md
+%%DATADIR%%/docs/models/dcim/device.md
+%%DATADIR%%/docs/models/dcim/devicebay.md
+%%DATADIR%%/docs/models/dcim/devicebaytemplate.md
+%%DATADIR%%/docs/models/dcim/devicerole.md
+%%DATADIR%%/docs/models/dcim/devicetype.md
+%%DATADIR%%/docs/models/dcim/frontport.md
+%%DATADIR%%/docs/models/dcim/frontporttemplate.md
+%%DATADIR%%/docs/models/dcim/interface.md
+%%DATADIR%%/docs/models/dcim/interfacetemplate.md
+%%DATADIR%%/docs/models/dcim/inventoryitem.md
+%%DATADIR%%/docs/models/dcim/inventoryitemrole.md
+%%DATADIR%%/docs/models/dcim/inventoryitemtemplate.md
+%%DATADIR%%/docs/models/dcim/location.md
+%%DATADIR%%/docs/models/dcim/manufacturer.md
+%%DATADIR%%/docs/models/dcim/module.md
+%%DATADIR%%/docs/models/dcim/modulebay.md
+%%DATADIR%%/docs/models/dcim/modulebaytemplate.md
+%%DATADIR%%/docs/models/dcim/moduletype.md
+%%DATADIR%%/docs/models/dcim/platform.md
+%%DATADIR%%/docs/models/dcim/powerfeed.md
+%%DATADIR%%/docs/models/dcim/poweroutlet.md
+%%DATADIR%%/docs/models/dcim/poweroutlettemplate.md
+%%DATADIR%%/docs/models/dcim/powerpanel.md
+%%DATADIR%%/docs/models/dcim/powerport.md
+%%DATADIR%%/docs/models/dcim/powerporttemplate.md
+%%DATADIR%%/docs/models/dcim/rack.md
+%%DATADIR%%/docs/models/dcim/rackreservation.md
+%%DATADIR%%/docs/models/dcim/rackrole.md
+%%DATADIR%%/docs/models/dcim/rearport.md
+%%DATADIR%%/docs/models/dcim/rearporttemplate.md
+%%DATADIR%%/docs/models/dcim/region.md
+%%DATADIR%%/docs/models/dcim/site.md
+%%DATADIR%%/docs/models/dcim/sitegroup.md
+%%DATADIR%%/docs/models/dcim/virtualchassis.md
+%%DATADIR%%/docs/models/extras/configcontext.md
+%%DATADIR%%/docs/models/extras/customfield.md
+%%DATADIR%%/docs/models/extras/customlink.md
+%%DATADIR%%/docs/models/extras/exporttemplate.md
+%%DATADIR%%/docs/models/extras/imageattachment.md
+%%DATADIR%%/docs/models/extras/tag.md
+%%DATADIR%%/docs/models/extras/webhook.md
+%%DATADIR%%/docs/models/ipam/aggregate.md
+%%DATADIR%%/docs/models/ipam/asn.md
+%%DATADIR%%/docs/models/ipam/fhrpgroup.md
+%%DATADIR%%/docs/models/ipam/fhrpgroupassignment.md
+%%DATADIR%%/docs/models/ipam/ipaddress.md
+%%DATADIR%%/docs/models/ipam/iprange.md
+%%DATADIR%%/docs/models/ipam/prefix.md
+%%DATADIR%%/docs/models/ipam/rir.md
+%%DATADIR%%/docs/models/ipam/role.md
+%%DATADIR%%/docs/models/ipam/routetarget.md
+%%DATADIR%%/docs/models/ipam/service.md
+%%DATADIR%%/docs/models/ipam/servicetemplate.md
+%%DATADIR%%/docs/models/ipam/vlan.md
+%%DATADIR%%/docs/models/ipam/vlangroup.md
+%%DATADIR%%/docs/models/ipam/vrf.md
+%%DATADIR%%/docs/models/tenancy/contact.md
+%%DATADIR%%/docs/models/tenancy/contactgroup.md
+%%DATADIR%%/docs/models/tenancy/contactrole.md
+%%DATADIR%%/docs/models/tenancy/tenant.md
+%%DATADIR%%/docs/models/tenancy/tenantgroup.md
+%%DATADIR%%/docs/models/users/objectpermission.md
+%%DATADIR%%/docs/models/users/token.md
+%%DATADIR%%/docs/models/virtualization/cluster.md
+%%DATADIR%%/docs/models/virtualization/clustergroup.md
+%%DATADIR%%/docs/models/virtualization/clustertype.md
+%%DATADIR%%/docs/models/virtualization/virtualmachine.md
+%%DATADIR%%/docs/models/virtualization/vminterface.md
+%%DATADIR%%/docs/models/wireless/wirelesslan.md
+%%DATADIR%%/docs/models/wireless/wirelesslangroup.md
+%%DATADIR%%/docs/models/wireless/wirelesslink.md
+%%DATADIR%%/docs/netbox_logo.png
+%%DATADIR%%/docs/netbox_logo.svg
+%%DATADIR%%/docs/plugins/development/background-tasks.md
+%%DATADIR%%/docs/plugins/development/filtersets.md
+%%DATADIR%%/docs/plugins/development/forms.md
+%%DATADIR%%/docs/plugins/development/graphql-api.md
+%%DATADIR%%/docs/plugins/development/index.md
+%%DATADIR%%/docs/plugins/development/models.md
+%%DATADIR%%/docs/plugins/development/navigation.md
+%%DATADIR%%/docs/plugins/development/rest-api.md
+%%DATADIR%%/docs/plugins/development/tables.md
+%%DATADIR%%/docs/plugins/development/templates.md
+%%DATADIR%%/docs/plugins/development/views.md
+%%DATADIR%%/docs/plugins/index.md
+%%DATADIR%%/docs/reference/conditions.md
+%%DATADIR%%/docs/release-notes/index.md
+%%DATADIR%%/docs/release-notes/version-2.0.md
+%%DATADIR%%/docs/release-notes/version-2.1.md
+%%DATADIR%%/docs/release-notes/version-2.10.md
+%%DATADIR%%/docs/release-notes/version-2.11.md
+%%DATADIR%%/docs/release-notes/version-2.2.md
+%%DATADIR%%/docs/release-notes/version-2.3.md
+%%DATADIR%%/docs/release-notes/version-2.4.md
+%%DATADIR%%/docs/release-notes/version-2.5.md
+%%DATADIR%%/docs/release-notes/version-2.6.md
+%%DATADIR%%/docs/release-notes/version-2.7.md
+%%DATADIR%%/docs/release-notes/version-2.8.md
+%%DATADIR%%/docs/release-notes/version-2.9.md
+%%DATADIR%%/docs/release-notes/version-3.0.md
+%%DATADIR%%/docs/release-notes/version-3.1.md
+%%DATADIR%%/docs/release-notes/version-3.2.md
+%%DATADIR%%/docs/rest-api/authentication.md
+%%DATADIR%%/docs/rest-api/filtering.md
+%%DATADIR%%/docs/rest-api/overview.md
 %%DATADIR%%/extras/__init__.py
 %%DATADIR%%/extras/admin.py
 %%DATADIR%%/extras/api/__init__.py
@@ -309,6 +361,7 @@
 %%DATADIR%%/extras/lookups.py
 %%DATADIR%%/extras/management/__init__.py
 %%DATADIR%%/extras/management/commands/__init__.py
+%%DATADIR%%/extras/management/commands/clearcache.py
 %%DATADIR%%/extras/management/commands/housekeeping.py
 %%DATADIR%%/extras/management/commands/nbshell.py
 %%DATADIR%%/extras/management/commands/renaturalize.py
@@ -326,6 +379,12 @@
 %%DATADIR%%/extras/migrations/0065_imageattachment_change_logging.py
 %%DATADIR%%/extras/migrations/0066_customfield_name_validation.py
 %%DATADIR%%/extras/migrations/0067_customfield_min_max_values.py
+%%DATADIR%%/extras/migrations/0068_configcontext_cluster_types.py
+%%DATADIR%%/extras/migrations/0069_custom_object_field.py
+%%DATADIR%%/extras/migrations/0070_customlink_enabled.py
+%%DATADIR%%/extras/migrations/0071_standardize_id_fields.py
+%%DATADIR%%/extras/migrations/0072_created_datetimefield.py
+%%DATADIR%%/extras/migrations/0073_journalentry_tags_custom_fields.py
 %%DATADIR%%/extras/migrations/__init__.py
 %%DATADIR%%/extras/models/__init__.py
 %%DATADIR%%/extras/models/change_logging.py
@@ -342,7 +401,9 @@
 %%DATADIR%%/extras/reports.py
 %%DATADIR%%/extras/scripts.py
 %%DATADIR%%/extras/signals.py
-%%DATADIR%%/extras/tables.py
+%%DATADIR%%/extras/tables/__init__.py
+%%DATADIR%%/extras/tables/tables.py
+%%DATADIR%%/extras/tables/template_code.py
 %%DATADIR%%/extras/templatetags/__init__.py
 %%DATADIR%%/extras/templatetags/custom_links.py
 %%DATADIR%%/extras/templatetags/log_levels.py
@@ -353,11 +414,13 @@
 %%DATADIR%%/extras/tests/dummy_plugin/api/serializers.py
 %%DATADIR%%/extras/tests/dummy_plugin/api/urls.py
 %%DATADIR%%/extras/tests/dummy_plugin/api/views.py
+%%DATADIR%%/extras/tests/dummy_plugin/graphql.py
 %%DATADIR%%/extras/tests/dummy_plugin/middleware.py
 %%DATADIR%%/extras/tests/dummy_plugin/migrations/0001_initial.py
 %%DATADIR%%/extras/tests/dummy_plugin/migrations/__init__.py
 %%DATADIR%%/extras/tests/dummy_plugin/models.py
 %%DATADIR%%/extras/tests/dummy_plugin/navigation.py
+%%DATADIR%%/extras/tests/dummy_plugin/preferences.py
 %%DATADIR%%/extras/tests/dummy_plugin/template_content.py
 %%DATADIR%%/extras/tests/dummy_plugin/urls.py
 %%DATADIR%%/extras/tests/dummy_plugin/views.py
@@ -418,6 +481,10 @@
 %%DATADIR%%/ipam/migrations/0051_extend_tag_support.py
 %%DATADIR%%/ipam/migrations/0052_fhrpgroup.py
 %%DATADIR%%/ipam/migrations/0053_asn_model.py
+%%DATADIR%%/ipam/migrations/0054_vlangroup_min_max_vids.py
+%%DATADIR%%/ipam/migrations/0055_servicetemplate.py
+%%DATADIR%%/ipam/migrations/0056_standardize_id_fields.py
+%%DATADIR%%/ipam/migrations/0057_created_datetimefield.py
 %%DATADIR%%/ipam/migrations/__init__.py
 %%DATADIR%%/ipam/models/__init__.py
 %%DATADIR%%/ipam/models/fhrp.py
@@ -446,6 +513,7 @@
 %%DATADIR%%/manage.py
 %%DATADIR%%/media/devicetype-images/.gitignore
 %%DATADIR%%/media/image-attachments/.gitignore
+%%DATADIR%%/mkdocs.yml
 %%DATADIR%%/netbox/__init__.py
 %%DATADIR%%/netbox/admin.py
 %%DATADIR%%/netbox/api/__init__.py
@@ -456,17 +524,23 @@
 %%DATADIR%%/netbox/api/pagination.py
 %%DATADIR%%/netbox/api/renderers.py
 %%DATADIR%%/netbox/api/routers.py
-%%DATADIR%%/netbox/api/serializers.py
+%%DATADIR%%/netbox/api/serializers/__init__.py
+%%DATADIR%%/netbox/api/serializers/base.py
+%%DATADIR%%/netbox/api/serializers/features.py
+%%DATADIR%%/netbox/api/serializers/nested.py
 %%DATADIR%%/netbox/api/views.py
+%%DATADIR%%/netbox/api/viewsets/__init__.py
+%%DATADIR%%/netbox/api/viewsets/mixins.py
 %%DATADIR%%/netbox/authentication.py
 %%DATADIR%%/netbox/config/__init__.py
 %%DATADIR%%/netbox/config/parameters.py
-%%DATADIR%%/netbox/configuration.example.py
-%%DATADIR%%/netbox/configuration.testing.py
+%%DATADIR%%/netbox/configuration_example.py
+%%DATADIR%%/netbox/configuration_testing.py
 %%DATADIR%%/netbox/constants.py
 %%DATADIR%%/netbox/context_processors.py
 %%DATADIR%%/netbox/filtersets.py
-%%DATADIR%%/netbox/forms.py
+%%DATADIR%%/netbox/forms/__init__.py
+%%DATADIR%%/netbox/forms/base.py
 %%DATADIR%%/netbox/graphql/__init__.py
 %%DATADIR%%/netbox/graphql/fields.py
 %%DATADIR%%/netbox/graphql/scalars.py
@@ -475,20 +549,30 @@
 %%DATADIR%%/netbox/graphql/utils.py
 %%DATADIR%%/netbox/graphql/views.py
 %%DATADIR%%/netbox/middleware.py
-%%DATADIR%%/netbox/models.py
+%%DATADIR%%/netbox/models/__init__.py
+%%DATADIR%%/netbox/models/features.py
 %%DATADIR%%/netbox/navigation_menu.py
+%%DATADIR%%/netbox/preferences.py
 %%DATADIR%%/netbox/request_context.py
 %%DATADIR%%/netbox/settings.py
 %%DATADIR%%/netbox/signals.py
+%%DATADIR%%/netbox/tables/__init__.py
+%%DATADIR%%/netbox/tables/columns.py
+%%DATADIR%%/netbox/tables/tables.py
 %%DATADIR%%/netbox/tests/__init__.py
 %%DATADIR%%/netbox/tests/test_api.py
 %%DATADIR%%/netbox/tests/test_authentication.py
 %%DATADIR%%/netbox/tests/test_config.py
 %%DATADIR%%/netbox/tests/test_graphql.py
+%%DATADIR%%/netbox/tests/test_tables.py
 %%DATADIR%%/netbox/tests/test_views.py
 %%DATADIR%%/netbox/urls.py
 %%DATADIR%%/netbox/views/__init__.py
-%%DATADIR%%/netbox/views/generic.py
+%%DATADIR%%/netbox/views/generic/__init__.py
+%%DATADIR%%/netbox/views/generic/base.py
+%%DATADIR%%/netbox/views/generic/bulk_views.py
+%%DATADIR%%/netbox/views/generic/feature_views.py
+%%DATADIR%%/netbox/views/generic/object_views.py
 %%DATADIR%%/netbox/wsgi.py
 %%DATADIR%%/project-static/.eslintignore
 %%DATADIR%%/project-static/.eslintrc
@@ -518,210 +602,6 @@
 %%DATADIR%%/project-static/dist/status.js
 %%DATADIR%%/project-static/dist/status.js.map
 %%DATADIR%%/project-static/docs/.info
-%%DATADIR%%/project-static/docs/404.html
-%%DATADIR%%/project-static/docs/additional-features/change-logging/index.html
-%%DATADIR%%/project-static/docs/additional-features/journaling/index.html
-%%DATADIR%%/project-static/docs/additional-features/napalm/index.html
-%%DATADIR%%/project-static/docs/additional-features/prometheus-metrics/index.html
-%%DATADIR%%/project-static/docs/additional-features/webhooks/index.html
-%%DATADIR%%/project-static/docs/administration/authentication/index.html
-%%DATADIR%%/project-static/docs/administration/housekeeping/index.html
-%%DATADIR%%/project-static/docs/administration/netbox-shell/index.html
-%%DATADIR%%/project-static/docs/administration/permissions/index.html
-%%DATADIR%%/project-static/docs/administration/replicating-netbox/index.html
-%%DATADIR%%/project-static/docs/assets/images/favicon.png
-%%DATADIR%%/project-static/docs/assets/javascripts/bundle.e87a5f81.min.js
-%%DATADIR%%/project-static/docs/assets/javascripts/bundle.e87a5f81.min.js.map
-%%DATADIR%%/project-static/docs/assets/javascripts/lunr/min/lunr.ar.min.js
-%%DATADIR%%/project-static/docs/assets/javascripts/lunr/min/lunr.da.min.js
-%%DATADIR%%/project-static/docs/assets/javascripts/lunr/min/lunr.de.min.js
-%%DATADIR%%/project-static/docs/assets/javascripts/lunr/min/lunr.du.min.js
*** 407 LINES SKIPPED ***