nautobot 3.0.3__py3-none-any.whl → 3.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. nautobot/core/authentication.py +0 -1
  2. nautobot/core/celery/schedulers.py +1 -3
  3. nautobot/core/cli/__init__.py +81 -39
  4. nautobot/core/settings.yaml +12 -4
  5. nautobot/core/tables.py +28 -17
  6. nautobot/core/templates/graphene/graphiql.html +3 -5
  7. nautobot/core/templates/inc/javascript.html +5 -10
  8. nautobot/core/templates/inc/media.html +5 -4
  9. nautobot/core/templates/inc/media_failure.html +73 -0
  10. nautobot/core/templates/media_failure.html +1 -0
  11. nautobot/core/tests/test_cli.py +120 -1
  12. nautobot/core/tests/test_templatetags_helpers.py +9 -9
  13. nautobot/core/ui/object_detail.py +1 -0
  14. nautobot/dcim/forms.py +1 -0
  15. nautobot/dcim/tables/devices.py +6 -5
  16. nautobot/dcim/tables/template_code.py +8 -4
  17. nautobot/dcim/templates/dcim/platform_create.html +3 -4
  18. nautobot/dcim/tests/test_tables.py +5 -6
  19. nautobot/dcim/views.py +6 -7
  20. nautobot/extras/models/jobs.py +7 -1
  21. nautobot/extras/signals.py +143 -113
  22. nautobot/extras/tables.py +3 -3
  23. nautobot/extras/templates/extras/inc/jobresult_js.html +1 -2
  24. nautobot/extras/templates/extras/scheduledjob.html +3 -1
  25. nautobot/extras/tests/test_customfields.py +75 -9
  26. nautobot/extras/tests/test_utils.py +116 -1
  27. nautobot/extras/utils.py +18 -16
  28. nautobot/extras/views.py +2 -14
  29. nautobot/ipam/apps.py +1 -0
  30. nautobot/ipam/filters.py +58 -3
  31. nautobot/ipam/tables.py +8 -4
  32. nautobot/ipam/tests/test_filters.py +55 -0
  33. nautobot/project-static/dist/css/nautobot.css +1 -1
  34. nautobot/project-static/dist/css/nautobot.css.map +1 -1
  35. nautobot/project-static/docs/404.html +64 -8
  36. nautobot/project-static/docs/apps/index.html +64 -8
  37. nautobot/project-static/docs/apps/nautobot-apps.html +64 -8
  38. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +64 -8
  39. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +64 -8
  40. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +64 -8
  41. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +64 -8
  42. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +64 -8
  43. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +64 -8
  44. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +64 -8
  45. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +64 -8
  46. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +64 -8
  47. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +64 -8
  48. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +64 -8
  49. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +64 -8
  50. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +64 -8
  51. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +64 -8
  52. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +64 -8
  53. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +64 -8
  54. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +64 -8
  55. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +64 -8
  56. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +64 -8
  57. nautobot/project-static/docs/code-reference/nautobot/apps/templatetags.html +64 -8
  58. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +64 -8
  59. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +64 -8
  60. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +64 -8
  61. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +64 -8
  62. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +64 -8
  63. nautobot/project-static/docs/development/apps/api/configuration-view.html +64 -8
  64. nautobot/project-static/docs/development/apps/api/database-backend-config.html +64 -8
  65. nautobot/project-static/docs/development/apps/api/models/django-admin.html +67 -11
  66. nautobot/project-static/docs/development/apps/api/models/global-search.html +64 -8
  67. nautobot/project-static/docs/development/apps/api/models/graphql.html +64 -8
  68. nautobot/project-static/docs/development/apps/api/models/index.html +64 -8
  69. nautobot/project-static/docs/development/apps/api/models/queryset.html +13440 -0
  70. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +64 -8
  71. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +64 -8
  72. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +64 -8
  73. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +64 -8
  74. nautobot/project-static/docs/development/apps/api/platform-features/index.html +64 -8
  75. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +64 -8
  76. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +64 -8
  77. nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +64 -8
  78. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +64 -8
  79. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +64 -8
  80. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +64 -8
  81. nautobot/project-static/docs/development/apps/api/prometheus.html +64 -8
  82. nautobot/project-static/docs/development/apps/api/setup.html +64 -8
  83. nautobot/project-static/docs/development/apps/api/testing.html +64 -8
  84. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +64 -8
  85. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +64 -8
  86. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +64 -8
  87. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +64 -8
  88. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +64 -8
  89. nautobot/project-static/docs/development/apps/api/views/base-template.html +64 -8
  90. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +64 -8
  91. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +64 -8
  92. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +64 -8
  93. nautobot/project-static/docs/development/apps/api/views/index.html +67 -11
  94. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +64 -8
  95. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +64 -8
  96. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +64 -8
  97. nautobot/project-static/docs/development/apps/api/views/notes.html +64 -8
  98. nautobot/project-static/docs/development/apps/api/views/rest-api.html +64 -8
  99. nautobot/project-static/docs/development/apps/api/views/urls.html +64 -8
  100. nautobot/project-static/docs/development/apps/index.html +64 -8
  101. nautobot/project-static/docs/development/apps/migration/code-updates.html +64 -8
  102. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +64 -8
  103. nautobot/project-static/docs/development/apps/migration/from-v1.html +64 -8
  104. nautobot/project-static/docs/development/apps/migration/from-v2/migrating-v2-to-v3.html +64 -8
  105. nautobot/project-static/docs/development/apps/migration/from-v2/new-nautobot-custom-ui-apis.html +64 -8
  106. nautobot/project-static/docs/development/apps/migration/from-v2/overview.html +68 -8
  107. nautobot/project-static/docs/development/apps/migration/from-v2/upgrading-from-bootstrap-v3-to-v5.html +64 -8
  108. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +64 -8
  109. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +64 -8
  110. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +64 -8
  111. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +64 -8
  112. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +64 -8
  113. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +64 -8
  114. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +64 -8
  115. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +64 -8
  116. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +64 -8
  117. nautobot/project-static/docs/development/apps/porting-from-netbox.html +64 -8
  118. nautobot/project-static/docs/development/core/application-registry.html +64 -8
  119. nautobot/project-static/docs/development/core/best-practices.html +64 -8
  120. nautobot/project-static/docs/development/core/caching.html +64 -8
  121. nautobot/project-static/docs/development/core/controllers.html +64 -8
  122. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +64 -8
  123. nautobot/project-static/docs/development/core/docs-media-standards.html +64 -8
  124. nautobot/project-static/docs/development/core/generic-views.html +64 -8
  125. nautobot/project-static/docs/development/core/getting-started.html +64 -8
  126. nautobot/project-static/docs/development/core/homepage.html +64 -8
  127. nautobot/project-static/docs/development/core/index.html +64 -8
  128. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +64 -8
  129. nautobot/project-static/docs/development/core/model-checklist.html +64 -8
  130. nautobot/project-static/docs/development/core/model-features.html +64 -8
  131. nautobot/project-static/docs/development/core/natural-keys.html +64 -8
  132. nautobot/project-static/docs/development/core/navigation-menu.html +64 -8
  133. nautobot/project-static/docs/development/core/release-checklist.html +66 -8
  134. nautobot/project-static/docs/development/core/role-internals.html +64 -8
  135. nautobot/project-static/docs/development/core/settings.html +64 -8
  136. nautobot/project-static/docs/development/core/style-guide.html +64 -8
  137. nautobot/project-static/docs/development/core/templates.html +64 -8
  138. nautobot/project-static/docs/development/core/testing.html +64 -8
  139. nautobot/project-static/docs/development/core/ui-best-practices.html +64 -8
  140. nautobot/project-static/docs/development/core/ui-component-framework.html +64 -8
  141. nautobot/project-static/docs/development/core/user-preferences.html +64 -8
  142. nautobot/project-static/docs/development/index.html +64 -8
  143. nautobot/project-static/docs/development/jobs/getting-started.html +64 -8
  144. nautobot/project-static/docs/development/jobs/index.html +64 -8
  145. nautobot/project-static/docs/development/jobs/installation.html +64 -8
  146. nautobot/project-static/docs/development/jobs/job-extensions.html +64 -8
  147. nautobot/project-static/docs/development/jobs/job-logging.html +64 -8
  148. nautobot/project-static/docs/development/jobs/job-patterns.html +64 -8
  149. nautobot/project-static/docs/development/jobs/job-structure.html +64 -8
  150. nautobot/project-static/docs/development/jobs/migration/from-v1.html +64 -8
  151. nautobot/project-static/docs/development/jobs/testing.html +64 -8
  152. nautobot/project-static/docs/index.html +64 -8
  153. nautobot/project-static/docs/overview/application_stack.html +64 -8
  154. nautobot/project-static/docs/overview/design_philosophy.html +64 -8
  155. nautobot/project-static/docs/release-notes/index.html +64 -8
  156. nautobot/project-static/docs/release-notes/version-1.0.html +64 -8
  157. nautobot/project-static/docs/release-notes/version-1.1.html +64 -8
  158. nautobot/project-static/docs/release-notes/version-1.2.html +65 -9
  159. nautobot/project-static/docs/release-notes/version-1.3.html +64 -8
  160. nautobot/project-static/docs/release-notes/version-1.4.html +64 -8
  161. nautobot/project-static/docs/release-notes/version-1.5.html +64 -8
  162. nautobot/project-static/docs/release-notes/version-1.6.html +64 -8
  163. nautobot/project-static/docs/release-notes/version-2.0.html +64 -8
  164. nautobot/project-static/docs/release-notes/version-2.1.html +64 -8
  165. nautobot/project-static/docs/release-notes/version-2.2.html +64 -8
  166. nautobot/project-static/docs/release-notes/version-2.3.html +64 -8
  167. nautobot/project-static/docs/release-notes/version-2.4.html +584 -8
  168. nautobot/project-static/docs/release-notes/version-3.0.html +467 -8
  169. nautobot/project-static/docs/search/search_index.json +1 -1
  170. nautobot/project-static/docs/sitemap.xml +337 -329
  171. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  172. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +64 -8
  173. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +64 -8
  174. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +64 -8
  175. nautobot/project-static/docs/user-guide/administration/configuration/index.html +64 -8
  176. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +64 -8
  177. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +75 -12
  178. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +64 -8
  179. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +64 -8
  180. nautobot/project-static/docs/user-guide/administration/guides/docker.html +64 -8
  181. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +64 -8
  182. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +64 -8
  183. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +64 -8
  184. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +64 -8
  185. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +64 -8
  186. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +64 -8
  187. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +64 -8
  188. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +64 -8
  189. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +64 -8
  190. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +72 -9
  191. nautobot/project-static/docs/user-guide/administration/installation/index.html +64 -8
  192. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +64 -8
  193. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +64 -8
  194. nautobot/project-static/docs/user-guide/administration/installation/services.html +64 -8
  195. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +65 -9
  196. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +64 -8
  197. nautobot/project-static/docs/user-guide/administration/security/index.html +64 -8
  198. nautobot/project-static/docs/user-guide/administration/security/notices.html +64 -8
  199. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +64 -8
  200. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +64 -8
  201. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +67 -11
  202. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +64 -8
  203. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +64 -8
  204. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +64 -8
  205. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +64 -8
  206. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +64 -8
  207. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +64 -8
  208. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +64 -8
  209. nautobot/project-static/docs/user-guide/administration/upgrading/from-v2/index.html +68 -8
  210. nautobot/project-static/docs/user-guide/administration/upgrading/postgresql.html +13391 -0
  211. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +125 -15
  212. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +64 -8
  213. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +64 -8
  214. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +64 -8
  215. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +64 -8
  216. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +64 -8
  217. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +64 -8
  218. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +64 -8
  219. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +64 -8
  220. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +64 -8
  221. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +64 -8
  222. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +64 -8
  223. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +64 -8
  224. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +64 -8
  225. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +64 -8
  226. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +64 -8
  227. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +64 -8
  228. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +64 -8
  229. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +64 -8
  230. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +64 -8
  231. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +64 -8
  232. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +64 -8
  233. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +64 -8
  234. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +64 -8
  235. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +64 -8
  236. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +64 -8
  237. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +64 -8
  238. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +64 -8
  239. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +64 -8
  240. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +64 -8
  241. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +64 -8
  242. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +64 -8
  243. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +64 -8
  244. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +64 -8
  245. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +64 -8
  246. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +64 -8
  247. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +64 -8
  248. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +64 -8
  249. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +64 -8
  250. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +64 -8
  251. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +64 -8
  252. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +64 -8
  253. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +64 -8
  254. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +64 -8
  255. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +64 -8
  256. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +64 -8
  257. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +64 -8
  258. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +64 -8
  259. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +64 -8
  260. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +64 -8
  261. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +64 -8
  262. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +64 -8
  263. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +64 -8
  264. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +64 -8
  265. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +64 -8
  266. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +64 -8
  267. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +64 -8
  268. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +64 -8
  269. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +64 -8
  270. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +64 -8
  271. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +64 -8
  272. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +64 -8
  273. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +64 -8
  274. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +64 -8
  275. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +64 -8
  276. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +64 -8
  277. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +64 -8
  278. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +64 -8
  279. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +64 -8
  280. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/certificateprofile.html +64 -8
  281. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/healthcheckmonitor.html +64 -8
  282. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/index.html +64 -8
  283. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/loadbalancerpool.html +64 -8
  284. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/loadbalancerpoolmember.html +64 -8
  285. nautobot/project-static/docs/user-guide/core-data-model/load-balancers/virtualserver.html +64 -8
  286. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +64 -8
  287. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +64 -8
  288. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +64 -8
  289. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +64 -8
  290. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +64 -8
  291. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +64 -8
  292. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +64 -8
  293. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +64 -8
  294. nautobot/project-static/docs/user-guide/core-data-model/vpn/index.html +64 -8
  295. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpn.html +64 -8
  296. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnphase1policy.html +64 -8
  297. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnphase2policy.html +64 -8
  298. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpnprofile.html +64 -8
  299. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpntunnel.html +64 -8
  300. nautobot/project-static/docs/user-guide/core-data-model/vpn/vpntunnelendpoint.html +64 -8
  301. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +64 -8
  302. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +64 -8
  303. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +64 -8
  304. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +64 -8
  305. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +64 -8
  306. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +64 -8
  307. nautobot/project-static/docs/user-guide/feature-guides/data-compliance.html +64 -8
  308. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +64 -8
  309. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +64 -8
  310. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +64 -8
  311. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +64 -8
  312. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +64 -8
  313. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +64 -8
  314. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +64 -8
  315. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +75 -12
  316. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +85 -17
  317. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +64 -8
  318. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +64 -8
  319. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant-dark.png +0 -0
  320. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant-light.png +0 -0
  321. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device-dark.png +0 -0
  322. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device-light.png +0 -0
  323. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2-dark.png +0 -0
  324. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2-light.png +0 -0
  325. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans-dark.png +0 -0
  326. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans-light.png +0 -0
  327. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2-dark.png +0 -0
  328. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2-light.png +0 -0
  329. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page-dark.png +0 -0
  330. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page-light.png +0 -0
  331. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface-dark.png +0 -0
  332. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface-light.png +0 -0
  333. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2-dark.png +0 -0
  334. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2-light.png +0 -0
  335. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +64 -8
  336. nautobot/project-static/docs/user-guide/feature-guides/load-balancers.html +64 -8
  337. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +64 -8
  338. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +64 -8
  339. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +64 -8
  340. nautobot/project-static/docs/user-guide/index.html +64 -8
  341. nautobot/project-static/docs/user-guide/platform-functionality/approval-workflow.html +64 -8
  342. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +64 -8
  343. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +64 -8
  344. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +64 -8
  345. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +64 -8
  346. nautobot/project-static/docs/user-guide/platform-functionality/data-validation.html +64 -8
  347. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +64 -8
  348. nautobot/project-static/docs/user-guide/platform-functionality/echarts.html +64 -8
  349. nautobot/project-static/docs/user-guide/platform-functionality/events.html +64 -8
  350. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +64 -8
  351. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +64 -8
  352. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +64 -8
  353. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +64 -8
  354. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +64 -8
  355. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +64 -8
  356. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +64 -8
  357. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +64 -8
  358. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +64 -8
  359. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +64 -8
  360. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +64 -8
  361. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +64 -8
  362. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +64 -8
  363. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +64 -8
  364. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +64 -8
  365. nautobot/project-static/docs/user-guide/platform-functionality/note.html +64 -8
  366. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +64 -8
  367. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +64 -8
  368. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +64 -8
  369. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +64 -8
  370. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +116 -34
  371. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +64 -8
  372. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +64 -8
  373. nautobot/project-static/docs/user-guide/platform-functionality/role.html +64 -8
  374. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +64 -8
  375. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +64 -8
  376. nautobot/project-static/docs/user-guide/platform-functionality/status.html +64 -8
  377. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +64 -8
  378. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +64 -8
  379. nautobot/project-static/docs/user-guide/platform-functionality/user-interface/configurablecolumns.html +64 -8
  380. nautobot/project-static/docs/user-guide/platform-functionality/user-interface/savedview.html +64 -8
  381. nautobot/project-static/docs/user-guide/platform-functionality/user-interface/search.html +64 -8
  382. nautobot/project-static/docs/user-guide/platform-functionality/users/groups.html +64 -8
  383. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +64 -8
  384. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +64 -8
  385. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +64 -8
  386. nautobot/tenancy/tables.py +1 -1
  387. nautobot/ui/package-lock.json +36 -36
  388. nautobot/ui/package.json +3 -3
  389. nautobot/ui/src/scss/nautobot.scss +2 -1
  390. nautobot/users/models.py +33 -0
  391. nautobot/users/tests/test_models.py +83 -0
  392. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/METADATA +4 -4
  393. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/RECORD +397 -386
  394. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant.png +0 -0
  395. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device.png +0 -0
  396. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2.png +0 -0
  397. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans.png +0 -0
  398. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2.png +0 -0
  399. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page.png +0 -0
  400. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface.png +0 -0
  401. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2.png +0 -0
  402. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/LICENSE.txt +0 -0
  403. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/NOTICE +0 -0
  404. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/WHEEL +0 -0
  405. {nautobot-3.0.3.dist-info → nautobot-3.0.5.dist-info}/entry_points.txt +0 -0
