nautobot 2.4.11__py3-none-any.whl → 2.4.13__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.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (364) hide show
  1. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -114
  2. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +1 -1
  3. nautobot/circuits/views.py +76 -6
  4. nautobot/cloud/navigation.py +1 -1
  5. nautobot/core/jobs/cleanup.py +4 -4
  6. nautobot/core/templates/components/panel/header_extra_content_table.html +12 -1
  7. nautobot/core/templates/components/panel/panel.html +4 -0
  8. nautobot/core/templates/generic/object_retrieve.html +1 -0
  9. nautobot/core/templates/inc/footer.html +4 -4
  10. nautobot/core/tests/test_utils.py +1 -177
  11. nautobot/core/tests/test_views.py +2 -2
  12. nautobot/core/ui/object_detail.py +1 -1
  13. nautobot/core/utils/module_loading.py +58 -63
  14. nautobot/dcim/filters/__init__.py +6 -0
  15. nautobot/dcim/filters/mixins.py +2 -1
  16. nautobot/dcim/migrations/0071_alter_consoleport_options_and_more.py +42 -0
  17. nautobot/dcim/models/device_components.py +10 -2
  18. nautobot/dcim/models/devices.py +28 -0
  19. nautobot/dcim/tables/devices.py +2 -0
  20. nautobot/dcim/templates/dcim/controller/base.html +1 -9
  21. nautobot/dcim/templates/dcim/controller_retrieve.html +2 -83
  22. nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +2 -25
  23. nautobot/dcim/templates/dcim/device.html +1 -34
  24. nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -1
  25. nautobot/dcim/templates/dcim/virtualchassis.html +2 -51
  26. nautobot/dcim/templates/dcim/virtualchassis_add.html +2 -22
  27. nautobot/dcim/templates/dcim/virtualchassis_create.html +22 -0
  28. nautobot/dcim/templates/dcim/virtualchassis_edit.html +2 -93
  29. nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +51 -0
  30. nautobot/dcim/templates/dcim/virtualchassis_update.html +93 -0
  31. nautobot/dcim/tests/test_models.py +1 -0
  32. nautobot/dcim/urls.py +2 -59
  33. nautobot/dcim/views.py +180 -191
  34. nautobot/extras/datasources/git.py +2 -2
  35. nautobot/extras/jobs_ui.py +208 -0
  36. nautobot/extras/models/tags.py +4 -0
  37. nautobot/extras/tables.py +1 -1
  38. nautobot/extras/templates/extras/configcontextschema_retrieve.html +2 -2
  39. nautobot/extras/templates/extras/inc/configcontext_data.html +1 -1
  40. nautobot/extras/templates/extras/inc/configcontext_format.html +6 -0
  41. nautobot/extras/templates/extras/inc/json_data.html +1 -1
  42. nautobot/extras/templates/extras/inc/json_format.html +2 -2
  43. nautobot/extras/templates/extras/job_detail.html +1 -326
  44. nautobot/extras/templates/extras/tag_retrieve.html +1 -51
  45. nautobot/extras/views.py +83 -29
  46. nautobot/ipam/migrations/0052_alter_ipaddress_index_together_and_more.py +28 -0
  47. nautobot/ipam/models.py +13 -1
  48. nautobot/ipam/tests/test_api.py +1 -3
  49. nautobot/ipam/utils/testing.py +76 -29
  50. nautobot/project-static/docs/404.html +2 -2
  51. nautobot/project-static/docs/apps/index.html +2 -2
  52. nautobot/project-static/docs/apps/nautobot-apps.html +2 -2
  53. nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js → bundle.56ea9cef.min.js} +2 -2
  54. nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js.map → bundle.56ea9cef.min.js.map} +2 -2
  55. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +2 -2
  56. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +2 -2
  57. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2 -2
  58. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +2 -2
  59. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +2 -2
  60. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +2 -2
  61. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +2 -2
  62. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +2 -2
  63. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +2 -2
  64. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +2 -2
  65. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +2 -2
  66. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +2 -2
  67. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +2 -2
  68. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +2 -2
  69. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2 -2
  70. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +2 -2
  71. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +2 -2
  72. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +2 -2
  73. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -2
  74. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +2 -2
  75. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2 -2
  76. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +2 -2
  77. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +2 -2
  78. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +4 -2
  79. nautobot/project-static/docs/development/apps/api/configuration-view.html +2 -2
  80. nautobot/project-static/docs/development/apps/api/database-backend-config.html +2 -2
  81. nautobot/project-static/docs/development/apps/api/models/django-admin.html +2 -2
  82. nautobot/project-static/docs/development/apps/api/models/global-search.html +2 -2
  83. nautobot/project-static/docs/development/apps/api/models/graphql.html +2 -2
  84. nautobot/project-static/docs/development/apps/api/models/index.html +2 -2
  85. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +2 -2
  86. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +2 -2
  87. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +2 -2
  88. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +2 -2
  89. nautobot/project-static/docs/development/apps/api/platform-features/index.html +2 -2
  90. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +2 -2
  91. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +2 -2
  92. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +2 -2
  93. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +2 -2
  94. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +2 -2
  95. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +2 -2
  96. nautobot/project-static/docs/development/apps/api/prometheus.html +2 -2
  97. nautobot/project-static/docs/development/apps/api/setup.html +2 -2
  98. nautobot/project-static/docs/development/apps/api/testing.html +2 -2
  99. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +2 -2
  100. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +2 -2
  101. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +2 -2
  102. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +2 -2
  103. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +2 -2
  104. nautobot/project-static/docs/development/apps/api/views/base-template.html +2 -2
  105. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +2 -2
  106. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +2 -2
  107. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +2 -2
  108. nautobot/project-static/docs/development/apps/api/views/index.html +2 -2
  109. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +2 -2
  110. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +2 -2
  111. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +2 -2
  112. nautobot/project-static/docs/development/apps/api/views/notes.html +2 -2
  113. nautobot/project-static/docs/development/apps/api/views/rest-api.html +2 -2
  114. nautobot/project-static/docs/development/apps/api/views/urls.html +2 -2
  115. nautobot/project-static/docs/development/apps/index.html +2 -2
  116. nautobot/project-static/docs/development/apps/migration/code-updates.html +2 -2
  117. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +2 -2
  118. nautobot/project-static/docs/development/apps/migration/from-v1.html +2 -2
  119. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +2 -2
  120. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +2 -2
  121. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +2 -2
  122. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +2 -2
  123. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +2 -2
  124. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +2 -2
  125. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +2 -2
  126. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +2 -2
  127. nautobot/project-static/docs/development/apps/porting-from-netbox.html +2 -2
  128. nautobot/project-static/docs/development/core/application-registry.html +2 -2
  129. nautobot/project-static/docs/development/core/best-practices.html +2 -2
  130. nautobot/project-static/docs/development/core/bootstrap-ui.html +2 -2
  131. nautobot/project-static/docs/development/core/caching.html +2 -2
  132. nautobot/project-static/docs/development/core/controllers.html +2 -2
  133. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +2 -2
  134. nautobot/project-static/docs/development/core/generic-views.html +2 -2
  135. nautobot/project-static/docs/development/core/getting-started.html +2 -2
  136. nautobot/project-static/docs/development/core/homepage.html +2 -2
  137. nautobot/project-static/docs/development/core/index.html +2 -2
  138. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +2 -2
  139. nautobot/project-static/docs/development/core/model-checklist.html +2 -2
  140. nautobot/project-static/docs/development/core/model-features.html +2 -2
  141. nautobot/project-static/docs/development/core/natural-keys.html +2 -2
  142. nautobot/project-static/docs/development/core/navigation-menu.html +2 -2
  143. nautobot/project-static/docs/development/core/release-checklist.html +2 -2
  144. nautobot/project-static/docs/development/core/role-internals.html +2 -2
  145. nautobot/project-static/docs/development/core/settings.html +2 -2
  146. nautobot/project-static/docs/development/core/style-guide.html +2 -2
  147. nautobot/project-static/docs/development/core/templates.html +2 -2
  148. nautobot/project-static/docs/development/core/testing.html +2 -2
  149. nautobot/project-static/docs/development/core/ui-component-framework.html +2 -2
  150. nautobot/project-static/docs/development/core/user-preferences.html +2 -2
  151. nautobot/project-static/docs/development/index.html +2 -2
  152. nautobot/project-static/docs/development/jobs/getting-started.html +2 -6
  153. nautobot/project-static/docs/development/jobs/index.html +2 -2
  154. nautobot/project-static/docs/development/jobs/installation.html +2 -2
  155. nautobot/project-static/docs/development/jobs/job-extensions.html +2 -2
  156. nautobot/project-static/docs/development/jobs/job-logging.html +2 -2
  157. nautobot/project-static/docs/development/jobs/job-patterns.html +2 -2
  158. nautobot/project-static/docs/development/jobs/job-structure.html +2 -2
  159. nautobot/project-static/docs/development/jobs/migration/from-v1.html +2 -2
  160. nautobot/project-static/docs/development/jobs/testing.html +2 -2
  161. nautobot/project-static/docs/index.html +2 -2
  162. nautobot/project-static/docs/objects.inv +0 -0
  163. nautobot/project-static/docs/overview/application_stack.html +2 -2
  164. nautobot/project-static/docs/overview/design_philosophy.html +2 -2
  165. nautobot/project-static/docs/release-notes/index.html +2 -2
  166. nautobot/project-static/docs/release-notes/version-1.0.html +2 -2
  167. nautobot/project-static/docs/release-notes/version-1.1.html +2 -2
  168. nautobot/project-static/docs/release-notes/version-1.2.html +2 -2
  169. nautobot/project-static/docs/release-notes/version-1.3.html +2 -2
  170. nautobot/project-static/docs/release-notes/version-1.4.html +2 -2
  171. nautobot/project-static/docs/release-notes/version-1.5.html +2 -2
  172. nautobot/project-static/docs/release-notes/version-1.6.html +2 -2
  173. nautobot/project-static/docs/release-notes/version-2.0.html +2 -2
  174. nautobot/project-static/docs/release-notes/version-2.1.html +2 -2
  175. nautobot/project-static/docs/release-notes/version-2.2.html +2 -2
  176. nautobot/project-static/docs/release-notes/version-2.3.html +2 -2
  177. nautobot/project-static/docs/release-notes/version-2.4.html +211 -2
  178. nautobot/project-static/docs/requirements.txt +1 -1
  179. nautobot/project-static/docs/search/search_index.json +1 -1
  180. nautobot/project-static/docs/sitemap.xml +299 -299
  181. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  182. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +2 -2
  183. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +2 -2
  184. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +2 -2
  185. nautobot/project-static/docs/user-guide/administration/configuration/index.html +2 -2
  186. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +2 -2
  187. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +2 -2
  188. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +2 -2
  189. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +2 -2
  190. nautobot/project-static/docs/user-guide/administration/guides/docker.html +2 -2
  191. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +2 -2
  192. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +2 -2
  193. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +2 -2
  194. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +2 -2
  195. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +2 -2
  196. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +2 -2
  197. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +2 -2
  198. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +2 -2
  199. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +2 -2
  200. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +2 -2
  201. nautobot/project-static/docs/user-guide/administration/installation/index.html +2 -2
  202. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -2
  203. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +2 -2
  204. nautobot/project-static/docs/user-guide/administration/installation/services.html +2 -2
  205. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +2 -2
  206. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +2 -2
  207. nautobot/project-static/docs/user-guide/administration/security/index.html +2 -2
  208. nautobot/project-static/docs/user-guide/administration/security/notices.html +2 -2
  209. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +2 -2
  210. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +2 -2
  211. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +2 -2
  212. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +2 -2
  213. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +2 -2
  214. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +2 -2
  215. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +2 -2
  216. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +2 -2
  217. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +2 -2
  218. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +2 -2
  219. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +2 -2
  220. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +2 -2
  221. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +2 -2
  222. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +2 -2
  223. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +2 -2
  224. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +2 -2
  225. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +2 -2
  226. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +2 -2
  227. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +2 -2
  228. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +2 -2
  229. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +2 -2
  230. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +2 -2
  231. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +2 -2
  232. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +2 -2
  233. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +2 -2
  234. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +2 -2
  235. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +2 -2
  236. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +2 -2
  237. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +2 -2
  238. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +2 -2
  239. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +2 -2
  240. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +2 -2
  241. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +2 -2
  242. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +2 -2
  243. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -2
  244. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +2 -2
  245. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +2 -2
  246. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +2 -2
  247. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +2 -2
  248. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +2 -2
  249. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +2 -2
  250. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +2 -2
  251. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +2 -2
  252. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +2 -2
  253. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +2 -2
  254. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +2 -2
  255. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +2 -2
  256. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +2 -2
  257. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +2 -2
  258. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +2 -2
  259. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +2 -2
  260. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +2 -2
  261. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +2 -2
  262. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +2 -2
  263. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +2 -2
  264. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +2 -2
  265. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +2 -2
  266. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +2 -2
  267. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +2 -2
  268. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +2 -2
  269. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +2 -2
  270. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +2 -2
  271. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +2 -2
  272. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +2 -2
  273. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +2 -2
  274. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +2 -2
  275. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +2 -2
  276. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +2 -2
  277. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +2 -2
  278. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +2 -2
  279. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +2 -2
  280. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +2 -2
  281. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +2 -2
  282. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +2 -2
  283. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +2 -2
  284. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +2 -2
  285. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +2 -2
  286. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +2 -2
  287. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +2 -2
  288. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +2 -2
  289. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +2 -2
  290. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +2 -2
  291. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +2 -2
  292. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +2 -2
  293. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +2 -2
  294. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +2 -2
  295. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +2 -2
  296. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +2 -2
  297. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +2 -2
  298. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +2 -2
  299. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +2 -2
  300. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +2 -2
  301. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +2 -2
  302. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +2 -2
  303. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +2 -2
  304. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +2 -2
  305. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +2 -2
  306. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +2 -2
  307. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +2 -2
  308. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +2 -2
  309. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +2 -2
  310. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +2 -2
  311. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +3 -3
  312. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +2 -2
  313. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +2 -2
  314. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +2 -2
  315. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +2 -2
  316. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +2 -2
  317. nautobot/project-static/docs/user-guide/index.html +2 -2
  318. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +2 -2
  319. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +2 -2
  320. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +2 -2
  321. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +2 -2
  322. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +2 -2
  323. nautobot/project-static/docs/user-guide/platform-functionality/events.html +2 -2
  324. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +2 -2
  325. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +2 -2
  326. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +2 -2
  327. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +2 -2
  328. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +2 -2
  329. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +2 -2
  330. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +2 -2
  331. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +2 -2
  332. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +2 -2
  333. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +2 -2
  334. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +2 -2
  335. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +2 -2
  336. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +2 -2
  337. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +2 -2
  338. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +2 -2
  339. nautobot/project-static/docs/user-guide/platform-functionality/note.html +2 -2
  340. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +2 -2
  341. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +2 -2
  342. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +2 -2
  343. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +2 -2
  344. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +2 -2
  345. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +2 -2
  346. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +2 -2
  347. nautobot/project-static/docs/user-guide/platform-functionality/role.html +2 -2
  348. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +2 -2
  349. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +2 -2
  350. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +2 -2
  351. nautobot/project-static/docs/user-guide/platform-functionality/status.html +2 -2
  352. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +2 -2
  353. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +2 -2
  354. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +2 -2
  355. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +2 -2
  356. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +2 -2
  357. nautobot/wireless/navigation.py +1 -1
  358. nautobot/wireless/tables.py +13 -5
  359. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/METADATA +1 -1
  360. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/RECORD +364 -357
  361. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/LICENSE.txt +0 -0
  362. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/NOTICE +0 -0
  363. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/WHEEL +0 -0
  364. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,6 @@
