nautobot 2.4.16__py3-none-any.whl → 2.4.18__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 (434) hide show
  1. nautobot/apps/utils.py +2 -0
  2. nautobot/apps/views.py +2 -0
  3. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -8
  4. nautobot/circuits/templates/circuits/inc/circuit_termination_speed_fragment.html +9 -0
  5. nautobot/circuits/tests/integration/test_circuit.py +2 -2
  6. nautobot/circuits/views.py +32 -15
  7. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +3 -3
  8. nautobot/cloud/views.py +7 -0
  9. nautobot/core/apps/__init__.py +1 -0
  10. nautobot/core/celery/__init__.py +2 -1
  11. nautobot/core/filters.py +2 -2
  12. nautobot/core/settings.py +1 -0
  13. nautobot/core/settings.yaml +9 -0
  14. nautobot/core/tables.py +21 -23
  15. nautobot/core/templates/components/breadcrumbs.html +19 -0
  16. nautobot/core/templates/components/panel/panel.html +1 -1
  17. nautobot/core/templates/generic/object_changelog.html +0 -2
  18. nautobot/core/templates/generic/object_list.html +15 -12
  19. nautobot/core/templates/generic/object_notes.html +0 -2
  20. nautobot/core/templates/generic/object_retrieve.html +16 -9
  21. nautobot/core/templates/inc/paginator.html +3 -3
  22. nautobot/core/templates/inc/table.html +2 -2
  23. nautobot/core/templatetags/helpers.py +104 -6
  24. nautobot/core/templatetags/ui_framework.py +40 -5
  25. nautobot/core/testing/filters.py +37 -21
  26. nautobot/core/testing/mixins.py +1 -1
  27. nautobot/core/testing/views.py +27 -4
  28. nautobot/core/tests/test_tables.py +43 -6
  29. nautobot/core/tests/test_templatetags_ui_framework.py +146 -0
  30. nautobot/core/tests/test_titles.py +2 -2
  31. nautobot/core/tests/test_ui.py +14 -1
  32. nautobot/core/tests/test_views.py +45 -0
  33. nautobot/core/ui/breadcrumbs.py +13 -8
  34. nautobot/core/ui/bulk_buttons.py +53 -53
  35. nautobot/core/ui/object_detail.py +52 -9
  36. nautobot/core/ui/titles.py +9 -5
  37. nautobot/core/utils/data.py +13 -0
  38. nautobot/core/utils/deprecation.py +2 -0
  39. nautobot/core/views/__init__.py +24 -3
  40. nautobot/core/views/generic.py +42 -17
  41. nautobot/core/views/mixins.py +146 -12
  42. nautobot/core/views/utils.py +117 -0
  43. nautobot/dcim/migrations/0073_alter_powerport_power_factor_and_more.py +41 -0
  44. nautobot/dcim/models/device_component_templates.py +4 -2
  45. nautobot/dcim/models/device_components.py +3 -2
  46. nautobot/dcim/models/devices.py +4 -0
  47. nautobot/dcim/tables/__init__.py +2 -0
  48. nautobot/dcim/tables/devices.py +24 -0
  49. nautobot/dcim/tables/power.py +2 -2
  50. nautobot/dcim/templates/dcim/device/base.html +1 -11
  51. nautobot/dcim/templates/dcim/device_component.html +0 -19
  52. nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -16
  53. nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -4
  54. nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +1 -50
  55. nautobot/dcim/tests/test_views.py +41 -0
  56. nautobot/dcim/views.py +169 -39
  57. nautobot/extras/filters/mixins.py +1 -1
  58. nautobot/extras/forms/forms.py +15 -0
  59. nautobot/extras/models/customfields.py +45 -9
  60. nautobot/extras/models/groups.py +10 -1
  61. nautobot/extras/models/jobs.py +2 -2
  62. nautobot/extras/plugins/views.py +18 -5
  63. nautobot/extras/tables.py +4 -2
  64. nautobot/extras/templates/extras/configcontext_retrieve.html +1 -1
  65. nautobot/extras/templates/extras/configcontext_update.html +49 -49
  66. nautobot/extras/templates/extras/configcontextschema_retrieve.html +47 -47
  67. nautobot/extras/templates/extras/configcontextschema_update.html +18 -18
  68. nautobot/extras/templates/extras/customfield_retrieve.html +1 -128
  69. nautobot/extras/templates/extras/dynamicgroup.html +2 -99
  70. nautobot/extras/templates/extras/dynamicgroup_edit.html +2 -199
  71. nautobot/extras/templates/extras/dynamicgroup_retrieve.html +99 -0
  72. nautobot/extras/templates/extras/dynamicgroup_update.html +199 -0
  73. nautobot/extras/templates/extras/gitrepository.html +2 -82
  74. nautobot/extras/templates/extras/gitrepository_object_edit.html +2 -13
  75. nautobot/extras/templates/extras/gitrepository_retrieve.html +82 -0
  76. nautobot/extras/templates/extras/gitrepository_update.html +13 -0
  77. nautobot/extras/templates/extras/inc/job_table.html +1 -1
  78. nautobot/extras/templates/extras/inc/object_contact_header.html +2 -2
  79. nautobot/extras/templates/extras/note_retrieve.html +1 -53
  80. nautobot/extras/templates/extras/plugin_detail.html +3 -7
  81. nautobot/extras/templates/extras/plugins_list.html +0 -2
  82. nautobot/extras/templates/extras/tag_retrieve.html +1 -1
  83. nautobot/extras/templates/extras/tag_update.html +14 -14
  84. nautobot/extras/templates/extras/team_retrieve.html +1 -1
  85. nautobot/extras/tests/test_dynamicgroups.py +73 -18
  86. nautobot/extras/tests/test_models.py +216 -0
  87. nautobot/extras/tests/test_views.py +7 -2
  88. nautobot/extras/urls.py +2 -94
  89. nautobot/extras/views.py +425 -430
  90. nautobot/ipam/apps.py +1 -0
  91. nautobot/ipam/jobs/__init__.py +10 -0
  92. nautobot/ipam/jobs/cleanup.py +296 -0
  93. nautobot/ipam/models.py +301 -178
  94. nautobot/ipam/querysets.py +3 -3
  95. nautobot/ipam/signals.py +6 -1
  96. nautobot/ipam/templates/ipam/inc/ipadress_edit_header.html +3 -3
  97. nautobot/ipam/templates/ipam/inc/toggle_available.html +2 -2
  98. nautobot/ipam/templates/ipam/ipaddress_assign.html +1 -1
  99. nautobot/ipam/templates/ipam/prefix.html +0 -8
  100. nautobot/ipam/templates/ipam/prefix_list.html +1 -1
  101. nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -77
  102. nautobot/ipam/tests/test_api.py +5 -0
  103. nautobot/ipam/tests/test_jobs.py +454 -0
  104. nautobot/ipam/tests/test_models.py +677 -122
  105. nautobot/ipam/tests/test_querysets.py +46 -0
  106. nautobot/ipam/tests/test_views.py +40 -164
  107. nautobot/ipam/urls.py +0 -11
  108. nautobot/ipam/utils/migrations.py +1 -1
  109. nautobot/ipam/utils/testing.py +9 -4
  110. nautobot/ipam/views.py +175 -235
  111. nautobot/project-static/docs/404.html +9 -6
  112. nautobot/project-static/docs/apps/index.html +9 -6
  113. nautobot/project-static/docs/apps/nautobot-apps.html +9 -6
  114. nautobot/project-static/docs/assets/javascripts/bundle.92b07e13.min.js +16 -0
  115. nautobot/project-static/docs/assets/javascripts/{bundle.50899def.min.js.map → bundle.92b07e13.min.js.map} +2 -2
  116. nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js → search.973d3a69.min.js} +4 -4
  117. nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js.map → search.973d3a69.min.js.map} +1 -1
  118. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +9 -6
  119. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +9 -6
  120. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +9 -6
  121. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +9 -6
  122. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -7
  123. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +9 -6
  124. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +9 -6
  125. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +9 -6
  126. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9 -6
  127. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +9 -6
  128. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +9 -6
  129. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +9 -6
  130. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +9 -6
  131. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +9 -6
  132. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +9 -6
  133. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -8
  134. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +9 -6
  135. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +9 -6
  136. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -8
  137. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +81 -6
  138. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +73 -18
  139. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +9 -6
  140. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +69 -7
  141. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +402 -21
  142. nautobot/project-static/docs/development/apps/api/configuration-view.html +13 -10
  143. nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -8
  144. nautobot/project-static/docs/development/apps/api/models/django-admin.html +13 -10
  145. nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -7
  146. nautobot/project-static/docs/development/apps/api/models/graphql.html +18 -15
  147. nautobot/project-static/docs/development/apps/api/models/index.html +14 -11
  148. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +12 -9
  149. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +15 -12
  150. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +9 -6
  151. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +15 -12
  152. nautobot/project-static/docs/development/apps/api/platform-features/index.html +9 -6
  153. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -8
  154. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +16 -13
  155. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +12 -10305
  156. nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +10722 -0
  157. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +15 -12
  158. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +14 -11
  159. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +9 -6
  160. nautobot/project-static/docs/development/apps/api/prometheus.html +15 -12
  161. nautobot/project-static/docs/development/apps/api/setup.html +9 -6
  162. nautobot/project-static/docs/development/apps/api/testing.html +9 -6
  163. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +12 -9
  164. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +9 -6
  165. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +9 -6
  166. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +9 -6
  167. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +20 -17
  168. nautobot/project-static/docs/development/apps/api/views/base-template.html +9 -6
  169. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +15 -12
  170. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +14 -11
  171. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +9 -6
  172. nautobot/project-static/docs/development/apps/api/views/index.html +9 -6
  173. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -7
  174. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +24 -21
  175. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +12 -9
  176. nautobot/project-static/docs/development/apps/api/views/notes.html +10 -7
  177. nautobot/project-static/docs/development/apps/api/views/rest-api.html +19 -16
  178. nautobot/project-static/docs/development/apps/api/views/urls.html +11 -8
  179. nautobot/project-static/docs/development/apps/index.html +9 -6
  180. nautobot/project-static/docs/development/apps/migration/code-updates.html +19 -16
  181. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +9 -6
  182. nautobot/project-static/docs/development/apps/migration/from-v1.html +9 -6
  183. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +22 -19
  184. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +9 -6
  185. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +9 -6
  186. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +9 -6
  187. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9 -6
  188. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +14 -11
  189. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +27 -24
  190. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +20 -17
  191. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +20 -17
  192. nautobot/project-static/docs/development/apps/porting-from-netbox.html +9 -6
  193. nautobot/project-static/docs/development/core/application-registry.html +23 -20
  194. nautobot/project-static/docs/development/core/best-practices.html +23 -20
  195. nautobot/project-static/docs/development/core/bootstrap-ui.html +9 -6
  196. nautobot/project-static/docs/development/core/caching.html +9 -6
  197. nautobot/project-static/docs/development/core/controllers.html +9 -6
  198. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -7
  199. nautobot/project-static/docs/development/core/generic-views.html +9 -6
  200. nautobot/project-static/docs/development/core/getting-started.html +9 -21
  201. nautobot/project-static/docs/development/core/homepage.html +12 -9
  202. nautobot/project-static/docs/development/core/index.html +9 -6
  203. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9 -6
  204. nautobot/project-static/docs/development/core/model-checklist.html +9 -6
  205. nautobot/project-static/docs/development/core/model-features.html +11 -8
  206. nautobot/project-static/docs/development/core/natural-keys.html +21 -18
  207. nautobot/project-static/docs/development/core/navigation-menu.html +10 -7
  208. nautobot/project-static/docs/development/core/release-checklist.html +9 -6
  209. nautobot/project-static/docs/development/core/role-internals.html +9 -6
  210. nautobot/project-static/docs/development/core/settings.html +9 -6
  211. nautobot/project-static/docs/development/core/style-guide.html +32 -29
  212. nautobot/project-static/docs/development/core/templates.html +9 -6
  213. nautobot/project-static/docs/development/core/testing.html +10 -7
  214. nautobot/project-static/docs/development/core/ui-component-framework.html +42 -44
  215. nautobot/project-static/docs/development/core/user-preferences.html +9 -6
  216. nautobot/project-static/docs/development/index.html +9 -6
  217. nautobot/project-static/docs/development/jobs/getting-started.html +13 -10
  218. nautobot/project-static/docs/development/jobs/index.html +9 -6
  219. nautobot/project-static/docs/development/jobs/installation.html +23 -20
  220. nautobot/project-static/docs/development/jobs/job-extensions.html +25 -22
  221. nautobot/project-static/docs/development/jobs/job-logging.html +12 -9
  222. nautobot/project-static/docs/development/jobs/job-patterns.html +45 -42
  223. nautobot/project-static/docs/development/jobs/job-structure.html +53 -50
  224. nautobot/project-static/docs/development/jobs/migration/from-v1.html +23 -20
  225. nautobot/project-static/docs/development/jobs/testing.html +14 -11
  226. nautobot/project-static/docs/index.html +9 -6
  227. nautobot/project-static/docs/objects.inv +0 -0
  228. nautobot/project-static/docs/overview/application_stack.html +9 -6
  229. nautobot/project-static/docs/overview/design_philosophy.html +9 -6
  230. nautobot/project-static/docs/release-notes/index.html +9 -6
  231. nautobot/project-static/docs/release-notes/version-1.0.html +9 -6
  232. nautobot/project-static/docs/release-notes/version-1.1.html +9 -6
  233. nautobot/project-static/docs/release-notes/version-1.2.html +10 -7
  234. nautobot/project-static/docs/release-notes/version-1.3.html +9 -6
  235. nautobot/project-static/docs/release-notes/version-1.4.html +9 -6
  236. nautobot/project-static/docs/release-notes/version-1.5.html +13 -10
  237. nautobot/project-static/docs/release-notes/version-1.6.html +9 -6
  238. nautobot/project-static/docs/release-notes/version-2.0.html +9 -6
  239. nautobot/project-static/docs/release-notes/version-2.1.html +9 -6
  240. nautobot/project-static/docs/release-notes/version-2.2.html +9 -6
  241. nautobot/project-static/docs/release-notes/version-2.3.html +9 -6
  242. nautobot/project-static/docs/release-notes/version-2.4.html +489 -6
  243. nautobot/project-static/docs/search/search_index.json +1 -1
  244. nautobot/project-static/docs/sitemap.xml +301 -301
  245. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  246. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +15 -12
  247. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +9 -6
  248. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +16 -13
  249. nautobot/project-static/docs/user-guide/administration/configuration/index.html +9 -6
  250. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +9 -6
  251. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +38 -8
  252. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +9 -6
  253. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +9 -6
  254. nautobot/project-static/docs/user-guide/administration/guides/docker.html +9 -6
  255. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +9 -6
  256. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +9 -6
  257. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +9 -6
  258. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +9 -6
  259. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +9 -6
  260. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +16 -13
  261. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +9 -6
  262. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +9 -6
  263. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +9 -6
  264. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +9 -6
  265. nautobot/project-static/docs/user-guide/administration/installation/index.html +9 -6
  266. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +9 -6
  267. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +9 -6
  268. nautobot/project-static/docs/user-guide/administration/installation/services.html +12 -9
  269. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +13 -10
  270. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -7
  271. nautobot/project-static/docs/user-guide/administration/security/index.html +9 -6
  272. nautobot/project-static/docs/user-guide/administration/security/notices.html +9 -6
  273. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +9 -6
  274. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -7
  275. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +9 -6
  276. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +9 -6
  277. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +9 -6
  278. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +9 -6
  279. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +9 -6
  280. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +9 -6
  281. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +9 -6
  282. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +15 -12
  283. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +9 -6
  284. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +9 -6
  285. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +9 -6
  286. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +9 -6
  287. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +9 -6
  288. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +9 -6
  289. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +9 -6
  290. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +9 -6
  291. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +9 -6
  292. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +9 -6
  293. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +9 -6
  294. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +9 -6
  295. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +9 -6
  296. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +9 -6
  297. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +9 -6
  298. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +9 -6
  299. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +9 -6
  300. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +9 -6
  301. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +9 -6
  302. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +9 -6
  303. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +9 -6
  304. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +9 -6
  305. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +9 -6
  306. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +9 -6
  307. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +13 -10
  308. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +9 -6
  309. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +9 -6
  310. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +9 -6
  311. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +9 -6
  312. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +9 -6
  313. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +9 -6
  314. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +9 -6
  315. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +9 -6
  316. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +9 -6
  317. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +9 -6
  318. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +9 -6
  319. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +9 -6
  320. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +9 -6
  321. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +9 -6
  322. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +9 -6
  323. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +9 -6
  324. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +9 -6
  325. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +9 -6
  326. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +9 -6
  327. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +9 -6
  328. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +9 -6
  329. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +9 -6
  330. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +9 -6
  331. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +9 -6
  332. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +9 -6
  333. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +9 -6
  334. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +9 -6
  335. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +9 -6
  336. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +9 -6
  337. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +9 -6
  338. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9 -6
  339. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +9 -6
  340. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +9 -6
  341. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -8
  342. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -8
  343. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +41 -41
  344. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +9 -6
  345. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +197 -54
  346. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +9 -6
  347. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +9 -6
  348. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +9 -6
  349. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +9 -6
  350. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +9 -6
  351. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +9 -6
  352. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +9 -6
  353. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +9 -6
  354. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +9 -6
  355. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +9 -6
  356. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +9 -6
  357. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +9 -6
  358. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +9 -6
  359. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +9 -6
  360. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9 -6
  361. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9 -6
  362. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9 -6
  363. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9 -6
  364. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +9 -6
  365. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +9 -6
  366. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +9 -6
  367. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +9 -6
  368. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +9 -6
  369. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +9 -6
  370. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +9 -6
  371. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +9 -6
  372. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +9 -6
  373. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +9 -6
  374. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +9 -6
  375. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +9 -6
  376. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +13 -10
  377. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +9 -6
  378. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +9 -6
  379. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +9 -6
  380. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9 -6
  381. nautobot/project-static/docs/user-guide/index.html +9 -6
  382. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +9 -6
  383. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +9 -6
  384. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -7
  385. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +9 -6
  386. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +9 -6
  387. nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -8
  388. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +9 -6
  389. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +9 -6
  390. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +9 -6
  391. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +9 -6
  392. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +9 -6
  393. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +9 -6
  394. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +9 -6
  395. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +9 -6
  396. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +9 -6
  397. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +9 -6
  398. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9 -6
  399. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9 -6
  400. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +9 -6
  401. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +9 -6
  402. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +9 -6
  403. nautobot/project-static/docs/user-guide/platform-functionality/note.html +9 -6
  404. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +12 -9
  405. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +9 -6
  406. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9 -6
  407. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +9 -6
  408. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +9 -6
  409. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +9 -6
  410. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +9 -6
  411. nautobot/project-static/docs/user-guide/platform-functionality/role.html +9 -6
  412. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9 -6
  413. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -8
  414. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +9 -6
  415. nautobot/project-static/docs/user-guide/platform-functionality/status.html +9 -6
  416. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +9 -6
  417. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +9 -6
  418. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +9 -6
  419. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +9 -6
  420. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +9 -6
  421. nautobot/project-static/fonts/UFL.txt +96 -96
  422. nautobot/project-static/img/nautobot_icon.svg +32 -34
  423. nautobot/project-static/js/forms.js +35 -2
  424. nautobot/project-static/js/table_sorting_indicator.js +0 -2
  425. nautobot/virtualization/filters.py +7 -0
  426. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/METADATA +8 -8
  427. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/RECORD +431 -421
  428. nautobot/core/templates/inc/breadcrumbs.html +0 -14
  429. nautobot/project-static/docs/assets/javascripts/bundle.50899def.min.js +0 -16
  430. nautobot/project-static/docs/requirements.txt +0 -14
  431. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/LICENSE.txt +0 -0
  432. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/NOTICE +0 -0
  433. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/WHEEL +0 -0
  434. {nautobot-2.4.16.dist-info → nautobot-2.4.18.dist-info}/entry_points.txt +0 -0