@@ -974,6 +974,34 @@
974
974
 
975
975
 
976
976
 
977
+ <li class="md-nav__item">
978
+ <a href="../../administration/upgrading/postgresql.html" class="md-nav__link">
979
+
980
+
981
+
982
+ <span class="md-ellipsis">
983
+
984
+
985
+ Upgrading PostgreSQL
986
+
987
+
988
+
989
+ </span>
990
+
991
+
992
+
993
+ </a>
994
+ </li>
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
977
1005
  <li class="md-nav__item">
978
1006
  <a href="../../administration/upgrading/upgrading.html" class="md-nav__link">
979
1007
 
@@ -1014,7 +1042,7 @@
1014
1042
 
1015
1043
 
1016
1044
 
1017
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3">
1045
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4">
1018
1046
 
1019
1047
 
1020
1048
  <div class="md-nav__link md-nav__container">
@@ -1036,14 +1064,14 @@
1036
1064
  </a>
1037
1065
 
1038
1066
 
1039
- <label class="md-nav__link " for="__nav_2_1_2_3" id="__nav_2_1_2_3_label" tabindex="0">
1067
+ <label class="md-nav__link " for="__nav_2_1_2_4" id="__nav_2_1_2_4_label" tabindex="0">
1040
1068
  <span class="md-nav__icon md-icon"></span>