1
1
  from django.contrib.contenttypes.models import ContentType
2
2
  from django.db import models
3
+ from django.utils.html import format_html
3
4
  from taggit.models import GenericUUIDTaggedItemBase
4
5
 
5
6
  from nautobot.core.choices import ColorChoices
@@ -65,6 +66,9 @@ class Tag(
65
66
  class Meta:
66
67
  ordering = ["name"]
67
68
 
69
+ def get_color_display(self):
70
+ return format_html('<span class="label color-block" style="background-color: #{}">&nbsp;</span>', self.color)
71
+
68
72
  def validate_content_types_removal(self, content_types_id):
69
73
  """Validate content_types to be removed are not tagged to a model"""
70
74
  errors = {}
nautobot/extras/tables.py CHANGED
@@ -908,7 +908,7 @@ class JobResultTable(BaseTable):
908
908
  def __init__(self, *args, **kwargs):
909
909
  super().__init__(*args, **kwargs)
910
910
  # Only calculate log counts for "summary" column if it's actually visible.
911
- if self.columns["summary"].visible and isinstance(self.data.data, QuerySet):
911
+ if "summary" in self.columns and self.columns["summary"].visible and isinstance(self.data.data, QuerySet):
912
912
  self.data = TableData.from_data(
913
913
  self.data.data.annotate(
914
914
  debug_log_count=count_related(
@@ -39,10 +39,10 @@
39
39
  <div class="panel panel-default">
40
40
  <div class="panel-heading">
41
41
  <strong>Data Schema</strong>
42
- {% include 'extras/inc/json_format.html' %}
42
+ {% include 'extras/inc/configcontext_format.html' %}
43
43
  </div>
44
44
  <div class="panel-body">
45
- {% include 'extras/inc/json_data.html' with data=object.data_schema format=format %}
45
+ {% include 'extras/inc/json_data.html' with data=object.data_schema format=data_format %}
46
46
  </div>
47
47
  </div>
48
48
  {% endblock content_right_page %}
@@ -1 +1 @@
1
- {% include 'extras/inc/json_data.html' with data=object.data format=format %}
1
+ {% include 'extras/inc/json_data.html' with data=object.data format=data_format %}
@@ -0,0 +1,6 @@
1
+ <div class="pull-right">
2
+ <div class="btn-group btn-group-xs" role="group">
3
+ <a href="?data_format=json" class="btn btn-default{% if data_format == 'json' %} active{% endif %}">JSON</a>
4
+ <a href="?data_format=yaml" class="btn btn-default{% if data_format == 'yaml' %} active{% endif %}">YAML</a>
5
+ </div>
6
+ </div>
@@ -1,5 +1,5 @@
1
1
  {% load helpers %}
2
2
 
3
3
  <div class="rendered-json-data">
4
- <pre>{% if data_format == 'json' %}{{ data|render_json }}{% elif data_format == 'yaml' %}{{ data|render_yaml }}{% else %}{{ data }}{% endif %}</pre>
4
+ <pre>{% if format == 'json' %}{{ data|render_json }}{% elif format == 'yaml' %}{{ data|render_yaml }}{% else %}{{ data }}{% endif %}</pre>
5
5
  </div>
@@ -1,6 +1,6 @@
1
1
  <div class="pull-right">
2
2
  <div class="btn-group btn-group-xs" role="group">
3
- <a href="?data_format=json" class="btn btn-default{% if data_format == 'json' %} active{% endif %}">JSON</a>
4
- <a href="?data_format=yaml" class="btn btn-default{% if data_format == 'yaml' %} active{% endif %}">YAML</a>
3
+ <a href="?format=json" class="btn btn-default{% if format == 'json' %} active{% endif %}">JSON</a>
4
+ <a href="?format=yaml" class="btn btn-default{% if format == 'yaml' %} active{% endif %}">YAML</a>
5
5
  </div>
6
6
  </div>
@@ -1,327 +1,2 @@
1
1
  {% extends 'generic/object_retrieve.html' %}
2
- {% load helpers %}
3
- {% load perms %}
4
- {% load plugins %}
5
-
6
- {% block extra_breadcrumbs %}
7
- <li>{{ object.grouping }}</li>
8
- {% endblock extra_breadcrumbs %}
9
-
10
- {% block extra_buttons %}
11
- {% if perms.extras.run_job %}
12
- <a href="{% url 'extras:job_run' pk=object.pk %}" class="btn btn-primary"
13
- {% if not object.installed or not object.enabled %}disabled="disabled"{% endif %}>
14
- <i class="mdi mdi-play" aria-hidden="true"></i> Run/Schedule
15
- </a>
16
- {% endif %}
17
- {% endblock extra_buttons %}
18
-
19
- {% block content_left_page %}
20
- <div class="panel panel-default">
21
- <div class="panel-heading">
22
- <strong>Source Code</strong>
23
- </div>
24
- <table class="table table-hover panel-body attr-table">
25
- <tr>
26
- <td>Module</td>
27
- <td><code>{{ object.module_name }}</code></td>
28
- </tr>
29
- <tr>
30
- <td>Job Class</td>
31
- <td><code>{{ object.job_class_name }}</code></td>
32
- </tr>
33
- <tr>
34
- <td>Class Path</td>
35
- <td>
36
- <span class="hover_copy">
37
- <span id="job_class_path_copy"><code>{{ object.class_path }}</code></span>
38
- <button class="btn btn-inline btn-default hover_copy_button" data-clipboard-target="#job_class_path_copy">
39
- <span class="mdi mdi-content-copy"></span>
40
- </button>
41
- </span>
42
- </td>
43
- </tr>
44
- <tr>
45
- <td>Installed</td>
46
- <td>{{ object.installed | render_boolean }}</td>
47
- </tr>
48
- <tr>
49
- <td>Is Job Hook Receiver</td>
50
- <td>{{ object.is_job_hook_receiver | render_boolean }}</td>
51
- </tr>
52
- <tr>
53
- <td>Is Job Button Receiver</td>
54
- <td>{{ object.is_job_button_receiver | render_boolean }}</td>
55
- </tr>
56
- </table>
57
- </div>
58
- <div class="panel panel-default">
59
- <div class="panel-heading">
60
- <strong>Job</strong>
61
- </div>
62
- <table class="table table-hover panel-body attr-table">
63
- <tr>
64
- <td>Grouping</td>
65
- <td>{{ object.grouping }}</td>
66
- <td>
67
- {% if object.grouping_override %}
68
- <span class="text-muted">
69
- overridden; default is
70
- {% if object.installed %}
71
- “{{ object.job_class.grouping }}”
72
- {% else %}
73
- unknown (not currently installed)
74
- {% endif %}
75
- </span>
76
- {% endif %}
77
- </td>
78
- </tr>
79
- <tr>
80
- <td>Name</td>
81
- <td>{{ object.name }}</td>
82
- <td>
83
- {% if object.name_override %}
84
- <span class="text-muted">
85
- overridden; default is
86
- {% if object.installed %}
87
- “{{ object.job_class.name }}”
88
- {% else %}
89
- unknown (not currently installed)
90
- {% endif %}
91
- </span>
92
- {% endif %}
93
- </td>
94
- </tr>
95
- <tr>
96
- <td>Description</td>
97
- <td>{{ object.description | render_markdown | placeholder }}</td>
98
- <td>
99
- {% if object.description_override %}
100
- <div class="text-muted">
101
- overridden; default is:<br>
102
- {% if object.installed %}
103
- {{ object.job_class.description | render_markdown | placeholder }}
104
- {% else %}
105
- unknown (not currently installed)
106
- {% endif %}
107
- </div>
108
- {% endif %}
109
- </td>
110
- </tr>
111
- <tr>
112
- <td>Enabled</td>
113
- <td>{{ object.enabled | render_boolean }}</td>
114
- <td></td>
115
- </tr>
116
- <tr>
117
- <td>Job Results</td>
118
- <td>
119
- {% if object.job_results.exists %}
120
- <a href="{% url 'extras:jobresult_list' %}?job_model={{ object.name | urlencode }}">{{ object.job_results.count }}</a>
121
- {% else %}
122
- {{ None|placeholder }}
123
- {% endif %}
124
- </td>
125
- <td></td>
126
- </tr>
127
- </table>
128
- </div>
129
- {% endblock content_left_page %}
130
-
131
- {% block content_right_page %}
132
- <div class="panel panel-default">
133
- <div class="panel-heading">
134
- <strong>Properties</strong>
135
- </div>
136
- <table class="table table-hover panel-body attr-table">
137
- <tr>
138
- <td>Approval Required to Execute</td>
139
- <td>{{ object.approval_required | render_boolean }}</td>
140
- <td>
141
- {% if object.approval_required_override %}
142
- <span class="text-muted">
143
- overridden; default is
144
- {% if object.installed %}
145
- {{ object.job_class.approval_required | render_boolean }}
146
- {% else %}
147
- unknown (not currently installed)
148
- {% endif %}
149
- </span>
150
- {% endif %}
151
- </td>
152
- </tr>
153
- <tr>
154
- <td>Supports Dryrun</td>
155
- <td colspan="2">{{ object.supports_dryrun | render_boolean }}</td>
156
- </tr>
157
- <tr>
158
- <td>Default to Dryrun</td>
159
- <td>{{ object.dryrun_default | render_boolean }}</td>
160
- <td>
161
- {% if object.dryrun_default_override %}
162
- <span class="text-muted">
163
- overridden; default is
164
- {% if object.installed %}
165
- {{ object.job_class.dryrun_default | render_boolean }}
166
- {% else %}
167
- unknown (not currently installed)
168
- {% endif %}
169
- </span>
170
- {% endif %}
171
- </td>
172
- </tr>
173
- <tr>
174
- <td>Read-Only Execution</td>
175
- <td colspan="2">{{ object.read_only | render_boolean }}</td>
176
- </tr>
177
- <tr>
178
- <td>Hide from Default UI</td>
179
- <td>{{ object.hidden | render_boolean }}</td>
180
- <td>
181
- {% if object.hidden_override %}
182
- <span class="text-muted">
183
- overridden; default is
184
- {% if object.installed %}
185
- {{ object.job_class.hidden | render_boolean }}
186
- {% else %}
187
- unknown (not currently installed)
188
- {% endif %}
189
- </span>
190
- {% endif %}
191
- </td>
192
- </tr>
193
- <tr>
194
- <td>Has Sensitive Variables</td>
195
- <td>{{ object.has_sensitive_variables | render_boolean }}</td>
196
- <td>
197
- {% if object.has_sensitive_variables_override %}
198
- <span class="text-muted">
199
- overridden; default is
200
- {% if object.installed %}
201
- {{ object.job_class.has_sensitive_variables | render_boolean }}
202
- {% else %}
203
- unknown (not currently installed)
204
- {% endif %}
205
- </span>
206
- {% endif %}
207
- </td>
208
- </tr>
209
- <tr>
210
- <td>Is Singleton</td>
211
- <td>{{ object.is_singleton | render_boolean }}</td>
212
- <td>
213
- {% if object.is_singleton_override %}
214
- <span class="text-muted">
215
- overridden; default is
216
- {% if object.installed %}
217
- {{ object.job_class.is_singleton | render_boolean }}
218
- {% else %}
219
- unknown (not currently installed)
220
- {% endif %}
221
- </span>
222
- {% endif %}
223
- </td>
224
- </tr>
225
- <tr>
226
- <td>Execution Soft Time Limit</td>
227
- <td>
228
- {% if object.soft_time_limit > 0 %}
229
- {{ object.soft_time_limit }} seconds
230
- {% else %}
231
- {{ "CELERY_TASK_SOFT_TIME_LIMIT" | settings_or_config }} seconds (system default)
232
- {% endif %}
233
- </td>
234
- <td>
235
- {% if object.soft_time_limit_override %}
236
- <span class="text-muted">
237
- overridden; default is
238
- {% if object.installed %}
239
- {% if object.job_class.soft_time_limit > 0 %}
240
- {{ object.job_class.soft_time_limit }} seconds
241
- {% else %}
242
- {{ "CELERY_TASK_SOFT_TIME_LIMIT" | settings_or_config }} seconds (system default)
243
- {% endif %}
244
- {% else %}
245
- unknown (not currently installed)
246
- {% endif %}
247
- </span>
248
- {% endif %}
249
- </td>
250
- </tr>
251
- <tr>
252
- <td>Execution Hard Time Limit</td>
253
- <td>
254
- {% if object.time_limit > 0 %}
255
- {{ object.time_limit }} seconds
256
- {% else %}
257
- {{ "CELERY_TASK_TIME_LIMIT" | settings_or_config }} seconds (system default)
258
- {% endif %}
259
- </td>
260
- <td>
261
- {% if object.time_limit_override %}
262
- <span class="text-muted">
263
- overridden; default is
264
- {% if object.installed %}
265
- {% if object.job_class.time_limit > 0 %}
266
- {{ object.job_class.time_limit }} seconds
267
- {% else %}
268
- {{ "CELERY_TASK_TIME_LIMIT" | settings_or_config }} seconds (system default)
269
- {% endif %}
270
- {% else %}
271
- unknown (not currently installed)
272
- {% endif %}
273
- </span>
274
- {% endif %}
275
- </td>
276
- </tr>
277
- <tr>
278
- <td>Job Queues</td>
279
- <td>
280
- {% if object.job_queues.exists %}
281
- <ul>
282
- {% for queue in object.job_queues.all %}
283
- <li>{{ queue|hyperlinked_object }}</li>
284
- {% endfor %}
285
- </ul>
286
- {% else %}
287
- {{ None|placeholder }}
288
- {% endif %}
289
- </td>
290
- <td>
291
- {% if object.job_queues_override %}
292
- <span class="text-muted">
293
- overridden; default is:<br>
294
- {% if object.installed %}
295
- {% include 'extras/inc/json_data.html' with data=object.job_class.task_queues format="json" %}
296
- {% else %}
297
- unknown (not currently installed)
298
- {% endif %}
299
- </span>
300
- {% endif %}
301
- </td>
302
- </tr>
303
- <tr>
304
- <td>Default Job Queue</td>
305
- <td>
306
- {{ object.default_job_queue|hyperlinked_object }}
307
- </td>
308
- <td>
309
- {% if object.default_job_queue_override %}
310
- <span class="text-muted">
311
- overridden; default is:
312
- {% if object.installed %}
313
- {% if object.job_class.task_queues|length > 1 %}
314
- {{ object.job_class.task_queues.0 }}
315
- {% else %}
316
- {{ None|placeholder }}
317
- {% endif %}
318
- {% else %}
319
- unknown (not currently installed)
320
- {% endif %}
321
- </span>
322
- {% endif %}
323
- </td>
324
- </tr>
325
- </table>
326
- </div>
327
- {% endblock content_right_page %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -1,52 +1,2 @@
1
1
  {% extends 'generic/object_retrieve.html' %}
2
- {% load helpers %}
3
-
4
- {% block content_left_page %}
5
- <div class="panel panel-default">
6
- <div class="panel-heading">
7
- <strong>Tag</strong>
8
- </div>
9
- <table class="table table-hover panel-body attr-table">
10
- <tr>
11
- <td>Name</td>
12
- <td>
13
- {{ object.name }}
14
- </td>
15
- </tr>
16
- <tr>
17
- <td>Tagged Items</td>
18
- <td>
19
- {{ items_count }}
20
- </td>
21
- </tr>
22
- <tr>
23
- <td>Color</td>
24
- <td>
25
- <span class="label color-block" style="background-color: #{{ object.color }}">&nbsp;</span>
26
- </td>
27
- </tr>
28
- <tr>
29
- <td>Content Type(s)</td>
30
- <td>
31
- <ul class="list-unstyled">
32
- {% for ct in content_types %}
33
- <li>{{ ct }}</li>
34
- {% endfor %}
35
- </ul>
36
- </td>
37
- </tr>
38
- <tr>
39
- <td>Description</td>
40
- <td>
41
- {{ object.description|placeholder }}
42
- </td>
43
- </tr>
44
- </table>
45
- </div>
46
- {% endblock content_left_page %}
47
-
48
- {% block content_right_page %}
49
- {% include 'panel_table.html' with table=items_table heading='Tagged Objects' %}
50
- {% include 'inc/paginator.html' with paginator=items_table.paginator page=items_table.page %}
51
- <div class="row"></div>
52
- {% endblock content_right_page %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
nautobot/extras/views.py CHANGED
@@ -26,6 +26,7 @@ from rest_framework.decorators import action
26
26
  from rest_framework.permissions import IsAuthenticated
27
27
 
28
28
  from nautobot.apps.ui import BaseTextPanel
29
+ from nautobot.core.choices import ButtonActionColorChoices
29
30
  from nautobot.core.constants import PAGINATE_COUNT_DEFAULT
30
31
  from nautobot.core.events import publish_event
31
32
  from nautobot.core.exceptions import FilterSetFieldNotFound
@@ -80,7 +81,7 @@ from nautobot.ipam.tables import IPAddressTable, PrefixTable, VLANTable
80
81
  from nautobot.virtualization.models import VirtualMachine, VMInterface
81
82
  from nautobot.virtualization.tables import VirtualMachineTable, VMInterfaceTable
82
83
 
83
- from . import filters, forms, tables
84
+ from . import filters, forms, jobs_ui, tables
84
85
  from .api import serializers
85
86
  from .choices import (
86
87
  DynamicGroupTypeChoices,
@@ -224,7 +225,7 @@ class ConfigContextUIViewSet(NautobotUIViewSet):
224
225
  weight=100,
225
226
  section=SectionChoices.FULL_WIDTH,
226
227
  label="Data",
227
- header_extra_content_template_path="extras/inc/json_format.html",
228
+ header_extra_content_template_path="extras/inc/configcontext_format.html",
228
229
  body_content_template_path="extras/inc/configcontext_data.html",
229
230
  ),
230
231
  AssignmentObjectFieldsPanel(
@@ -944,11 +945,13 @@ class DynamicGroupBulkDeleteView(generic.BulkDeleteView):
944
945
  filterset = filters.DynamicGroupFilterSet
945
946
 
946
947
 
947
- # 3.0 TODO: remove, deprecated since 2.3 (#5845)
948
948
  class ObjectDynamicGroupsView(generic.GenericView):
949
949
  """
950
950
  Present a list of dynamic groups associated to a particular object.
951
951
 
952
+ Note that this isn't currently widely used, as most object detail views currently render the table inline
953
+ rather than using this separate view. This may change in the future.
954
+
952
955
  base_template: Specify to explicitly identify the base object detail template to render.
953
956
  If not provided, "<app>/<model>.html", "<app>/<model>_retrieve.html", or "generic/object_retrieve.html"
954
957
  will be used, as per `get_base_template()`.
@@ -968,7 +971,6 @@ class ObjectDynamicGroupsView(generic.GenericView):
968
971
  data=obj.dynamic_groups.restrict(request.user, "view"), orderable=False
969
972
  )
970
973
  dynamicgroups_table.columns.hide("content_type")
971
- dynamicgroups_table.columns.hide("members")
972
974
 
973
975
  # Apply the request context
974
976
  paginate = {
@@ -1301,8 +1303,6 @@ class ImageAttachmentDeleteView(generic.ObjectDeleteView):
1301
1303
  #
1302
1304
  # Jobs
1303
1305
  #
1304
-
1305
-
1306
1306
  class JobListView(generic.ObjectListView):
1307
1307
  """
1308
1308
  Retrieve all of the available jobs from disk and the recorded JobResult (if any) for each.
@@ -1554,6 +1554,64 @@ class JobRunView(ObjectPermissionRequiredMixin, View):
1554
1554
  class JobView(generic.ObjectView):
1555
1555
  queryset = JobModel.objects.all()
1556
1556
  template_name = "extras/job_detail.html"
1557
+ object_detail_content = object_detail.ObjectDetailContent(
1558
+ panels=[
1559
+ object_detail.ObjectFieldsPanel(
1560
+ weight=100,
1561
+ section=SectionChoices.LEFT_HALF,
1562
+ label="Source Code",
1563
+ fields=[
1564
+ "module_name",
1565
+ "job_class_name",
1566
+ "class_path",
1567
+ "installed",
1568
+ "is_job_hook_receiver",
1569
+ "is_job_button_receiver",
1570
+ ],
1571
+ ),
1572
+ jobs_ui.JobObjectFieldsPanel(
1573
+ weight=200,
1574
+ section=SectionChoices.LEFT_HALF,
1575
+ label="Job",
1576
+ fields=["grouping", "name", "description", "enabled"],
1577
+ ),
1578
+ object_detail.ObjectsTablePanel(
1579
+ weight=100,
1580
+ section=SectionChoices.FULL_WIDTH,
1581
+ table_class=tables.JobResultTable,
1582
+ table_title="JobResults",
1583
+ table_filter=["job_model"],
1584
+ ),
1585
+ jobs_ui.JobObjectFieldsPanel(
1586
+ weight=100,
1587
+ section=SectionChoices.RIGHT_HALF,
1588
+ label="Properties",
1589
+ fields=[
1590
+ "approval_required",
1591
+ "supports_dryrun",
1592
+ "dryrun_default",
1593
+ "read_only",
1594
+ "hidden",
1595
+ "has_sensitive_variables",
1596
+ "is_singleton",
1597
+ "soft_time_limit",
1598
+ "time_limit",
1599
+ "job_queues",
1600
+ "default_job_queue",
1601
+ ],
1602
+ ),
1603
+ ],
1604
+ extra_buttons=[
1605
+ jobs_ui.JobRunScheduleButton(
1606
+ weight=100,
1607
+ link_name="extras:job_run",
1608
+ label="Run/Schedule",
1609
+ icon="mdi-play",
1610
+ color=ButtonActionColorChoices.SUBMIT,
1611
+ required_permissions=["extras.job_run"],
1612
+ ),
1613
+ ],
1614
+ )
1557
1615
 
1558
1616
 
1559
1617
  class JobEditView(generic.ObjectEditView):
@@ -2986,6 +3044,25 @@ class TagUIViewSet(NautobotUIViewSet):
2986
3044
  serializer_class = serializers.TagSerializer
2987
3045
  table_class = tables.TagTable
2988
3046
 
3047
+ object_detail_content = object_detail.ObjectDetailContent(
3048
+ panels=(
3049
+ object_detail.ObjectFieldsPanel(
3050
+ weight=100,
3051
+ section=SectionChoices.LEFT_HALF,
3052
+ fields="__all__",
3053
+ ),
3054
+ object_detail.ObjectsTablePanel(
3055
+ weight=100,
3056
+ section=SectionChoices.RIGHT_HALF,
3057
+ table_class=tables.TaggedItemTable,
3058
+ table_title="Tagged Objects",
3059
+ table_filter="tag",
3060
+ select_related_fields=["content_type"],
3061
+ prefetch_related_fields=["content_object"],
3062
+ ),
3063
+ ),
3064
+ )
3065
+
2989
3066
  def alter_queryset(self, request):
2990
3067
  queryset = super().alter_queryset(request)
2991
3068
 
@@ -2995,29 +3072,6 @@ class TagUIViewSet(NautobotUIViewSet):
2995
3072
 
2996
3073
  return queryset
2997
3074
 
2998
- def get_extra_context(self, request, instance):
2999
- # Only run this logic when retrieving a single object
3000
- if instance is None or self.action != "retrieve":
3001
- return super().get_extra_context(request, instance)
3002
- tagged_items = (
3003
- TaggedItem.objects.filter(tag=instance).select_related("content_type").prefetch_related("content_object")
3004
- )
3005
-
3006
- # Generate a table of all items tagged with this Tag
3007
- items_table = tables.TaggedItemTable(tagged_items)
3008
- paginate = {
3009
- "paginator_class": EnhancedPaginator,
3010
- "per_page": get_paginate_count(request),
3011
- }
3012
- RequestConfig(request, paginate).configure(items_table)
3013
-
3014
- return {
3015
- "items_count": tagged_items.count(),
3016
- "items_table": items_table,
3017
- "content_types": instance.content_types.order_by("app_label", "model"),
3018
- **super().get_extra_context(request, instance),
3019
- }
3020
-
3021
3075
 
3022
3076
  #
3023
3077
  # Teams
@@ -0,0 +1,28 @@
1
+ # Generated by Django 4.2.20 on 2025-07-17 16:10
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("ipam", "0051_added_optional_vrf_relationship_to_vdc"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterIndexTogether(
13
+ name="ipaddress",
14
+ index_together={("ip_version", "host", "mask_length")},
15
+ ),
16
+ migrations.AlterIndexTogether(
17
+ name="prefix",
18
+ index_together={
19
+ ("namespace", "ip_version", "network", "prefix_length"),
20
+ ("namespace", "network", "broadcast", "prefix_length"),
21
+ ("network", "broadcast", "prefix_length"),
22
+ },
23
+ ),
24
+ migrations.AlterIndexTogether(
25
+ name="vrf",
26
+ index_together={("namespace", "name", "rd")},
27
+ ),
28
+ ]