@@ -1,82 +1,2 @@
1
- {% extends 'generic/object_retrieve.html' %}
2
- {% load helpers %}
3
-
4
- {% block extra_buttons %}
5
- {% if perms.extras.change_gitrepository %}
6
- <form class="form-inline" style="display: inline-block"
7
- method="post" action="{% url 'extras:gitrepository_dryrun' pk=object.pk %}">
8
- {% csrf_token %}
9
- <button type="submit" class="btn btn-info">
10
- <i class="mdi mdi-book-refresh" aria-hidden="true"></i> Dry-Run
11
- </button>
12
- </form>
13
- <form class="form-inline" style="display: inline-block"
14
- method="post" action="{% url 'extras:gitrepository_sync' pk=object.pk %}">
15
- {% csrf_token %}
16
- <button type="submit" class="btn btn-primary">
17
- <i class="mdi mdi-source-branch-sync" aria-hidden="true"></i> Sync
18
- </button>
19
- </form>
20
- {% endif %}
21
- {% endblock extra_buttons %}
22
-
23
- {% block extra_nav_tabs %}
24
- <li role="presentation"{% if active_tab == 'result' %} class="active"{% endif %}>
25
- <a href="{% url 'extras:gitrepository_result' pk=object.pk %}">Synchronization Status</a>
26
- </li>
27
- {% endblock extra_nav_tabs %}
28
-
29
- {% block content_left_page %}
30
- <div class="panel panel-default">
31
- <div class="panel-heading">
32
- <strong>Repository Details</strong>
33
- </div>
34
- <table class="table table-hover panel-body attr-table">
35
- <tr>
36
- <td>Remote URL</td>
37
- <td>{{ object.remote_url }}</td>
38
- </tr>
39
- <tr>
40
- <td>Branch</td>
41
- <td>
42
- <code>{{ object.branch }}</code>
43
- {% if object.current_head %}
44
- (checked out locally at commit <code>{{ object.current_head }}</code>)
45
- {% else %}
46
- (not locally checked out yet)
47
- {% endif %}
48
- </td>
49
- </tr>
50
- <tr>
51
- <td>Secrets Group</td>
52
- <td>{{ object.secrets_group|hyperlinked_object }}</td>
53
- </tr>
54
- </table>
55
- </div>
56
- {% endblock content_left_page %}
57
-
58
- {% block content_right_page %}
59
- <div class="panel panel-default">
60
- <div class="panel-heading">
61
- <strong>Provided Data Types</strong>
62
- </div>
63
- <table class="table table-hover panel-body">
64
- {% for entry in datasource_contents %}
65
- <tr>
66
- <td>
67
- <span style="display: inline-block" class="label label-info">
68
- <i class="mdi {{ entry.icon }}"></i>
69
- </span>
70
- {{ entry.name|title }}</td>
71
- <td>
72
- {% if entry.content_identifier in object.provided_contents %}
73
- {{ True | render_boolean }}
74
- {% else %}
75
- {{ False | render_boolean }}
76
- {% endif %}
77
- </td>
78
- </tr>
79
- {% endfor %}
80
- </table>
81
- </div>
82
- {% endblock %}
1
+ {% extends 'extras/gitrepository_retrieve.html' %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -1,13 +1,2 @@
1
- {% extends 'generic/object_create.html' %}
2
-
3
- {% block buttons %}
4
- {% if editing %}
5
- <button type="submit" name="_dryrun_update" class="btn btn-warning">Update & Dry Run</button>
6
- <button type="submit" name="_update" class="btn btn-primary">Update & Sync</button>
7
- {% else %}
8
- <button type="submit" name="_dryrun_create" class="btn btn-info">Create & Dry Run</button>
9
- <button type="submit" name="_create" class="btn btn-primary">Create & Sync</button>
10
- <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
11
- {% endif %}
12
- <a href="{{ return_url }}" class="btn btn-default">Cancel</a>
13
- {% endblock %}
1
+ {% extends 'extras/gitrepository_update.html' %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -0,0 +1,82 @@
1
+ {% extends 'generic/object_retrieve.html' %}
2
+ {% load helpers %}
3
+
4
+ {% block extra_buttons %}
5
+ {% if perms.extras.change_gitrepository %}
6
+ <form class="form-inline" style="display: inline-block"
7
+ method="post" action="{% url 'extras:gitrepository_dryrun' pk=object.pk %}">
8
+ {% csrf_token %}
9
+ <button type="submit" class="btn btn-info">
10
+ <i class="mdi mdi-book-refresh" aria-hidden="true"></i> Dry-Run
11
+ </button>
12
+ </form>
13
+ <form class="form-inline" style="display: inline-block"
14
+ method="post" action="{% url 'extras:gitrepository_sync' pk=object.pk %}">
15
+ {% csrf_token %}
16
+ <button type="submit" class="btn btn-primary">
17
+ <i class="mdi mdi-source-branch-sync" aria-hidden="true"></i> Sync
18
+ </button>
19
+ </form>
20
+ {% endif %}
21
+ {% endblock extra_buttons %}
22
+
23
+ {% block extra_nav_tabs %}
24
+ <li role="presentation"{% if active_tab == 'result' %} class="active"{% endif %}>
25
+ <a href="{% url 'extras:gitrepository_result' pk=object.pk %}">Synchronization Status</a>
26
+ </li>
27
+ {% endblock extra_nav_tabs %}
28
+
29
+ {% block content_left_page %}
30
+ <div class="panel panel-default">
31
+ <div class="panel-heading">
32
+ <strong>Repository Details</strong>
33
+ </div>
34
+ <table class="table table-hover panel-body attr-table">
35
+ <tr>
36
+ <td>Remote URL</td>
37
+ <td>{{ object.remote_url }}</td>
38
+ </tr>
39
+ <tr>
40
+ <td>Branch</td>
41
+ <td>
42
+ <code>{{ object.branch }}</code>
43
+ {% if object.current_head %}
44
+ (checked out locally at commit <code>{{ object.current_head }}</code>)
45
+ {% else %}
46
+ (not locally checked out yet)
47
+ {% endif %}
48
+ </td>
49
+ </tr>
50
+ <tr>
51
+ <td>Secrets Group</td>
52
+ <td>{{ object.secrets_group|hyperlinked_object }}</td>
53
+ </tr>
54
+ </table>
55
+ </div>
56
+ {% endblock content_left_page %}
57
+
58
+ {% block content_right_page %}
59
+ <div class="panel panel-default">
60
+ <div class="panel-heading">
61
+ <strong>Provided Data Types</strong>
62
+ </div>
63
+ <table class="table table-hover panel-body">
64
+ {% for entry in datasource_contents %}
65
+ <tr>
66
+ <td>
67
+ <span style="display: inline-block" class="label label-info">
68
+ <i class="mdi {{ entry.icon }}"></i>
69
+ </span>
70
+ {{ entry.name|title }}</td>
71
+ <td>
72
+ {% if entry.content_identifier in object.provided_contents %}
73
+ {{ True | render_boolean }}
74
+ {% else %}
75
+ {{ False | render_boolean }}
76
+ {% endif %}
77
+ </td>
78
+ </tr>
79
+ {% endfor %}
80
+ </table>
81
+ </div>
82
+ {% endblock %}
@@ -0,0 +1,13 @@
1
+ {% extends 'generic/object_create.html' %}
2
+
3
+ {% block buttons %}
4
+ {% if editing %}
5
+ <button type="submit" name="_dryrun_update" class="btn btn-warning">Update & Dry Run</button>
6
+ <button type="submit" name="_update" class="btn btn-primary">Update & Sync</button>
7
+ {% else %}
8
+ <button type="submit" name="_dryrun_create" class="btn btn-info">Create & Dry Run</button>
9
+ <button type="submit" name="_create" class="btn btn-primary">Create & Sync</button>
10
+ <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
11
+ {% endif %}
12
+ <a href="{{ return_url }}" class="btn btn-default">Cancel</a>
13
+ {% endblock %}
@@ -1,4 +1,4 @@
1
- {% load django_tables2 %}
1
+ {% load querystring from django_tables2 %}
2
2
 
3
3
  <table id="job_accordion" {% if table.attrs %} {{ table.attrs.as_html }}{% endif %}>
4
4
  {% if table.show_header %}
@@ -6,10 +6,10 @@
6
6
  <a href="{% url 'extras:object_contact_team_assign' %}{% querystring request %}">Assign Contact/Team</a>
7
7
  </li>
8
8
  <li role="presentation"{% if active_tab == 'contact' %} class="active"{% endif %}>
9
- <a href="{% url 'extras:object_contact_add' %}{% querystring request %}">New Contact</a>
9
+ <a href="{% url 'extras:object_contact_add' %}{% legacy_querystring request %}">New Contact</a>
10
10
  </li>
11
11
  <li role="presentation"{% if active_tab == 'team' %} class="active"{% endif %}>
12
- <a href="{% url 'extras:object_team_add' %}{% querystring request %}">New Team</a>
12
+ <a href="{% url 'extras:object_team_add' %}{% legacy_querystring request %}">New Team</a>
13
13
  </li>
14
14
  </ul>
15
15
  {% endblock %}
@@ -1,53 +1 @@
1
- {% extends 'generic/object_retrieve.html' %}
2
- {% load buttons %}
3
- {% load plugins %}
4
- {% load perms %}
5
- {% load helpers %}
6
-
7
- {% block breadcrumbs %}
8
- <li><a href="{% url 'extras:note_list' %}">Notes</a></li>
9
- {% if object.assigned_object.get_absolute_url %}
10
- <li><a href="{{ object.assigned_object.get_absolute_url }}notes/">{{ object.assigned_object }}</a></li>
11
- {% endif %}
12
- <li>{{ object }}</li>
13
- {% endblock breadcrumbs %}
14
-
15
- {% block content %}
16
- <div class="row">
17
- <div class="col-md-5">
18
- <div class="panel panel-default">
19
- <div class="panel-heading">
20
- <strong>Note</strong>
21
- </div>
22
- <table class="table table-hover panel-body attr-table">
23
- <tr>
24
- <td>User</td>
25
- <td>
26
- {{ object.user|default:object.user_name }}
27
- </td>
28
- </tr>
29
- <tr>
30
- <td>Object Type</td>
31
- <td>
32
- {{ object.assigned_object_type }}
33
- </td>
34
- </tr>
35
- <tr>
36
- <td>Object</td>
37
- <td>
38
- {{ object.assigned_object | hyperlinked_object }}
39
- </td>
40
- </tr>
41
- </table>
42
- </div>
43
- <div class="panel panel-default">
44
- <div class="panel-heading">
45
- <strong>Text</strong>
46
- </div>
47
- <div class="panel-body rendered-markdown">
48
- {{ object.note|render_markdown }}
49
- </div>
50
- </div>
51
- </div>
52
- </div>
53
- {% endblock %}
1
+ {% extends 'generic/object_retrieve.html' %}
@@ -1,15 +1,11 @@
1
1
  {% extends 'generic/object_retrieve.html' %}
2
2
  {% load helpers %}
3
+ {% load ui_framework %}
3
4
 
4
5
  {% block header %}
5
6
  <div class="row noprint">
6
7
  <div class="col-md-12">
7
- <ol class="breadcrumb">
8
- {% block breadcrumbs %}
9
- <li><a href="{% url 'apps:apps_list' %}">Installed Apps</a></li>
10
- <li><a href="{% url 'apps:app_detail' app=app_data.package %}">{{ app_data.name | bettertitle }}</a></li>
11
- {% endblock breadcrumbs %}
12
- </ol>
8
+ {% render_breadcrumbs %}
13
9
  </div>
14
10
  </div>
15
11
  <div class="pull-right noprint">
@@ -32,7 +28,7 @@
32
28
  {% endblock buttons %}
33
29
  </div>
34
30
  {% block masthead %}
35
- <h1>{% block title %}{{ app_data.name | bettertitle }}{% endblock %}</h1>
31
+ <h1>{% block title %}{% render_title %}{% endblock %}</h1>
36
32
  {% endblock masthead %}
37
33
  {% endblock header %}
38
34
 
@@ -3,8 +3,6 @@
3
3
  {% load static %}
4
4
  {% load ui_framework %}
5
5
 
6
- {% block document_title %}{% render_title "plain" %}{% endblock %}
7
-
8
6
  {% block content %}
9
7
  <div class="row noprint">
10
8
  <div class="col-md-12">
@@ -1,2 +1,2 @@
1
- {% extends 'generic/object_retrieve.html' %}
1
+ {% extends 'generic/object_retrieve.html' %}
2
2
  {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -1,15 +1,15 @@
1
- {% extends 'generic/object_create.html' %}
2
- {% load form_helpers %}
3
-
4
- {% block form %}
5
- <div class="panel panel-default">
6
- <div class="panel-heading"><strong>Tag</strong></div>
7
- <div class="panel-body">
8
- {% render_field form.name %}
9
- {% render_field form.color %}
10
- {% render_field form.description %}
11
- {% render_field form.content_types %}
12
- </div>
13
- </div>
14
- {% include 'inc/extras_features_edit_form_fields.html' %}
1
+ {% extends 'generic/object_create.html' %}
2
+ {% load form_helpers %}
3
+
4
+ {% block form %}
5
+ <div class="panel panel-default">
6
+ <div class="panel-heading"><strong>Tag</strong></div>
7
+ <div class="panel-body">
8
+ {% render_field form.name %}
9
+ {% render_field form.color %}
10
+ {% render_field form.description %}
11
+ {% render_field form.content_types %}
12
+ </div>
13
+ </div>
14
+ {% include 'inc/extras_features_edit_form_fields.html' %}
15
15
  {% endblock %}
@@ -1,2 +1,2 @@
1
- {% extends 'generic/object_retrieve.html' %}
1
+ {% extends 'generic/object_retrieve.html' %}
2
2
  {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -18,6 +18,7 @@ from nautobot.dcim.models import (
18
18
  Device,
19
19
  DeviceType,
20
20
  FrontPort,
21
+ InventoryItem,
21
22
  Location,
22
23
  LocationType,
23
24
  Manufacturer,
@@ -107,6 +108,24 @@ class DynamicGroupTestBase(TestCase):
107
108
  ),
108
109
  ]
109
110
 
111
+ cls.inventory_items = [
112
+ InventoryItem.objects.create(
113
+ name="device-location-1-item-1",
114
+ serial="location-1-item-1",
115
+ device=cls.devices[0],
116
+ ),
117
+ InventoryItem.objects.create(
118
+ name="device-location-1-item-2",
119
+ serial="location-1-item-2",
120
+ device=cls.devices[0],
121
+ ),
122
+ InventoryItem.objects.create(
123
+ name="device-location-2-item-1",
124
+ serial="location-2-item-1",
125
+ device=cls.devices[1],
126
+ ),
127
+ ]
128
+
110
129
  cls.groups = [
111
130
  DynamicGroup.objects.create(
112
131
  name="Parent",
@@ -152,7 +171,13 @@ class DynamicGroupTestBase(TestCase):
152
171
  DynamicGroup.objects.create(
153
172
  name="MultiValueCharFilter",
154
173
  description="A group with a multivaluechar filter",
155
- filter={"name": ["device-1", "device-2", "device-3"]},
174
+ filter={"name": ["device-location-1", "device-location-2", "device-location-3"]},
175
+ content_type=cls.device_ct,
176
+ ),
177
+ DynamicGroup.objects.create(
178
+ name="SearchFilter",
179
+ description="A group with a search filter",
180
+ filter={"q": "location-1"},
156
181
  content_type=cls.device_ct,
157
182
  ),
158
183
  ]
@@ -165,6 +190,8 @@ class DynamicGroupTestBase(TestCase):
165
190
  cls.third_child = cls.groups[3]
166
191
  cls.nested_child = cls.groups[4]
167
192
  cls.no_match_filter = cls.groups[5]
193
+ cls.multivaluechar_filter = cls.groups[6]
194
+ cls.search_filter = cls.groups[7]
168
195
  cls.invalid_filter = DynamicGroup.objects.create(
169
196
  name="Invalid Filter",
170
197
  description="A group with a filter that's invalid",
@@ -289,6 +316,9 @@ class DynamicGroupModelTest(DynamicGroupTestBase): # TODO: BaseModelTestCase mi
289
316
  self.assertIn(device1, group.members)
290
317
  self.assertNotIn(device2, group.members)
291
318
 
319
+ group = self.search_filter
320
+ self.assertIn(device1, group.members)
321
+
292
322
  def test_static_member_operations(self):
293
323
  sg = DynamicGroup.objects.create(
294
324
  name="All Prefixes",
@@ -437,17 +467,24 @@ class DynamicGroupModelTest(DynamicGroupTestBase): # TODO: BaseModelTestCase mi
437
467
 
438
468
  def test_count(self):
439
469
  """Test `DynamicGroup.count`."""
440
- expected = {
441
- self.parent.count: 2,
442
- self.first_child.count: 1,
443
- self.second_child.count: 1,
444
- self.third_child.count: 2,
445
- self.nested_child.count: 2,
446
- self.no_match_filter.count: 0,
447
- self.invalid_filter.count: 0,
448
- }
449
- for grp, cnt in expected.items():
450
- self.assertEqual(grp, cnt)
470
+ expected = [
471
+ (self.parent, 1),
472
+ (self.first_child, 1),
473
+ (self.second_child, 1),
474
+ (self.third_child, 2),
475
+ (self.nested_child, 2),
476
+ (self.no_match_filter, 0),
477
+ (self.multivaluechar_filter, 3),
478
+ (self.search_filter, 1),
479
+ (self.invalid_filter, 0),
480
+ ]
481
+ for grp, cnt in expected:
482
+ with self.subTest(grp.name):
483
+ self.assertEqual(grp.count, cnt, list(grp.members.values_list("name", flat=True)))
484
+ self.assertEqual(grp.members.count(), cnt, list(grp.members.values_list("name", flat=True)))
485
+ # https://github.com/nautobot/nautobot/issues/7631
486
+ members = grp.update_cached_members()
487
+ self.assertEqual(members.count(), cnt, list(members.values_list("name", flat=True)))
451
488
 
452
489
  def test_model(self):
453
490
  """Test `DynamicGroup.model`."""
@@ -635,9 +672,9 @@ class DynamicGroupModelTest(DynamicGroupTestBase): # TODO: BaseModelTestCase mi
635
672
  group1 = self.first_child # Filter has `location`
636
673
  self.assertEqual(group1.get_initial(), group1.filter)
637
674
  # Test if MultiValueCharField is properly pre-populated
638
- group2 = self.groups[6] # Filter has `name`
675
+ group2 = self.multivaluechar_filter # Filter has `name`
639
676
  initial = group2.get_initial()
640
- expected = {"name": ["device-1", "device-2", "device-3"]}
677
+ expected = {"name": ["device-location-1", "device-location-2", "device-location-3"]}
641
678
  self.assertEqual(initial, expected)
642
679
 
643
680
  def test_set_filter(self):
@@ -1152,7 +1189,11 @@ class DynamicGroupMixinModelTest(DynamicGroupTestBase):
1152
1189
  with self.assertNumQueries(1):
1153
1190
  qs = self.devices[0].dynamic_groups
1154
1191
  list(qs)
1155
- self.assertQuerysetEqualAndNotEmpty(qs, [self.first_child, self.third_child, self.nested_child], ordered=False)
1192
+ self.assertQuerysetEqualAndNotEmpty(
1193
+ qs,
1194
+ [self.first_child, self.third_child, self.nested_child, self.multivaluechar_filter, self.search_filter],
1195
+ ordered=False,
1196
+ )
1156
1197
 
1157
1198
  def test_dynamic_groups_cached(self):
1158
1199
  for group in self.groups:
@@ -1160,21 +1201,35 @@ class DynamicGroupMixinModelTest(DynamicGroupTestBase):
1160
1201
  with self.assertNumQueries(1):
1161
1202
  qs = self.devices[0].dynamic_groups_cached
1162
1203
  list(qs)
1163
- self.assertQuerysetEqualAndNotEmpty(qs, [self.first_child, self.third_child, self.nested_child], ordered=False)
1204
+ self.assertQuerysetEqualAndNotEmpty(
1205
+ qs,
1206
+ [self.first_child, self.third_child, self.nested_child, self.multivaluechar_filter, self.search_filter],
1207
+ ordered=False,
1208
+ )
1164
1209
 
1165
1210
  def test_dynamic_groups_list(self):
1166
1211
  for group in self.groups:
1167
1212
  group.update_cached_members()
1168
1213
  with self.assertNumQueries(1):
1169
1214
  groups = self.devices[0].dynamic_groups_list
1170
- self.assertEqual(set(groups), set([self.first_child, self.third_child, self.nested_child]))
1215
+ self.assertEqual(
1216
+ set(groups),
1217
+ set(
1218
+ [self.first_child, self.third_child, self.nested_child, self.multivaluechar_filter, self.search_filter]
1219
+ ),
1220
+ )
1171
1221
 
1172
1222
  def test_dynamic_groups_list_cached(self):
1173
1223
  for group in self.groups:
1174
1224
  group.update_cached_members()
1175
1225
  with self.assertNumQueries(1):
1176
1226
  groups = self.devices[0].dynamic_groups_list_cached
1177
- self.assertEqual(set(groups), set([self.first_child, self.third_child, self.nested_child]))
1227
+ self.assertEqual(
1228
+ set(groups),
1229
+ set(
1230
+ [self.first_child, self.third_child, self.nested_child, self.multivaluechar_filter, self.search_filter]
1231
+ ),
1232
+ )
1178
1233
 
1179
1234
 
1180
1235
  class DynamicGroupFilterTest(DynamicGroupTestBase, FilterTestCases.FilterTestCase):