1041
1069
  </label>
1042
1070
 
1043
1071
  </div>
1044
1072
 
1045
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_3_label" aria-expanded="false">
1046
- <label class="md-nav__title" for="__nav_2_1_2_3">
1073
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_4_label" aria-expanded="false">
1074
+ <label class="md-nav__title" for="__nav_2_1_2_4">
1047
1075
  <span class="md-nav__icon md-icon"></span>
1048
1076
 
1049
1077
 
@@ -1099,7 +1127,7 @@
1099
1127
 
1100
1128
 
1101
1129
 
1102
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3_2">
1130
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4_2">
1103
1131
 
1104
1132
 
1105
1133
  <div class="md-nav__link md-nav__container">
@@ -1121,14 +1149,14 @@
1121
1149
  </a>
1122
1150
 
1123
1151
 
1124
- <label class="md-nav__link " for="__nav_2_1_2_3_2" id="__nav_2_1_2_3_2_label" tabindex="0">
1152
+ <label class="md-nav__link " for="__nav_2_1_2_4_2" id="__nav_2_1_2_4_2_label" tabindex="0">
1125
1153
  <span class="md-nav__icon md-icon"></span>
1126
1154
  </label>
1127
1155
 
1128
1156
  </div>
1129
1157
 
1130
- <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_3_2_label" aria-expanded="false">
1131
- <label class="md-nav__title" for="__nav_2_1_2_3_2">
1158
+ <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_4_2_label" aria-expanded="false">
1159
+ <label class="md-nav__title" for="__nav_2_1_2_4_2">
1132
1160
  <span class="md-nav__icon md-icon"></span>
1133
1161
 
1134
1162
 
@@ -8932,6 +8960,34 @@
8932
8960
 
8933
8961
 
8934
8962
 
8963
+
8964
+
8965
+
8966
+
8967
+
8968
+
8969
+ <li class="md-nav__item">
8970
+ <a href="../../../development/apps/api/models/queryset.html" class="md-nav__link">
8971
+
8972
+
8973
+
8974
+ <span class="md-ellipsis">
8975
+
8976
+
8977
+ QuerySet
8978
+
8979
+
8980
+
8981
+ </span>
8982
+
8983
+
8984
+
8985
+ </a>
8986
+ </li>
8987
+
8988
+
8989
+
8990
+
8935
8991
  </ul>
8936
8992
  </nav>
8937
8993
 
@@ -974,6 +974,34 @@
974
974
 
975
975
 
976
976
 
977
+ <li class="md-nav__item">
978
+ <a href="../administration/upgrading/postgresql.html" class="md-nav__link">
979
+
980
+
981
+
982
+ <span class="md-ellipsis">
983
+
984
+
985
+ Upgrading PostgreSQL
986
+
987
+
988
+
989
+ </span>
990
+
991
+
992
+
993
+ </a>
994
+ </li>
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
977
1005
  <li class="md-nav__item">
978
1006
  <a href="../administration/upgrading/upgrading.html" class="md-nav__link">
979
1007
 
@@ -1014,7 +1042,7 @@
1014
1042
 
1015
1043
 
1016
1044
 
1017
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3">
1045
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4">
1018
1046
 
1019
1047
 
1020
1048
  <div class="md-nav__link md-nav__container">
@@ -1036,14 +1064,14 @@
1036
1064
  </a>
1037
1065
 
1038
1066
 
1039
- <label class="md-nav__link " for="__nav_2_1_2_3" id="__nav_2_1_2_3_label" tabindex="0">
1067
+ <label class="md-nav__link " for="__nav_2_1_2_4" id="__nav_2_1_2_4_label" tabindex="0">
1040
1068
  <span class="md-nav__icon md-icon"></span>
1041
1069
  </label>
1042
1070
 
1043
1071
  </div>
1044
1072
 
1045
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_3_label" aria-expanded="false">
1046
- <label class="md-nav__title" for="__nav_2_1_2_3">
1073
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_4_label" aria-expanded="false">
1074
+ <label class="md-nav__title" for="__nav_2_1_2_4">
1047
1075
  <span class="md-nav__icon md-icon"></span>
1048
1076
 
1049
1077
 
@@ -1099,7 +1127,7 @@
1099
1127
 
1100
1128
 
1101
1129
 
1102
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3_2">
1130
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_4_2">
1103
1131
 
1104
1132
 
1105
1133
  <div class="md-nav__link md-nav__container">
@@ -1121,14 +1149,14 @@
1121
1149
  </a>
1122
1150
 
1123
1151
 
1124
- <label class="md-nav__link " for="__nav_2_1_2_3_2" id="__nav_2_1_2_3_2_label" tabindex="0">
1152
+ <label class="md-nav__link " for="__nav_2_1_2_4_2" id="__nav_2_1_2_4_2_label" tabindex="0">
1125
1153
  <span class="md-nav__icon md-icon"></span>
1126
1154
  </label>
1127
1155
 
1128
1156
  </div>
1129
1157
 
1130
- <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_3_2_label" aria-expanded="false">
1131
- <label class="md-nav__title" for="__nav_2_1_2_3_2">
1158
+ <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_4_2_label" aria-expanded="false">
1159
+ <label class="md-nav__title" for="__nav_2_1_2_4_2">
1132
1160
  <span class="md-nav__icon md-icon"></span>
1133
1161
 
1134
1162
 
@@ -9039,6 +9067,34 @@
9039
9067
 
9040
9068
 
9041
9069
 
9070
+
9071
+
9072
+
9073
+
9074
+
9075
+
9076
+ <li class="md-nav__item">
9077
+ <a href="../../development/apps/api/models/queryset.html" class="md-nav__link">
9078
+
9079
+
9080
+
9081
+ <span class="md-ellipsis">
9082
+
9083
+
9084
+ QuerySet
9085
+
9086
+
9087
+
9088
+ </span>
9089
+
9090
+
9091
+
9092
+ </a>
9093
+ </li>
9094
+
9095
+
9096
+
9097
+
9042
9098
  </ul>
9043
9099
  </nav>
9044
9100
 
@@ -35,7 +35,7 @@ class TenantColumn(tables.TemplateColumn):
35
35
  {% elif record.vrf.tenant %}
36
36
  <a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
37
37
  {% else %}
38
- &mdash;
38
+ <span class="text-secondary">&mdash;</span>
39
39
  {% endif %}
40
40
  """
41
41
 
@@ -41,10 +41,10 @@
41
41
  "npm-run-all2": "^8.0.4",
42
42
  "postcss": "^8.5.6",
43
43
  "postcss-loader": "^8.2.0",
44
- "prettier": "^3.6.2",
45
- "sass": "^1.94.2",
44
+ "prettier": "^3.7.4",
45
+ "sass": "^1.97.1",
46
46
  "sass-loader": "^16.0.6",
47
- "webpack": "^5.98.0",
47
+ "webpack": "^5.104.1",
48
48
  "webpack-cli": "^6.0.1"
49
49
  }
50
50
  },
@@ -98,9 +98,9 @@
98
98
  }
99
99
  },
100
100
  "node_modules/@codemirror/state": {
101
- "version": "6.5.2",
102
- "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz",
103
- "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==",
101
+ "version": "6.5.3",
102
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.3.tgz",
103
+ "integrity": "sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==",
104
104
  "license": "MIT",
105
105
  "peer": true,
106
106
  "dependencies": {
@@ -108,9 +108,9 @@
108
108
  }
109
109
  },
110
110
  "node_modules/@codemirror/view": {
111
- "version": "6.39.4",
112
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.4.tgz",
113
- "integrity": "sha512-xMF6OfEAUVY5Waega4juo1QGACfNkNF+aJLqpd8oUJz96ms2zbfQ9Gh35/tI3y8akEV31FruKfj7hBnIU/nkqA==",
111
+ "version": "6.39.8",
112
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.8.tgz",
113
+ "integrity": "sha512-1rASYd9Z/mE3tkbC9wInRlCNyCkSn+nLsiQKZhEDUUJiUfs/5FHDpCUDaQpoTIaNGeDc6/bhaEAyLmeEucEFPw==",
114
114
  "license": "MIT",
115
115
  "peer": true,
116
116
  "dependencies": {
@@ -131,9 +131,9 @@
131
131
  }
132
132
  },
133
133
  "node_modules/@eslint-community/eslint-utils": {
134
- "version": "4.9.0",
135
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
136
- "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
134
+ "version": "4.9.1",
135
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
136
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
137
137
  "dev": true,
138
138
  "license": "MIT",
139
139
  "dependencies": {
@@ -481,9 +481,9 @@
481
481
  }
482
482
  },
483
483
  "node_modules/@lezer/common": {
484
- "version": "1.4.0",
485
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.4.0.tgz",
486
- "integrity": "sha512-DVeMRoGrgn/k45oQNu189BoW4SZwgZFzJ1+1TV5j2NJ/KFC83oa/enRqZSGshyeMk5cPWMhsKs9nx+8o0unwGg==",
484
+ "version": "1.5.0",
485
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz",
486
+ "integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==",
487
487
  "license": "MIT",
488
488
  "peer": true
489
489
  },
@@ -1146,9 +1146,9 @@
1146
1146
  "license": "MIT"
1147
1147
  },
1148
1148
  "node_modules/@types/node": {
1149
- "version": "25.0.2",
1150
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.2.tgz",
1151
- "integrity": "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==",
1149
+ "version": "25.0.3",
1150
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
1151
+ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
1152
1152
  "devOptional": true,
1153
1153
  "license": "MIT",
1154
1154
  "dependencies": {
@@ -1702,9 +1702,9 @@
1702
1702
  "license": "MIT"
1703
1703
  },
1704
1704
  "node_modules/baseline-browser-mapping": {
1705
- "version": "2.9.8",
1706
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.8.tgz",
1707
- "integrity": "sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==",
1705
+ "version": "2.9.11",
1706
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz",
1707
+ "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==",
1708
1708
  "dev": true,
1709
1709
  "license": "Apache-2.0",
1710
1710
  "bin": {
@@ -1857,9 +1857,9 @@
1857
1857
  }
1858
1858
  },
1859
1859
  "node_modules/caniuse-lite": {
1860
- "version": "1.0.30001760",
1861
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
1862
- "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
1860
+ "version": "1.0.30001762",
1861
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz",
1862
+ "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==",
1863
1863
  "dev": true,
1864
1864
  "funding": [
1865
1865
  {
@@ -2794,9 +2794,9 @@
2794
2794
  }
2795
2795
  },
2796
2796
  "node_modules/esquery": {
2797
- "version": "1.6.0",
2798
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
2799
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
2797
+ "version": "1.7.0",
2798
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
2799
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
2800
2800
  "dev": true,
2801
2801
  "license": "BSD-3-Clause",
2802
2802
  "dependencies": {
@@ -5432,9 +5432,9 @@
5432
5432
  }
5433
5433
  },
5434
5434
  "node_modules/sass": {
5435
- "version": "1.97.0",
5436
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.0.tgz",
5437
- "integrity": "sha512-KR0igP1z4avUJetEuIeOdDlwaUDvkH8wSx7FdSjyYBS3dpyX3TzHfAMO0G1Q4/3cdjcmi3r7idh+KCmKqS+KeQ==",
5435
+ "version": "1.97.1",
5436
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz",
5437
+ "integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==",
5438
5438
  "dev": true,
5439
5439
  "license": "MIT",
5440
5440
  "dependencies": {
@@ -6326,9 +6326,9 @@
6326
6326
  "peer": true
6327
6327
  },
6328
6328
  "node_modules/watchpack": {
6329
- "version": "2.4.4",
6330
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
6331
- "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
6329
+ "version": "2.5.0",
6330
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz",
6331
+ "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==",
6332
6332
  "dev": true,
6333
6333
  "license": "MIT",
6334
6334
  "dependencies": {
@@ -6340,9 +6340,9 @@
6340
6340
  }
6341
6341
  },
6342
6342
  "node_modules/webpack": {
6343
- "version": "5.104.0",
6344
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz",
6345
- "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==",
6343
+ "version": "5.104.1",
6344
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
6345
+ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
6346
6346
  "dev": true,
6347
6347
  "license": "MIT",
6348
6348
  "dependencies": {
nautobot/ui/package.json CHANGED
@@ -47,10 +47,10 @@
47
47
  "npm-run-all2": "^8.0.4",
48
48
  "postcss": "^8.5.6",
49
49
  "postcss-loader": "^8.2.0",
50
- "prettier": "^3.6.2",
51
- "sass": "^1.94.2",
50
+ "prettier": "^3.7.4",
51
+ "sass": "^1.97.1",
52
52
  "sass-loader": "^16.0.6",
53
- "webpack": "^5.98.0",
53
+ "webpack": "^5.104.1",
54
54
  "webpack-cli": "^6.0.1"
55
55
  },
56
56
  "devEngines": {
@@ -1526,12 +1526,13 @@ body {
1526
1526
  @include transition(padding-inline .35s ease);
1527
1527
  display: grid;
1528
1528
  grid-template-areas:
1529
+ "sidenav banner-global-area drawer"
1529
1530
  "sidenav header drawer"
1530
1531
  "sidenav main-content drawer"
1531
1532
  "sidenav banner-bottom-area drawer"
1532
1533
  "sidenav footer drawer";
1533
1534
  grid-template-columns: fit-content(0) minmax(0, 1fr) fit-content(0);
1534
- grid-template-rows: fit-content(0) 1fr fit-content(0) fit-content(0);
1535
+ grid-template-rows: fit-content(0) fit-content(0) 1fr fit-content(0) fit-content(0);
1535
1536
  overflow-y: scroll;
1536
1537
 
1537
1538
  #sidenav {
nautobot/users/models.py CHANGED
@@ -14,6 +14,7 @@ from nautobot.core.constants import CHARFIELD_MAX_LENGTH
14
14
  from nautobot.core.models import BaseManager, BaseModel, CompositeKeyQuerySetMixin
15
15
  from nautobot.core.models.fields import JSONArrayField
16
16
  from nautobot.core.utils.data import flatten_dict
17
+ from nautobot.core.utils.permissions import resolve_permission
17
18
  from nautobot.extras.models.change_logging import ChangeLoggedModel
18
19
 
19
20
  __all__ = (
@@ -73,6 +74,38 @@ class User(BaseModel, AbstractUser):
73
74
  db_table = "auth_user"
74
75
  ordering = ["username"]
75
76
 
77
+ def has_perm(self, perm, obj=None):
78
+ """
79
+ Override Django's default permission check to enforce read-only access
80
+ during Nautobot Version Control time-travel mode.
81
+
82
+ If the ``nautobot_version_control`` plugin is installed and time-travel
83
+ mode is active, all non-view permissions (e.g. add, change, delete) are
84
+ explicitly denied, regardless of the user's role or superuser status.
85
+
86
+ When the plugin is not installed or time-travel mode is inactive, this
87
+ method delegates entirely to Django's standard permission handling via
88
+ the parent implementation.
89
+
90
+ Args:
91
+ perm (str): Permission string in the form "app_label.codename".
92
+ obj (Optional[Model]): Optional object-level permission target.
93
+
94
+ Returns:
95
+ bool: False when time-travel mode is active and the requested
96
+ permission is not a view permission; otherwise, the boolean result
97
+ returned by Django's default permission resolution logic.
98
+ """
99
+ if "nautobot_version_control" in settings.PLUGINS:
100
+ from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
101
+
102
+ if get_time_travel_datetime() is not None:
103
+ _app_label, action, _model_name = resolve_permission(perm)
104
+ if action != "view":
105
+ return False
106
+
107
+ return super().has_perm(perm, obj)
108
+
76
109
  def get_config(self, path, default=None):
77
110
  """
78
111
  Retrieve a configuration parameter specified by its dotted path. Example:
@@ -1,4 +1,8 @@
1
+ from datetime import date, timedelta
2
+ from unittest import mock
3
+
1
4
  from django.contrib.auth import get_user_model
5
+ from django.test.utils import override_settings
2
6
 
3
7
  from nautobot.core.testing.models import ModelTestCases
4
8
  from nautobot.users.models import ObjectPermission, Token
@@ -121,3 +125,82 @@ class UserConfigTest(ModelTestCases.BaseModelTestCase):
121
125
 
122
126
  # Clear a non-existing value; should fail silently
123
127
  self.user.clear_config("invalid")
128
+
129
+
130
+ @override_settings(PLUGINS=["nautobot_version_control"])
131
+ class UserHasPermTest(ModelTestCases.BaseModelTestCase):
132
+ model = User
133
+
134
+ def setUp(self):
135
+ self.user = User.objects.create_user(username="testuser")
136
+ self.add_permissions("dcim.add_device", "dcim.view_device")
137
+
138
+ @mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
139
+ def test_time_travel_blocks_non_view_permission(self, mock_super_has_perm):
140
+ with mock.patch.dict(
141
+ "sys.modules",
142
+ {
143
+ "nautobot_version_control.utils": mock.MagicMock(),
144
+ },
145
+ ):
146
+ from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
147
+
148
+ get_time_travel_datetime.return_value = (date.today() + timedelta(days=1)).isoformat()
149
+
150
+ perm = "dcim.add_device"
151
+ result = self.user.has_perm(perm)
152
+ self.assertFalse(result)
153
+ mock_super_has_perm.assert_not_called()
154
+
155
+ @mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
156
+ def test_time_travel_blocks_non_view_permission_for_superuser(self, mock_super_has_perm):
157
+ with mock.patch.dict(
158
+ "sys.modules",
159
+ {
160
+ "nautobot_version_control.utils": mock.MagicMock(),
161
+ },
162
+ ):
163
+ from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
164
+
165
+ get_time_travel_datetime.return_value = date.today() + timedelta(days=1)
166
+ perm = "dcim.add_device"
167
+ self.user.is_superuser = True
168
+ self.user.save()
169
+
170
+ self.assertTrue(self.user.is_superuser)
171
+
172
+ result = self.user.has_perm(perm)
173
+ self.assertFalse(result)
174
+ mock_super_has_perm.assert_not_called()
175
+
176
+ @mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
177
+ def test_time_travel_allows_view_permission(self, mock_super_has_perm):
178
+ with mock.patch.dict(
179
+ "sys.modules",
180
+ {
181
+ "nautobot_version_control.utils": mock.MagicMock(),
182
+ },
183
+ ):
184
+ from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
185
+
186
+ get_time_travel_datetime.return_value = date.today() + timedelta(days=1)
187
+ perm = "dcim.view_device"
188
+ result = self.user.has_perm(perm)
189
+ self.assertTrue(result)
190
+ mock_super_has_perm.assert_called_once_with(perm, None)
191
+
192
+ @mock.patch("django.contrib.auth.models.AbstractUser.has_perm")
193
+ def test_no_time_travel_does_not_block_permissions(self, mock_super_has_perm):
194
+ with mock.patch.dict(
195
+ "sys.modules",
196
+ {
197
+ "nautobot_version_control.utils": mock.MagicMock(),
198
+ },
199
+ ):
200
+ from nautobot_version_control.utils import get_time_travel_datetime # pylint: disable=import-error
201
+
202
+ get_time_travel_datetime.return_value = None
203
+ perm = "dcim.add_device"
204
+ result = self.user.has_perm(perm)
205
+ self.assertTrue(result)
206
+ mock_super_has_perm.assert_called_once_with(perm, None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nautobot
3
- Version: 3.0.3
3
+ Version: 3.0.5
4
4
  Summary: Source of truth and network automation platform.
5
5
  License: Apache-2.0
6
6
  Keywords: Nautobot
@@ -22,12 +22,12 @@ Provides-Extra: napalm
22
22
  Provides-Extra: remote-storage
23
23
  Provides-Extra: sso
24
24
  Requires-Dist: Django (>=4.2.27,<4.3.0)
25
- Requires-Dist: GitPython (>=3.1.45,<3.2.0)
25
+ Requires-Dist: GitPython (>=3.1.46,<3.2.0)
26
26
  Requires-Dist: Jinja2 (>=3.1.6,<3.2.0)
27
27
  Requires-Dist: Markdown (>=3.8.2,<3.9.0)
28
28
  Requires-Dist: Pillow (>=12.0.0,<12.1.0)
29
29
  Requires-Dist: PyYAML (>=6.0.3,<6.1.0)
30
- Requires-Dist: celery (>=5.6.0,<5.7.0)
30
+ Requires-Dist: celery (>=5.6.1,<5.7.0)
31
31
  Requires-Dist: cryptography (>=46.0.3,<46.1.0)
32
32
  Requires-Dist: django-ajax-tables (>=1.1.1,<1.2.0)
33
33
  Requires-Dist: django-auth-ldap (>=5.2.0,<5.3.0) ; extra == "all" or extra == "ldap"
@@ -38,7 +38,7 @@ Requires-Dist: django-cors-headers (>=4.9.0,<4.10.0)
38
38
  Requires-Dist: django-db-file-storage (>=0.5.6.1,<0.6.0.0)
39
39
  Requires-Dist: django-extensions (>=4.1,<4.2)
40
40
  Requires-Dist: django-filter (>=25.1,<25.2)
41
- Requires-Dist: django-health-check (>=3.20.2,<3.21.0)
41
+ Requires-Dist: django-health-check (>=3.20.8,<3.21.0)
42
42
  Requires-Dist: django-jinja (>=2.11.0,<2.12.0)
43
43
  Requires-Dist: django-prometheus (>=2.4.1,<2.5.0)
44
44
  Requires-Dist: django-redis (>=6.0.0,<6.1.0)