nautobot 2.3.16__py3-none-any.whl → 2.4.0__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 (721) hide show
  1. nautobot/__init__.py +15 -0
  2. nautobot/apps/__init__.py +1 -1
  3. nautobot/apps/api.py +8 -10
  4. nautobot/apps/change_logging.py +2 -2
  5. nautobot/apps/choices.py +4 -4
  6. nautobot/apps/config.py +32 -3
  7. nautobot/apps/events.py +19 -0
  8. nautobot/apps/exceptions.py +0 -2
  9. nautobot/apps/factory.py +2 -2
  10. nautobot/apps/filters.py +1 -1
  11. nautobot/apps/forms.py +20 -20
  12. nautobot/apps/graphql.py +2 -2
  13. nautobot/apps/jobs.py +8 -8
  14. nautobot/apps/models.py +19 -19
  15. nautobot/apps/tables.py +1 -1
  16. nautobot/apps/testing.py +10 -10
  17. nautobot/apps/ui.py +44 -9
  18. nautobot/apps/utils.py +7 -15
  19. nautobot/apps/views.py +8 -6
  20. nautobot/circuits/api/serializers.py +1 -0
  21. nautobot/circuits/api/views.py +4 -8
  22. nautobot/circuits/navigation.py +0 -57
  23. nautobot/circuits/templates/circuits/circuit_create.html +1 -7
  24. nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -71
  25. nautobot/circuits/templates/circuits/inc/circuit_termination.html +6 -64
  26. nautobot/circuits/templates/circuits/inc/circuit_termination_cable_fragment.html +40 -0
  27. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +26 -0
  28. nautobot/circuits/templates/circuits/provider_retrieve.html +0 -76
  29. nautobot/circuits/tests/integration/test_relationships.py +33 -24
  30. nautobot/circuits/tests/test_filters.py +4 -8
  31. nautobot/circuits/views.py +140 -23
  32. nautobot/cloud/api/views.py +6 -10
  33. nautobot/cloud/factory.py +4 -1
  34. nautobot/cloud/tests/test_filters.py +5 -4
  35. nautobot/cloud/views.py +0 -16
  36. nautobot/core/api/constants.py +11 -0
  37. nautobot/core/api/filter_backends.py +3 -9
  38. nautobot/core/api/metadata.py +28 -256
  39. nautobot/core/api/pagination.py +3 -2
  40. nautobot/core/api/renderers.py +3 -0
  41. nautobot/core/api/schema.py +13 -2
  42. nautobot/core/api/serializers.py +45 -259
  43. nautobot/core/api/urls.py +3 -4
  44. nautobot/core/api/utils.py +0 -62
  45. nautobot/core/api/views.py +99 -157
  46. nautobot/core/apps/__init__.py +22 -578
  47. nautobot/core/celery/__init__.py +13 -0
  48. nautobot/core/celery/schedulers.py +47 -2
  49. nautobot/core/choices.py +2 -2
  50. nautobot/core/cli/__init__.py +8 -0
  51. nautobot/core/constants.py +7 -0
  52. nautobot/core/events/__init__.py +116 -0
  53. nautobot/core/events/base.py +27 -0
  54. nautobot/core/events/exceptions.py +10 -0
  55. nautobot/core/events/redis_broker.py +48 -0
  56. nautobot/core/events/syslog_broker.py +19 -0
  57. nautobot/core/exceptions.py +0 -6
  58. nautobot/core/forms/__init__.py +19 -19
  59. nautobot/core/forms/fields.py +57 -9
  60. nautobot/core/forms/forms.py +33 -2
  61. nautobot/core/forms/utils.py +2 -1
  62. nautobot/core/graphql/schema.py +3 -1
  63. nautobot/core/jobs/__init__.py +24 -3
  64. nautobot/core/jobs/bulk_actions.py +248 -0
  65. nautobot/core/jobs/cleanup.py +1 -1
  66. nautobot/core/management/commands/generate_test_data.py +21 -0
  67. nautobot/core/middleware.py +16 -0
  68. nautobot/core/models/fields.py +11 -7
  69. nautobot/core/settings.py +68 -4
  70. nautobot/core/settings.yaml +99 -0
  71. nautobot/core/tables.py +10 -46
  72. nautobot/core/tasks.py +1 -1
  73. nautobot/core/templates/about.html +67 -0
  74. nautobot/core/templates/components/button/default.html +7 -0
  75. nautobot/core/templates/components/button/dropdown.html +20 -0
  76. nautobot/core/templates/components/layout/one_over_two.html +19 -0
  77. nautobot/core/templates/components/layout/two_over_one.html +19 -0
  78. nautobot/core/templates/components/panel/body_content_data_table.html +27 -0
  79. nautobot/core/templates/components/panel/body_content_objects_table.html +4 -0
  80. nautobot/core/templates/components/panel/body_content_tags.html +6 -0
  81. nautobot/core/templates/components/panel/body_content_text.html +12 -0
  82. nautobot/core/templates/components/panel/body_wrapper_generic.html +3 -0
  83. nautobot/core/templates/components/panel/body_wrapper_key_value_table.html +3 -0
  84. nautobot/core/templates/components/panel/body_wrapper_table.html +3 -0
  85. nautobot/core/templates/components/panel/footer_contacts_table.html +20 -0
  86. nautobot/core/templates/components/panel/footer_content_table.html +14 -0
  87. nautobot/core/templates/components/panel/grouping_toggle.html +14 -0
  88. nautobot/core/templates/components/panel/header_extra_content_table.html +3 -0
  89. nautobot/core/templates/components/panel/panel.html +16 -0
  90. nautobot/core/templates/components/panel/stats_panel_body.html +8 -0
  91. nautobot/core/templates/components/tab/content_wrapper.html +3 -0
  92. nautobot/core/templates/components/tab/label_wrapper.html +5 -0
  93. nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +3 -0
  94. nautobot/core/templates/generic/object_retrieve.html +28 -17
  95. nautobot/core/templates/inc/computed_fields/panel_data.html +4 -7
  96. nautobot/core/templates/inc/custom_fields/panel.html +2 -2
  97. nautobot/core/templates/inc/custom_fields/panel_data.html +4 -7
  98. nautobot/core/templates/inc/footer.html +1 -0
  99. nautobot/core/templates/inc/nav_menu.html +2 -1
  100. nautobot/core/templates/inc/relationships_panel.html +1 -1
  101. nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
  102. nautobot/core/templates/inc/tenant_table_row.html +11 -0
  103. nautobot/core/templates/nautobot_config.py.j2 +13 -0
  104. nautobot/core/templates/panel_table.html +12 -0
  105. nautobot/core/templates/utilities/render_jinja2.html +117 -0
  106. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  107. nautobot/core/templates/utilities/theme_preview.html +7 -0
  108. nautobot/core/templatetags/helpers.py +104 -6
  109. nautobot/core/templatetags/ui_framework.py +40 -0
  110. nautobot/core/testing/__init__.py +8 -8
  111. nautobot/core/testing/api.py +187 -137
  112. nautobot/core/testing/context.py +18 -0
  113. nautobot/core/testing/filters.py +41 -35
  114. nautobot/core/testing/forms.py +2 -0
  115. nautobot/core/testing/views.py +65 -148
  116. nautobot/core/tests/integration/test_view_authentication.py +1 -1
  117. nautobot/core/tests/nautobot_config.py +198 -0
  118. nautobot/core/tests/runner.py +2 -2
  119. nautobot/core/tests/test_api.py +154 -176
  120. nautobot/core/tests/test_events.py +214 -0
  121. nautobot/core/tests/test_forms.py +1 -0
  122. nautobot/core/tests/test_jinja_filters.py +1 -0
  123. nautobot/core/tests/test_jobs.py +387 -14
  124. nautobot/core/tests/test_navigations.py +7 -241
  125. nautobot/core/tests/test_settings_schema.py +7 -0
  126. nautobot/core/tests/test_tables.py +100 -0
  127. nautobot/core/tests/test_templatetags_helpers.py +16 -0
  128. nautobot/core/tests/test_ui.py +150 -0
  129. nautobot/core/tests/test_utils.py +55 -18
  130. nautobot/core/tests/test_views.py +124 -5
  131. nautobot/core/ui/__init__.py +0 -0
  132. nautobot/core/ui/base.py +11 -0
  133. nautobot/core/ui/choices.py +44 -0
  134. nautobot/core/ui/homepage.py +167 -0
  135. nautobot/core/ui/nav.py +280 -0
  136. nautobot/core/ui/object_detail.py +1855 -0
  137. nautobot/core/ui/utils.py +36 -0
  138. nautobot/core/urls.py +6 -0
  139. nautobot/core/utils/config.py +30 -3
  140. nautobot/core/utils/lookup.py +12 -2
  141. nautobot/core/utils/querysets.py +64 -0
  142. nautobot/core/utils/requests.py +24 -9
  143. nautobot/core/views/__init__.py +48 -1
  144. nautobot/core/views/generic.py +37 -140
  145. nautobot/core/views/mixins.py +82 -32
  146. nautobot/core/views/paginator.py +8 -5
  147. nautobot/core/views/renderers.py +9 -9
  148. nautobot/core/views/utils.py +11 -0
  149. nautobot/core/wsgi.py +3 -3
  150. nautobot/dcim/api/serializers.py +34 -141
  151. nautobot/dcim/api/urls.py +5 -0
  152. nautobot/dcim/api/views.py +57 -110
  153. nautobot/dcim/apps.py +1 -0
  154. nautobot/dcim/choices.py +28 -0
  155. nautobot/dcim/factory.py +58 -0
  156. nautobot/dcim/filters/__init__.py +204 -2
  157. nautobot/dcim/forms.py +219 -9
  158. nautobot/dcim/migrations/0063_interfacevdcassignment_virtualdevicecontext_and_more.py +165 -0
  159. nautobot/dcim/migrations/0064_virtualdevicecontext_status_data_migration.py +28 -0
  160. nautobot/dcim/migrations/0065_controller_capabilities_and_more.py +29 -0
  161. nautobot/dcim/migrations/0066_controllermanageddevicegroup_radio_profiles_and_more.py +33 -0
  162. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
  163. nautobot/dcim/models/__init__.py +5 -1
  164. nautobot/dcim/models/devices.py +180 -2
  165. nautobot/dcim/models/racks.py +2 -2
  166. nautobot/dcim/navigation.py +25 -224
  167. nautobot/dcim/signals.py +44 -0
  168. nautobot/dcim/tables/__init__.py +2 -0
  169. nautobot/dcim/tables/devices.py +103 -7
  170. nautobot/dcim/tables/racks.py +1 -1
  171. nautobot/dcim/templates/dcim/controller/base.html +10 -0
  172. nautobot/dcim/templates/dcim/controller_create.html +2 -7
  173. nautobot/dcim/templates/dcim/controller_retrieve.html +6 -10
  174. nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +25 -0
  175. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +68 -0
  176. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +51 -0
  177. nautobot/dcim/templates/dcim/device/base.html +6 -42
  178. nautobot/dcim/templates/dcim/device/wireless.html +73 -0
  179. nautobot/dcim/templates/dcim/device.html +4 -10
  180. nautobot/dcim/templates/dcim/device_edit.html +36 -37
  181. nautobot/dcim/templates/dcim/interface.html +1 -0
  182. nautobot/dcim/templates/dcim/interface_edit.html +1 -0
  183. nautobot/dcim/templates/dcim/location.html +1 -9
  184. nautobot/dcim/templates/dcim/location_edit.html +1 -7
  185. nautobot/dcim/templates/dcim/locationtype.html +0 -107
  186. nautobot/dcim/templates/dcim/locationtype_retrieve.html +8 -0
  187. nautobot/dcim/templates/dcim/rack.html +1 -9
  188. nautobot/dcim/templates/dcim/rack_edit.html +1 -7
  189. nautobot/dcim/templates/dcim/rackreservation.html +1 -9
  190. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +68 -0
  191. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +28 -0
  192. nautobot/dcim/tests/integration/test_controller.py +62 -0
  193. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
  194. nautobot/dcim/tests/test_api.py +188 -64
  195. nautobot/dcim/tests/test_filters.py +171 -76
  196. nautobot/dcim/tests/test_jobs.py +118 -0
  197. nautobot/dcim/tests/test_models.py +157 -6
  198. nautobot/dcim/tests/test_signals.py +1 -0
  199. nautobot/dcim/tests/test_views.py +118 -88
  200. nautobot/dcim/urls.py +72 -27
  201. nautobot/dcim/utils.py +2 -2
  202. nautobot/dcim/views.py +356 -61
  203. nautobot/extras/api/serializers.py +39 -18
  204. nautobot/extras/api/urls.py +4 -0
  205. nautobot/extras/api/views.py +89 -31
  206. nautobot/extras/choices.py +13 -0
  207. nautobot/extras/constants.py +2 -1
  208. nautobot/extras/context_managers.py +23 -6
  209. nautobot/extras/datasources/git.py +4 -1
  210. nautobot/extras/factory.py +27 -0
  211. nautobot/extras/filters/__init__.py +66 -5
  212. nautobot/extras/forms/base.py +2 -2
  213. nautobot/extras/forms/forms.py +262 -59
  214. nautobot/extras/forms/mixins.py +2 -2
  215. nautobot/extras/graphql/types.py +25 -1
  216. nautobot/extras/jobs.py +109 -15
  217. nautobot/extras/management/__init__.py +1 -0
  218. nautobot/extras/management/commands/runjob.py +7 -79
  219. nautobot/extras/management/commands/runjob_with_job_result.py +46 -0
  220. nautobot/extras/management/utils.py +87 -0
  221. nautobot/extras/migrations/0117_create_job_queue_model.py +129 -0
  222. nautobot/extras/migrations/0118_task_queue_to_job_queue_migration.py +78 -0
  223. nautobot/extras/migrations/0119_remove_task_queues_from_job_and_queue_from_scheduled_job.py +28 -0
  224. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
  225. nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
  226. nautobot/extras/models/__init__.py +5 -1
  227. nautobot/extras/models/change_logging.py +7 -3
  228. nautobot/extras/models/contacts.py +1 -1
  229. nautobot/extras/models/groups.py +0 -2
  230. nautobot/extras/models/jobs.py +233 -33
  231. nautobot/extras/models/relationships.py +69 -1
  232. nautobot/extras/models/secrets.py +5 -0
  233. nautobot/extras/navigation.py +20 -262
  234. nautobot/extras/plugins/__init__.py +54 -19
  235. nautobot/extras/plugins/marketplace_manifest.yml +455 -0
  236. nautobot/extras/plugins/tables.py +16 -14
  237. nautobot/extras/plugins/urls.py +1 -0
  238. nautobot/extras/plugins/views.py +103 -60
  239. nautobot/extras/registry.py +1 -1
  240. nautobot/extras/secrets/__init__.py +2 -2
  241. nautobot/extras/signals.py +39 -1
  242. nautobot/extras/tables.py +37 -1
  243. nautobot/extras/templates/extras/dynamicgroup.html +1 -9
  244. nautobot/extras/templates/extras/externalintegration_retrieve.html +0 -47
  245. nautobot/extras/templates/extras/inc/tags_panel.html +1 -5
  246. nautobot/extras/templates/extras/job_bulk_edit.html +2 -1
  247. nautobot/extras/templates/extras/job_detail.html +52 -6
  248. nautobot/extras/templates/extras/job_edit.html +6 -2
  249. nautobot/extras/templates/extras/job_list.html +2 -7
  250. nautobot/extras/templates/extras/jobqueue_retrieve.html +36 -0
  251. nautobot/extras/templates/extras/marketplace.html +296 -0
  252. nautobot/extras/templates/extras/plugin_detail.html +32 -15
  253. nautobot/extras/templates/extras/plugins_list.html +35 -1
  254. nautobot/extras/templates/extras/plugins_tiles.html +90 -0
  255. nautobot/extras/templates/extras/role_retrieve.html +16 -0
  256. nautobot/extras/templates/extras/secret.html +0 -65
  257. nautobot/extras/templates/extras/secret_check.js +16 -0
  258. nautobot/extras/templates/extras/secret_create.html +114 -0
  259. nautobot/extras/templates/extras/secret_edit.html +1 -114
  260. nautobot/extras/templates/extras/secretsgroup_edit.html +1 -1
  261. nautobot/extras/templates/extras/templatetags/plugin_object_detail_tabs.html +2 -0
  262. nautobot/extras/templatetags/job_buttons.py +5 -4
  263. nautobot/extras/templatetags/plugins.py +69 -6
  264. nautobot/extras/test_jobs/singleton.py +16 -0
  265. nautobot/extras/tests/test_api.py +145 -43
  266. nautobot/extras/tests/test_context_managers.py +4 -1
  267. nautobot/extras/tests/test_filters.py +213 -529
  268. nautobot/extras/tests/test_job_variables.py +73 -152
  269. nautobot/extras/tests/test_jobs.py +181 -51
  270. nautobot/extras/tests/test_models.py +61 -6
  271. nautobot/extras/tests/test_plugins.py +62 -9
  272. nautobot/extras/tests/test_relationships.py +123 -9
  273. nautobot/extras/tests/test_utils.py +23 -2
  274. nautobot/extras/tests/test_views.py +146 -145
  275. nautobot/extras/tests/test_webhooks.py +2 -1
  276. nautobot/extras/urls.py +2 -20
  277. nautobot/extras/utils.py +119 -4
  278. nautobot/extras/views.py +168 -125
  279. nautobot/extras/webhooks.py +5 -2
  280. nautobot/ipam/api/serializers.py +10 -103
  281. nautobot/ipam/api/views.py +31 -49
  282. nautobot/ipam/factory.py +1 -1
  283. nautobot/ipam/filters.py +3 -2
  284. nautobot/ipam/models.py +10 -12
  285. nautobot/ipam/navigation.py +0 -90
  286. nautobot/ipam/tables.py +3 -1
  287. nautobot/ipam/templates/ipam/ipaddress.html +1 -9
  288. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
  289. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
  290. nautobot/ipam/templates/ipam/prefix.html +1 -9
  291. nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
  292. nautobot/ipam/templates/ipam/routetarget.html +0 -28
  293. nautobot/ipam/templates/ipam/vlan.html +1 -9
  294. nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
  295. nautobot/ipam/templates/ipam/vrf.html +0 -47
  296. nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
  297. nautobot/ipam/tests/test_api.py +7 -5
  298. nautobot/ipam/tests/test_filters.py +39 -119
  299. nautobot/ipam/tests/test_forms.py +0 -2
  300. nautobot/ipam/tests/test_models.py +56 -36
  301. nautobot/ipam/tests/test_views.py +3 -0
  302. nautobot/ipam/urls.py +3 -69
  303. nautobot/ipam/utils/__init__.py +16 -10
  304. nautobot/ipam/views.py +91 -162
  305. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  306. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  307. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
  308. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  309. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  310. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  311. nautobot/project-static/css/base.css +38 -3
  312. nautobot/project-static/docs/404.html +461 -17
  313. nautobot/project-static/docs/apps/index.html +461 -17
  314. nautobot/project-static/docs/apps/nautobot-apps.html +462 -19
  315. nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
  316. nautobot/project-static/docs/assets/extra.css +5 -1
  317. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +477 -23
  318. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +474 -20
  319. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +790 -289
  320. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +505 -31
  321. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +510 -34
  322. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +471 -20
  323. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +467 -18
  324. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +497 -33
  325. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9883 -0
  326. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +523 -75
  327. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +546 -51
  328. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +670 -94
  329. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1030 -177
  330. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +524 -49
  331. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +874 -188
  332. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +955 -235
  333. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +475 -21
  334. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +486 -28
  335. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +661 -99
  336. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +947 -479
  337. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +6425 -1234
  338. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +474 -20
  339. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +877 -344
  340. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +828 -171
  341. nautobot/project-static/docs/development/apps/api/configuration-view.html +461 -17
  342. nautobot/project-static/docs/development/apps/api/database-backend-config.html +461 -17
  343. nautobot/project-static/docs/development/apps/api/models/django-admin.html +461 -17
  344. nautobot/project-static/docs/development/apps/api/models/global-search.html +461 -17
  345. nautobot/project-static/docs/development/apps/api/models/graphql.html +461 -17
  346. nautobot/project-static/docs/development/apps/api/models/index.html +461 -17
  347. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +461 -17
  348. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +461 -17
  349. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +461 -17
  350. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +461 -17
  351. nautobot/project-static/docs/development/apps/api/platform-features/index.html +461 -17
  352. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +461 -17
  353. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +461 -17
  354. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +461 -17
  355. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +461 -17
  356. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +461 -17
  357. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +461 -17
  358. nautobot/project-static/docs/development/apps/api/prometheus.html +461 -17
  359. nautobot/project-static/docs/development/apps/api/setup.html +465 -153
  360. nautobot/project-static/docs/development/apps/api/testing.html +461 -17
  361. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +461 -17
  362. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +461 -17
  363. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +461 -17
  364. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +461 -17
  365. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +741 -128
  366. nautobot/project-static/docs/development/apps/api/views/base-template.html +461 -17
  367. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +461 -17
  368. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +461 -17
  369. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +461 -17
  370. nautobot/project-static/docs/development/apps/api/views/index.html +463 -18
  371. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +465 -17
  372. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +491 -17
  373. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +461 -17
  374. nautobot/project-static/docs/development/apps/api/views/notes.html +461 -17
  375. nautobot/project-static/docs/development/apps/api/views/rest-api.html +467 -19
  376. nautobot/project-static/docs/development/apps/api/views/urls.html +461 -17
  377. nautobot/project-static/docs/development/apps/index.html +461 -17
  378. nautobot/project-static/docs/development/apps/migration/code-updates.html +462 -50
  379. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +462 -18
  380. nautobot/project-static/docs/development/apps/migration/from-v1.html +461 -17
  381. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +461 -17
  382. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +461 -17
  383. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +461 -17
  384. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +464 -20
  385. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9261 -0
  386. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +9375 -0
  387. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +9671 -0
  388. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +9559 -0
  389. nautobot/project-static/docs/development/apps/porting-from-netbox.html +464 -20
  390. nautobot/project-static/docs/development/core/application-registry.html +461 -17
  391. nautobot/project-static/docs/development/core/best-practices.html +461 -17
  392. nautobot/project-static/docs/development/core/bootstrap-ui.html +461 -17
  393. nautobot/project-static/docs/development/core/caching.html +461 -17
  394. nautobot/project-static/docs/development/core/controllers.html +463 -17
  395. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +464 -20
  396. nautobot/project-static/docs/development/core/generic-views.html +461 -17
  397. nautobot/project-static/docs/development/core/getting-started.html +539 -127
  398. nautobot/project-static/docs/development/core/homepage.html +472 -28
  399. nautobot/project-static/docs/development/core/index.html +461 -17
  400. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9754 -0
  401. nautobot/project-static/docs/development/core/model-checklist.html +471 -25
  402. nautobot/project-static/docs/development/core/model-features.html +461 -17
  403. nautobot/project-static/docs/development/core/natural-keys.html +461 -17
  404. nautobot/project-static/docs/development/core/navigation-menu.html +478 -24
  405. nautobot/project-static/docs/development/core/release-checklist.html +478 -46
  406. nautobot/project-static/docs/development/core/role-internals.html +461 -17
  407. nautobot/project-static/docs/development/core/settings.html +461 -17
  408. nautobot/project-static/docs/development/core/style-guide.html +464 -20
  409. nautobot/project-static/docs/development/core/templates.html +471 -20
  410. nautobot/project-static/docs/development/core/testing.html +461 -17
  411. nautobot/project-static/docs/development/core/ui-component-framework.html +11116 -0
  412. nautobot/project-static/docs/development/core/user-preferences.html +464 -20
  413. nautobot/project-static/docs/development/index.html +461 -17
  414. nautobot/project-static/docs/development/jobs/index.html +499 -19
  415. nautobot/project-static/docs/development/jobs/migration/from-v1.html +461 -17
  416. nautobot/project-static/docs/index.html +469 -36
  417. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  418. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  419. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  420. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  421. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  422. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  423. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  424. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  425. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  426. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  427. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  428. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  429. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  430. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  431. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  432. nautobot/project-static/docs/media/development/core/ui-component-framework/basic-panel-layout.png +0 -0
  433. nautobot/project-static/docs/media/development/core/ui-component-framework/button-example.png +0 -0
  434. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  435. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  436. nautobot/project-static/docs/media/development/core/ui-component-framework/dropdown-button-example.png +0 -0
  437. nautobot/project-static/docs/media/development/core/ui-component-framework/grouped-key-value-table-panel-example-1.png +0 -0
  438. nautobot/project-static/docs/media/development/core/ui-component-framework/grouped-key-value-table-panel-example-2.png +0 -0
  439. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example.png +0 -0
  440. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  441. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  442. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example.png +0 -0
  443. nautobot/project-static/docs/media/development/core/ui-component-framework/table-panels-family.png +0 -0
  444. nautobot/project-static/docs/media/development/core/ui-component-framework/text-panels-family.png +0 -0
  445. nautobot/project-static/docs/media/development/core/ui-component-framework/ui-framework-example.png +0 -0
  446. nautobot/project-static/docs/media/models/virtual_device_context_overview.drawio +73 -0
  447. nautobot/project-static/docs/media/models/virtual_device_context_overview.png +0 -0
  448. nautobot/project-static/docs/models/dcim/virtualdevicecontext.html +14 -0
  449. nautobot/project-static/docs/models/extras/jobqueue.html +14 -0
  450. nautobot/project-static/docs/models/wireless/radioprofile.html +14 -0
  451. nautobot/project-static/docs/models/wireless/supporteddatarate.html +14 -0
  452. nautobot/project-static/docs/models/wireless/wirelessnetwork.html +14 -0
  453. nautobot/project-static/docs/objects.inv +0 -0
  454. nautobot/project-static/docs/overview/application_stack.html +467 -21
  455. nautobot/project-static/docs/overview/design_philosophy.html +461 -17
  456. nautobot/project-static/docs/release-notes/index.html +483 -20
  457. nautobot/project-static/docs/release-notes/version-1.0.html +649 -206
  458. nautobot/project-static/docs/release-notes/version-1.1.html +646 -203
  459. nautobot/project-static/docs/release-notes/version-1.2.html +721 -278
  460. nautobot/project-static/docs/release-notes/version-1.3.html +747 -304
  461. nautobot/project-static/docs/release-notes/version-1.4.html +832 -390
  462. nautobot/project-static/docs/release-notes/version-1.5.html +1020 -579
  463. nautobot/project-static/docs/release-notes/version-1.6.html +940 -516
  464. nautobot/project-static/docs/release-notes/version-2.0.html +943 -502
  465. nautobot/project-static/docs/release-notes/version-2.1.html +778 -337
  466. nautobot/project-static/docs/release-notes/version-2.2.html +771 -330
  467. nautobot/project-static/docs/release-notes/version-2.3.html +914 -471
  468. nautobot/project-static/docs/release-notes/version-2.4.html +10323 -0
  469. nautobot/project-static/docs/search/search_index.json +1 -1
  470. nautobot/project-static/docs/sitemap.xml +342 -270
  471. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  472. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +461 -17
  473. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +461 -17
  474. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +461 -17
  475. nautobot/project-static/docs/user-guide/administration/configuration/index.html +473 -30
  476. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +461 -17
  477. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +842 -155
  478. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +461 -17
  479. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +461 -17
  480. nautobot/project-static/docs/user-guide/administration/guides/docker.html +474 -27
  481. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +461 -17
  482. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +461 -17
  483. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +461 -17
  484. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +461 -17
  485. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +461 -17
  486. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +463 -19
  487. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +461 -17
  488. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +461 -17
  489. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +461 -17
  490. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +481 -21
  491. nautobot/project-static/docs/user-guide/administration/installation/index.html +466 -18
  492. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +462 -18
  493. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +461 -17
  494. nautobot/project-static/docs/user-guide/administration/installation/services.html +461 -17
  495. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +461 -17
  496. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +482 -39
  497. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +475 -64
  498. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +475 -64
  499. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +461 -17
  500. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +461 -17
  501. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +461 -17
  502. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +461 -17
  503. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +461 -17
  504. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +464 -21
  505. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +461 -17
  506. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/tables/v2-code-nautobot-app-location.yaml +0 -16
  507. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +461 -17
  508. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +467 -19
  509. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +461 -17
  510. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +461 -17
  511. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +461 -17
  512. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +461 -17
  513. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +461 -17
  514. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +461 -17
  515. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +461 -17
  516. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +461 -17
  517. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +461 -17
  518. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +461 -17
  519. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +461 -17
  520. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +461 -17
  521. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +461 -17
  522. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +461 -17
  523. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +461 -17
  524. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +461 -17
  525. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +461 -17
  526. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +497 -18
  527. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +487 -20
  528. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +461 -17
  529. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +461 -17
  530. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +461 -17
  531. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +461 -17
  532. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +461 -17
  533. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +461 -17
  534. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +461 -17
  535. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +461 -17
  536. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +461 -17
  537. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +461 -17
  538. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +461 -17
  539. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +461 -17
  540. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +461 -17
  541. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +461 -17
  542. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +461 -17
  543. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +461 -17
  544. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +461 -17
  545. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +461 -17
  546. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +461 -17
  547. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +461 -17
  548. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +461 -17
  549. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +461 -17
  550. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +461 -17
  551. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +461 -17
  552. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +461 -17
  553. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +461 -17
  554. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +461 -17
  555. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +461 -17
  556. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +461 -17
  557. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +461 -17
  558. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +461 -17
  559. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +461 -17
  560. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +461 -17
  561. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +461 -17
  562. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9375 -0
  563. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +468 -28
  564. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +461 -17
  565. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +461 -17
  566. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +461 -17
  567. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +461 -17
  568. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +461 -17
  569. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +461 -17
  570. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +461 -17
  571. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +461 -17
  572. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +461 -17
  573. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +461 -17
  574. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +461 -17
  575. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +461 -17
  576. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +464 -20
  577. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +461 -17
  578. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +461 -17
  579. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +461 -17
  580. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +461 -17
  581. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +461 -17
  582. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +461 -17
  583. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +464 -20
  584. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9313 -0
  585. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9217 -0
  586. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9211 -0
  587. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9277 -0
  588. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +461 -17
  589. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +461 -17
  590. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +461 -17
  591. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +461 -17
  592. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +461 -17
  593. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +461 -17
  594. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +461 -17
  595. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +461 -17
  596. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +461 -17
  597. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +461 -17
  598. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +461 -17
  599. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +466 -20
  600. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +461 -17
  601. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  602. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  603. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  604. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  605. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  606. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  607. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  608. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  609. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  610. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  611. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  612. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  613. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  614. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +461 -17
  615. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +461 -17
  616. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +464 -20
  617. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9444 -0
  618. nautobot/project-static/docs/user-guide/index.html +461 -17
  619. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +464 -20
  620. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +465 -21
  621. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +461 -17
  622. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +461 -17
  623. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +461 -17
  624. nautobot/project-static/docs/user-guide/platform-functionality/events.html +9617 -0
  625. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +464 -20
  626. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +461 -17
  627. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +461 -17
  628. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +461 -17
  629. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +461 -17
  630. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +461 -17
  631. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +470 -21
  632. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +464 -20
  633. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +464 -20
  634. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +461 -17
  635. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9224 -0
  636. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9722 -0
  637. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +464 -20
  638. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +461 -17
  639. nautobot/project-static/docs/user-guide/platform-functionality/note.html +461 -17
  640. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +461 -17
  641. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +465 -21
  642. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9292 -0
  643. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +461 -17
  644. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +509 -38
  645. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +492 -21
  646. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +461 -17
  647. nautobot/project-static/docs/user-guide/platform-functionality/role.html +461 -17
  648. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +461 -17
  649. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +461 -17
  650. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +464 -20
  651. nautobot/project-static/docs/user-guide/platform-functionality/status.html +461 -17
  652. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +461 -17
  653. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +529 -54
  654. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +461 -17
  655. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +461 -17
  656. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +461 -17
  657. nautobot/project-static/img/jinja_logo.svg +97 -0
  658. nautobot/project-static/js/forms.js +6 -1
  659. nautobot/project-static/js/nav_menu.js +2 -1
  660. nautobot/tenancy/api/serializers.py +0 -2
  661. nautobot/tenancy/api/views.py +9 -13
  662. nautobot/tenancy/factory.py +1 -1
  663. nautobot/tenancy/navigation.py +0 -29
  664. nautobot/tenancy/templates/tenancy/tenant.html +4 -91
  665. nautobot/tenancy/tests/test_filters.py +29 -134
  666. nautobot/tenancy/views.py +35 -24
  667. nautobot/users/admin.py +2 -0
  668. nautobot/users/api/views.py +2 -2
  669. nautobot/users/forms.py +19 -0
  670. nautobot/users/templates/users/preferences.html +22 -0
  671. nautobot/users/tests/test_filters.py +1 -19
  672. nautobot/users/tests/test_views.py +57 -0
  673. nautobot/users/utils.py +8 -0
  674. nautobot/users/views.py +48 -11
  675. nautobot/virtualization/api/views.py +5 -24
  676. nautobot/virtualization/filters.py +1 -2
  677. nautobot/virtualization/models.py +1 -1
  678. nautobot/virtualization/navigation.py +0 -48
  679. nautobot/virtualization/tables.py +2 -2
  680. nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
  681. nautobot/virtualization/templates/virtualization/clustertype.html +0 -39
  682. nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -9
  683. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
  684. nautobot/virtualization/tests/test_filters.py +57 -166
  685. nautobot/virtualization/views.py +18 -15
  686. nautobot/wireless/__init__.py +0 -0
  687. nautobot/wireless/api/__init__.py +0 -0
  688. nautobot/wireless/api/serializers.py +44 -0
  689. nautobot/wireless/api/urls.py +20 -0
  690. nautobot/wireless/api/views.py +34 -0
  691. nautobot/wireless/apps.py +8 -0
  692. nautobot/wireless/choices.py +345 -0
  693. nautobot/wireless/factory.py +138 -0
  694. nautobot/wireless/filters.py +167 -0
  695. nautobot/wireless/forms.py +283 -0
  696. nautobot/wireless/homepage.py +19 -0
  697. nautobot/wireless/migrations/0001_initial.py +223 -0
  698. nautobot/wireless/migrations/__init__.py +0 -0
  699. nautobot/wireless/models.py +207 -0
  700. nautobot/wireless/navigation.py +105 -0
  701. nautobot/wireless/tables.py +244 -0
  702. nautobot/wireless/templates/wireless/radioprofile_retrieve.html +81 -0
  703. nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +26 -0
  704. nautobot/wireless/templates/wireless/wirelessnetwork_create.html +88 -0
  705. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +56 -0
  706. nautobot/wireless/tests/__init__.py +0 -0
  707. nautobot/wireless/tests/integration/__init__.py +0 -0
  708. nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
  709. nautobot/wireless/tests/test_api.py +247 -0
  710. nautobot/wireless/tests/test_filters.py +82 -0
  711. nautobot/wireless/tests/test_models.py +22 -0
  712. nautobot/wireless/tests/test_views.py +378 -0
  713. nautobot/wireless/urls.py +13 -0
  714. nautobot/wireless/views.py +119 -0
  715. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/METADATA +9 -12
  716. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/RECORD +720 -549
  717. nautobot/core/utils/navigation.py +0 -54
  718. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/LICENSE.txt +0 -0
  719. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/NOTICE +0 -0
  720. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/WHEEL +0 -0
  721. {nautobot-2.3.16.dist-info → nautobot-2.4.0.dist-info}/entry_points.txt +0 -0
@@ -2112,6 +2112,27 @@
2112
2112
 
2113
2113
 
2114
2114
 
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+ <li class="md-nav__item">
2122
+ <a href="../../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2123
+
2124
+
2125
+ <span class="md-ellipsis">
2126
+ Wireless Networks and Controllers
2127
+ </span>
2128
+
2129
+
2130
+ </a>
2131
+ </li>
2132
+
2133
+
2134
+
2135
+
2115
2136
  </ul>
2116
2137
  </nav>
2117
2138
 
@@ -3944,6 +3965,27 @@
3944
3965
 
3945
3966
 
3946
3967
 
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+ <li class="md-nav__item">
3975
+ <a href="../../../user-guide/core-data-model/dcim/virtualdevicecontext.html" class="md-nav__link">
3976
+
3977
+
3978
+ <span class="md-ellipsis">
3979
+ Virtual Device Context
3980
+ </span>
3981
+
3982
+
3983
+ </a>
3984
+ </li>
3985
+
3986
+
3987
+
3988
+
3947
3989
  </ul>
3948
3990
  </nav>
3949
3991
 
@@ -4556,6 +4598,123 @@
4556
4598
 
4557
4599
 
4558
4600
 
4601
+
4602
+
4603
+
4604
+
4605
+
4606
+
4607
+
4608
+
4609
+
4610
+
4611
+
4612
+
4613
+
4614
+ <li class="md-nav__item md-nav__item--nested">
4615
+
4616
+
4617
+
4618
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_9" >
4619
+
4620
+
4621
+
4622
+ <div class="md-nav__link md-nav__container">
4623
+ <a href="../../../user-guide/core-data-model/wireless/index.html" class="md-nav__link ">
4624
+
4625
+
4626
+ <span class="md-ellipsis">
4627
+ Wireless
4628
+ </span>
4629
+
4630
+
4631
+ </a>
4632
+
4633
+
4634
+ <label class="md-nav__link " for="__nav_2_3_9" id="__nav_2_3_9_label" tabindex="0">
4635
+ <span class="md-nav__icon md-icon"></span>
4636
+ </label>
4637
+
4638
+ </div>
4639
+
4640
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_9_label" aria-expanded="false">
4641
+ <label class="md-nav__title" for="__nav_2_3_9">
4642
+ <span class="md-nav__icon md-icon"></span>
4643
+ Wireless
4644
+ </label>
4645
+ <ul class="md-nav__list" data-md-scrollfix>
4646
+
4647
+
4648
+
4649
+
4650
+
4651
+
4652
+
4653
+ <li class="md-nav__item">
4654
+ <a href="../../../user-guide/core-data-model/wireless/supporteddatarate.html" class="md-nav__link">
4655
+
4656
+
4657
+ <span class="md-ellipsis">
4658
+ Supported Data Rate
4659
+ </span>
4660
+
4661
+
4662
+ </a>
4663
+ </li>
4664
+
4665
+
4666
+
4667
+
4668
+
4669
+
4670
+
4671
+
4672
+
4673
+
4674
+ <li class="md-nav__item">
4675
+ <a href="../../../user-guide/core-data-model/wireless/radioprofile.html" class="md-nav__link">
4676
+
4677
+
4678
+ <span class="md-ellipsis">
4679
+ Radio Profile
4680
+ </span>
4681
+
4682
+
4683
+ </a>
4684
+ </li>
4685
+
4686
+
4687
+
4688
+
4689
+
4690
+
4691
+
4692
+
4693
+
4694
+
4695
+ <li class="md-nav__item">
4696
+ <a href="../../../user-guide/core-data-model/wireless/wirelessnetwork.html" class="md-nav__link">
4697
+
4698
+
4699
+ <span class="md-ellipsis">
4700
+ Wireless Network
4701
+ </span>
4702
+
4703
+
4704
+ </a>
4705
+ </li>
4706
+
4707
+
4708
+
4709
+
4710
+ </ul>
4711
+ </nav>
4712
+
4713
+ </li>
4714
+
4715
+
4716
+
4717
+
4559
4718
  </ul>
4560
4719
  </nav>
4561
4720
 
@@ -4767,6 +4926,27 @@
4767
4926
 
4768
4927
 
4769
4928
 
4929
+ <li class="md-nav__item">
4930
+ <a href="../../../user-guide/platform-functionality/events.html" class="md-nav__link">
4931
+
4932
+
4933
+ <span class="md-ellipsis">
4934
+ Event Notifications
4935
+ </span>
4936
+
4937
+
4938
+ </a>
4939
+ </li>
4940
+
4941
+
4942
+
4943
+
4944
+
4945
+
4946
+
4947
+
4948
+
4949
+
4770
4950
  <li class="md-nav__item">
4771
4951
  <a href="../../../user-guide/platform-functionality/exporttemplate.html" class="md-nav__link">
4772
4952
 
@@ -4841,7 +5021,7 @@
4841
5021
 
4842
5022
 
4843
5023
 
4844
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_9" >
5024
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_10" >
4845
5025
 
4846
5026
 
4847
5027
 
@@ -4857,14 +5037,14 @@
4857
5037
  </a>
4858
5038
 
4859
5039
 
4860
- <label class="md-nav__link " for="__nav_2_4_9" id="__nav_2_4_9_label" tabindex="0">
5040
+ <label class="md-nav__link " for="__nav_2_4_10" id="__nav_2_4_10_label" tabindex="0">
4861
5041
  <span class="md-nav__icon md-icon"></span>
4862
5042
  </label>
4863
5043
 
4864
5044
  </div>
4865
5045
 
4866
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_9_label" aria-expanded="false">
4867
- <label class="md-nav__title" for="__nav_2_4_9">
5046
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_10_label" aria-expanded="false">
5047
+ <label class="md-nav__title" for="__nav_2_4_10">
4868
5048
  <span class="md-nav__icon md-icon"></span>
4869
5049
  GraphQL
4870
5050
  </label>
@@ -4937,7 +5117,7 @@
4937
5117
 
4938
5118
 
4939
5119
 
4940
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_11" >
5120
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_12" >
4941
5121
 
4942
5122
 
4943
5123
 
@@ -4953,14 +5133,14 @@
4953
5133
  </a>
4954
5134
 
4955
5135
 
4956
- <label class="md-nav__link " for="__nav_2_4_11" id="__nav_2_4_11_label" tabindex="0">
5136
+ <label class="md-nav__link " for="__nav_2_4_12" id="__nav_2_4_12_label" tabindex="0">
4957
5137
  <span class="md-nav__icon md-icon"></span>
4958
5138
  </label>
4959
5139
 
4960
5140
  </div>
4961
5141
 
4962
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_11_label" aria-expanded="false">
4963
- <label class="md-nav__title" for="__nav_2_4_11">
5142
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_12_label" aria-expanded="false">
5143
+ <label class="md-nav__title" for="__nav_2_4_12">
4964
5144
  <span class="md-nav__icon md-icon"></span>
4965
5145
  Jobs
4966
5146
  </label>
@@ -4972,6 +5152,27 @@
4972
5152
 
4973
5153
 
4974
5154
 
5155
+ <li class="md-nav__item">
5156
+ <a href="../../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5157
+
5158
+
5159
+ <span class="md-ellipsis">
5160
+ Kubernetes Job Support
5161
+ </span>
5162
+
5163
+
5164
+ </a>
5165
+ </li>
5166
+
5167
+
5168
+
5169
+
5170
+
5171
+
5172
+
5173
+
5174
+
5175
+
4975
5176
  <li class="md-nav__item">
4976
5177
  <a href="../../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
4977
5178
 
@@ -5035,6 +5236,27 @@
5035
5236
 
5036
5237
 
5037
5238
 
5239
+ <li class="md-nav__item">
5240
+ <a href="../../../user-guide/platform-functionality/jobs/jobqueue.html" class="md-nav__link">
5241
+
5242
+
5243
+ <span class="md-ellipsis">
5244
+ Job Queues
5245
+ </span>
5246
+
5247
+
5248
+ </a>
5249
+ </li>
5250
+
5251
+
5252
+
5253
+
5254
+
5255
+
5256
+
5257
+
5258
+
5259
+
5038
5260
  <li class="md-nav__item">
5039
5261
  <a href="../../../user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html" class="md-nav__link">
5040
5262
 
@@ -5148,6 +5370,27 @@
5148
5370
 
5149
5371
 
5150
5372
 
5373
+ <li class="md-nav__item">
5374
+ <a href="../../../user-guide/platform-functionality/rendering-jinja-templates.html" class="md-nav__link">
5375
+
5376
+
5377
+ <span class="md-ellipsis">
5378
+ Rendering Jinja Templates
5379
+ </span>
5380
+
5381
+
5382
+ </a>
5383
+ </li>
5384
+
5385
+
5386
+
5387
+
5388
+
5389
+
5390
+
5391
+
5392
+
5393
+
5151
5394
 
5152
5395
 
5153
5396
 
@@ -5159,7 +5402,7 @@
5159
5402
 
5160
5403
 
5161
5404
 
5162
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_16" >
5405
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_18" >
5163
5406
 
5164
5407
 
5165
5408
 
@@ -5175,14 +5418,14 @@
5175
5418
  </a>
5176
5419
 
5177
5420
 
5178
- <label class="md-nav__link " for="__nav_2_4_16" id="__nav_2_4_16_label" tabindex="0">
5421
+ <label class="md-nav__link " for="__nav_2_4_18" id="__nav_2_4_18_label" tabindex="0">
5179
5422
  <span class="md-nav__icon md-icon"></span>
5180
5423
  </label>
5181
5424
 
5182
5425
  </div>
5183
5426
 
5184
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_16_label" aria-expanded="false">
5185
- <label class="md-nav__title" for="__nav_2_4_16">
5427
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_18_label" aria-expanded="false">
5428
+ <label class="md-nav__title" for="__nav_2_4_18">
5186
5429
  <span class="md-nav__icon md-icon"></span>
5187
5430
  REST API
5188
5431
  </label>
@@ -5402,10 +5645,10 @@
5402
5645
 
5403
5646
 
5404
5647
 
5405
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_23" >
5648
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_25" >
5406
5649
 
5407
5650
 
5408
- <label class="md-nav__link" for="__nav_2_4_23" id="__nav_2_4_23_label" tabindex="0">
5651
+ <label class="md-nav__link" for="__nav_2_4_25" id="__nav_2_4_25_label" tabindex="0">
5409
5652
 
5410
5653
 
5411
5654
  <span class="md-ellipsis">
@@ -5416,8 +5659,8 @@
5416
5659
  <span class="md-nav__icon md-icon"></span>
5417
5660
  </label>
5418
5661
 
5419
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_23_label" aria-expanded="false">
5420
- <label class="md-nav__title" for="__nav_2_4_23">
5662
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_25_label" aria-expanded="false">
5663
+ <label class="md-nav__title" for="__nav_2_4_25">
5421
5664
  <span class="md-nav__icon md-icon"></span>
5422
5665
  Users
5423
5666
  </label>
@@ -6831,6 +7074,27 @@
6831
7074
 
6832
7075
 
6833
7076
 
7077
+ <li class="md-nav__item">
7078
+ <a href="events.html" class="md-nav__link">
7079
+
7080
+
7081
+ <span class="md-ellipsis">
7082
+ nautobot.apps.events
7083
+ </span>
7084
+
7085
+
7086
+ </a>
7087
+ </li>
7088
+
7089
+
7090
+
7091
+
7092
+
7093
+
7094
+
7095
+
7096
+
7097
+
6834
7098
  <li class="md-nav__item">
6835
7099
  <a href="exceptions.html" class="md-nav__link">
6836
7100
 
@@ -7481,15 +7745,6 @@
7481
7745
  </span>
7482
7746
  </a>
7483
7747
 
7484
- </li>
7485
-
7486
- <li class="md-nav__item">
7487
- <a href="#nautobot.apps.utils.get_all_new_ui_ready_routes" class="md-nav__link">
7488
- <span class="md-ellipsis">
7489
- get_all_new_ui_ready_routes
7490
- </span>
7491
- </a>
7492
-
7493
7748
  </li>
7494
7749
 
7495
7750
  <li class="md-nav__item">
@@ -7580,15 +7835,6 @@
7580
7835
  </span>
7581
7836
  </a>
7582
7837
 
7583
- </li>
7584
-
7585
- <li class="md-nav__item">
7586
- <a href="#nautobot.apps.utils.get_only_new_ui_ready_routes" class="md-nav__link">
7587
- <span class="md-ellipsis">
7588
- get_only_new_ui_ready_routes
7589
- </span>
7590
- </a>
7591
-
7592
7838
  </li>
7593
7839
 
7594
7840
  <li class="md-nav__item">
@@ -8148,11 +8394,128 @@
8148
8394
 
8149
8395
 
8150
8396
 
8151
- </ul>
8152
- </nav>
8153
-
8154
- </li>
8155
-
8397
+
8398
+
8399
+
8400
+
8401
+
8402
+
8403
+
8404
+
8405
+
8406
+
8407
+
8408
+
8409
+
8410
+ <li class="md-nav__item md-nav__item--nested">
8411
+
8412
+
8413
+
8414
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_9_5" >
8415
+
8416
+
8417
+
8418
+ <div class="md-nav__link md-nav__container">
8419
+ <a href="../../../development/apps/migration/ui-component-framework/index.html" class="md-nav__link ">
8420
+
8421
+
8422
+ <span class="md-ellipsis">
8423
+ UI Component Framework
8424
+ </span>
8425
+
8426
+
8427
+ </a>
8428
+
8429
+
8430
+ <label class="md-nav__link " for="__nav_3_2_9_5" id="__nav_3_2_9_5_label" tabindex="0">
8431
+ <span class="md-nav__icon md-icon"></span>
8432
+ </label>
8433
+
8434
+ </div>
8435
+
8436
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_2_9_5_label" aria-expanded="false">
8437
+ <label class="md-nav__title" for="__nav_3_2_9_5">
8438
+ <span class="md-nav__icon md-icon"></span>
8439
+ UI Component Framework
8440
+ </label>
8441
+ <ul class="md-nav__list" data-md-scrollfix>
8442
+
8443
+
8444
+
8445
+
8446
+
8447
+
8448
+
8449
+ <li class="md-nav__item">
8450
+ <a href="../../../development/apps/migration/ui-component-framework/migration-steps.html" class="md-nav__link">
8451
+
8452
+
8453
+ <span class="md-ellipsis">
8454
+ Migration steps
8455
+ </span>
8456
+
8457
+
8458
+ </a>
8459
+ </li>
8460
+
8461
+
8462
+
8463
+
8464
+
8465
+
8466
+
8467
+
8468
+
8469
+
8470
+ <li class="md-nav__item">
8471
+ <a href="../../../development/apps/migration/ui-component-framework/custom-content.html" class="md-nav__link">
8472
+
8473
+
8474
+ <span class="md-ellipsis">
8475
+ Custom content
8476
+ </span>
8477
+
8478
+
8479
+ </a>
8480
+ </li>
8481
+
8482
+
8483
+
8484
+
8485
+
8486
+
8487
+
8488
+
8489
+
8490
+
8491
+ <li class="md-nav__item">
8492
+ <a href="../../../development/apps/migration/ui-component-framework/best-practices.html" class="md-nav__link">
8493
+
8494
+
8495
+ <span class="md-ellipsis">
8496
+ Best practices
8497
+ </span>
8498
+
8499
+
8500
+ </a>
8501
+ </li>
8502
+
8503
+
8504
+
8505
+
8506
+ </ul>
8507
+ </nav>
8508
+
8509
+ </li>
8510
+
8511
+
8512
+
8513
+
8514
+ </ul>
8515
+ </nav>
8516
+
8517
+ </li>
8518
+
8156
8519
 
8157
8520
 
8158
8521
 
@@ -8493,6 +8856,27 @@
8493
8856
 
8494
8857
 
8495
8858
 
8859
+ <li class="md-nav__item">
8860
+ <a href="../../../development/core/minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
8861
+
8862
+
8863
+ <span class="md-ellipsis">
8864
+ Minikube Dev Environment for K8s Jobs
8865
+ </span>
8866
+
8867
+
8868
+ </a>
8869
+ </li>
8870
+
8871
+
8872
+
8873
+
8874
+
8875
+
8876
+
8877
+
8878
+
8879
+
8496
8880
  <li class="md-nav__item">
8497
8881
  <a href="../../../development/core/model-checklist.html" class="md-nav__link">
8498
8882
 
@@ -8682,6 +9066,27 @@
8682
9066
 
8683
9067
 
8684
9068
 
9069
+ <li class="md-nav__item">
9070
+ <a href="../../../development/core/ui-component-framework.html" class="md-nav__link">
9071
+
9072
+
9073
+ <span class="md-ellipsis">
9074
+ UI Component Framework
9075
+ </span>
9076
+
9077
+
9078
+ </a>
9079
+ </li>
9080
+
9081
+
9082
+
9083
+
9084
+
9085
+
9086
+
9087
+
9088
+
9089
+
8685
9090
  <li class="md-nav__item">
8686
9091
  <a href="../../../development/core/release-checklist.html" class="md-nav__link">
8687
9092
 
@@ -8764,6 +9169,27 @@
8764
9169
 
8765
9170
 
8766
9171
 
9172
+ <li class="md-nav__item">
9173
+ <a href="../../../release-notes/version-2.4.html" class="md-nav__link">
9174
+
9175
+
9176
+ <span class="md-ellipsis">
9177
+ Version 2.4
9178
+ </span>
9179
+
9180
+
9181
+ </a>
9182
+ </li>
9183
+
9184
+
9185
+
9186
+
9187
+
9188
+
9189
+
9190
+
9191
+
9192
+
8767
9193
  <li class="md-nav__item">
8768
9194
  <a href="../../../release-notes/version-2.3.html" class="md-nav__link">
8769
9195
 
@@ -9682,15 +10108,6 @@
9682
10108
  </span>
9683
10109
  </a>
9684
10110
 
9685
- </li>
9686
-
9687
- <li class="md-nav__item">
9688
- <a href="#nautobot.apps.utils.get_all_new_ui_ready_routes" class="md-nav__link">
9689
- <span class="md-ellipsis">
9690
- get_all_new_ui_ready_routes
9691
- </span>
9692
- </a>
9693
-
9694
10111
  </li>
9695
10112
 
9696
10113
  <li class="md-nav__item">
@@ -9781,15 +10198,6 @@
9781
10198
  </span>
9782
10199
  </a>
9783
10200
 
9784
- </li>
9785
-
9786
- <li class="md-nav__item">
9787
- <a href="#nautobot.apps.utils.get_only_new_ui_ready_routes" class="md-nav__link">
9788
- <span class="md-ellipsis">
9789
- get_only_new_ui_ready_routes
9790
- </span>
9791
- </a>
9792
-
9793
10201
  </li>
9794
10202
 
9795
10203
  <li class="md-nav__item">
@@ -10110,7 +10518,12 @@
10110
10518
 
10111
10519
  <div class="doc doc-contents first">
10112
10520
 
10113
- <p>Nautobot utility functions.</p>
10521
+ <p>Nautobot utility functions.</p>
10522
+
10523
+
10524
+
10525
+
10526
+
10114
10527
 
10115
10528
 
10116
10529
 
@@ -10136,10 +10549,15 @@
10136
10549
 
10137
10550
  <div class="doc doc-contents ">
10138
10551
  <p class="doc doc-class-bases">
10139
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
10552
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
10553
+
10554
+
10555
+ <p>Helper class to get ContentType for models that implements the to_objectchange method for change logging.</p>
10556
+
10557
+
10558
+
10140
10559
 
10141
10560
 
10142
- <p>Helper class to get ContentType for models that implements the to_objectchange method for change logging.</p>
10143
10561
 
10144
10562
 
10145
10563
 
@@ -10165,7 +10583,7 @@
10165
10583
 
10166
10584
  <div class="doc doc-contents ">
10167
10585
 
10168
- <p>Return a list of classes that implement the to_objectchange method</p>
10586
+ <p>Return a list of classes that implement the to_objectchange method</p>
10169
10587
 
10170
10588
  </div>
10171
10589
 
@@ -10193,12 +10611,17 @@
10193
10611
  <div class="doc doc-contents ">
10194
10612
 
10195
10613
 
10196
- <p>Helper class that delays evaluation of the registry contents for the functionality store
10614
+ <p>Helper class that delays evaluation of the registry contents for the functionality store
10197
10615
  until it has been populated.</p>
10198
10616
 
10199
10617
 
10200
10618
 
10201
10619
 
10620
+
10621
+
10622
+
10623
+
10624
+
10202
10625
  <div class="doc doc-children">
10203
10626
 
10204
10627
 
@@ -10220,7 +10643,7 @@ until it has been populated.</p>
10220
10643
 
10221
10644
  <div class="doc doc-contents ">
10222
10645
 
10223
- <p>Given an extras feature, return a iterable of app_label: [models] for content type lookup.</p>
10646
+ <p>Given an extras feature, return a iterable of app_label: [models] for content type lookup.</p>
10224
10647
  <p>Misnamed, as it returns an iterable of (key, value) (i.e. dict.items()) rather than an actual dict.</p>
10225
10648
  <p>Raises a KeyError if the given feature doesn't exist.</p>
10226
10649
 
@@ -10239,7 +10662,7 @@ until it has been populated.</p>
10239
10662
 
10240
10663
  <div class="doc doc-contents ">
10241
10664
 
10242
- <p>Given an extras feature, return a list of 2-tuple of <code>(model_label, pk)</code>
10665
+ <p>Given an extras feature, return a list of 2-tuple of <code>(model_label, pk)</code>
10243
10666
  suitable for use as <code>choices</code> on a choice field:</p>
10244
10667
  <div class="highlight"><pre><span></span><code>&gt;&gt;&gt; FeatureQuery(&#39;statuses&#39;).get_choices()
10245
10668
  [(&#39;dcim.device&#39;, 13), (&#39;dcim.rack&#39;, 34)]
@@ -10261,7 +10684,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10261
10684
 
10262
10685
  <div class="doc doc-contents ">
10263
10686
 
10264
- <p>Given an extras feature, return a Q object for content type lookup</p>
10687
+ <p>Given an extras feature, return a Q object for content type lookup</p>
10265
10688
 
10266
10689
  </div>
10267
10690
 
@@ -10278,7 +10701,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10278
10701
 
10279
10702
  <div class="doc doc-contents ">
10280
10703
 
10281
- <p>Return a list of model classes that declare this feature.</p>
10704
+ <p>Return a list of model classes that declare this feature.</p>
10282
10705
  <p>Cache is cleared by post_migrate signal (nautobot.extras.signals.post_migrate_clear_content_type_caches).</p>
10283
10706
 
10284
10707
  </div>
@@ -10307,7 +10730,12 @@ suitable for use as <code>choices</code> on a choice field:</p>
10307
10730
  <div class="doc doc-contents ">
10308
10731
 
10309
10732
 
10310
- <p>Mixin class that gets a list of featured models.</p>
10733
+ <p>Mixin class that gets a list of featured models.</p>
10734
+
10735
+
10736
+
10737
+
10738
+
10311
10739
 
10312
10740
 
10313
10741
 
@@ -10333,7 +10761,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10333
10761
 
10334
10762
  <div class="doc doc-contents ">
10335
10763
 
10336
- <p>Given an extras feature, return a Q object for content type lookup</p>
10764
+ <p>Given an extras feature, return a Q object for content type lookup</p>
10337
10765
 
10338
10766
  </div>
10339
10767
 
@@ -10350,7 +10778,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10350
10778
 
10351
10779
  <div class="doc doc-contents ">
10352
10780
 
10353
- <p>Return a list of classes that has implements this <code>name</code>.</p>
10781
+ <p>Return a list of classes that has implements this <code>name</code>.</p>
10354
10782
 
10355
10783
  </div>
10356
10784
 
@@ -10381,6 +10809,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10381
10809
 
10382
10810
 
10383
10811
 
10812
+
10813
+
10814
+
10815
+
10816
+
10384
10817
  <div class="doc doc-children">
10385
10818
 
10386
10819
 
@@ -10405,7 +10838,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10405
10838
 
10406
10839
  <div class="doc doc-contents ">
10407
10840
 
10408
- <p>Current checked out repository head commit.</p>
10841
+ <p>Current checked out repository head commit.</p>
10409
10842
  </div>
10410
10843
 
10411
10844
  </div>
@@ -10423,7 +10856,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10423
10856
 
10424
10857
  <div class="doc doc-contents ">
10425
10858
 
10426
- <p>Ensure that we have a clone of the given remote Git repository URL at the given local directory path.</p>
10859
+ <p>Ensure that we have a clone of the given remote Git repository URL at the given local directory path.</p>
10427
10860
 
10428
10861
 
10429
10862
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10438,9 +10871,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10438
10871
  </thead>
10439
10872
  <tbody>
10440
10873
  <tr class="doc-section-item">
10441
- <td><code>path</code></td>
10442
10874
  <td>
10443
- <code><autoref identifier="str" optional>str</autoref></code>
10875
+ <code>path</code>
10876
+ </td>
10877
+ <td>
10878
+ <code>str</code>
10444
10879
  </td>
10445
10880
  <td>
10446
10881
  <div class="doc-md-description">
@@ -10452,9 +10887,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10452
10887
  </td>
10453
10888
  </tr>
10454
10889
  <tr class="doc-section-item">
10455
- <td><code>url</code></td>
10456
10890
  <td>
10457
- <code><autoref identifier="str" optional>str</autoref></code>
10891
+ <code>url</code>
10892
+ </td>
10893
+ <td>
10894
+ <code>str</code>
10458
10895
  </td>
10459
10896
  <td>
10460
10897
  <div class="doc-md-description">
@@ -10466,9 +10903,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10466
10903
  </td>
10467
10904
  </tr>
10468
10905
  <tr class="doc-section-item">
10469
- <td><code>clone_initially</code></td>
10470
10906
  <td>
10471
- <code><autoref identifier="bool" optional>bool</autoref></code>
10907
+ <code>clone_initially</code>
10908
+ </td>
10909
+ <td>
10910
+ <code>bool</code>
10472
10911
  </td>
10473
10912
  <td>
10474
10913
  <div class="doc-md-description">
@@ -10497,7 +10936,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10497
10936
 
10498
10937
  <div class="doc doc-contents ">
10499
10938
 
10500
- <p>Check out the given branch, and optionally the specified commit within that branch.</p>
10939
+ <p>Check out the given branch, and optionally the specified commit within that branch.</p>
10501
10940
 
10502
10941
 
10503
10942
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10512,9 +10951,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10512
10951
  </thead>
10513
10952
  <tbody>
10514
10953
  <tr class="doc-section-item">
10515
- <td><code>branch</code></td>
10516
10954
  <td>
10517
- <code><autoref identifier="str" optional>str</autoref></code>
10955
+ <code>branch</code>
10956
+ </td>
10957
+ <td>
10958
+ <code>str</code>
10518
10959
  </td>
10519
10960
  <td>
10520
10961
  <div class="doc-md-description">
@@ -10526,9 +10967,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10526
10967
  </td>
10527
10968
  </tr>
10528
10969
  <tr class="doc-section-item">
10529
- <td><code>commit_hexsha</code></td>
10530
10970
  <td>
10531
- <code><autoref identifier="str" optional>str</autoref></code>
10971
+ <code>commit_hexsha</code>
10972
+ </td>
10973
+ <td>
10974
+ <code>str</code>
10532
10975
  </td>
10533
10976
  <td>
10534
10977
  <div class="doc-md-description">
@@ -10541,7 +10984,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10541
10984
  </tr>
10542
10985
  </tbody>
10543
10986
  </table>
10544
- <p>If <code>commit_hexsha</code> is specified and <code>branch</code> is either a tag or a commit identifier, they must match.
10987
+ <p>If <code>commit_hexsha</code> is specified and <code>branch</code> is either a tag or a commit identifier, they must match.
10545
10988
  If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch name, it must contain the specified commit.</p>
10546
10989
 
10547
10990
 
@@ -10556,7 +10999,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10556
10999
  <tbody>
10557
11000
  <tr class="doc-section-item">
10558
11001
  <td>
10559
- <code>(<autoref identifier="str" optional>str</autoref>, <autoref identifier="bool" optional>bool</autoref>)</code>
11002
+ <code>(str, bool)</code>
10560
11003
  </td>
10561
11004
  <td>
10562
11005
  <div class="doc-md-description">
@@ -10592,10 +11035,15 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10592
11035
 
10593
11036
  <div class="doc doc-contents ">
10594
11037
  <p class="doc doc-class-bases">
10595
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
11038
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
11039
+
11040
+
11041
+ <p>Helper class to get ContentType models that implements role.</p>
11042
+
11043
+
11044
+
10596
11045
 
10597
11046
 
10598
- <p>Helper class to get ContentType models that implements role.</p>
10599
11047
 
10600
11048
 
10601
11049
 
@@ -10621,7 +11069,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10621
11069
 
10622
11070
  <div class="doc doc-contents ">
10623
11071
 
10624
- <p>Return a list of classes that implements roles e.g roles = ...</p>
11072
+ <p>Return a list of classes that implements roles e.g roles = ...</p>
10625
11073
 
10626
11074
  </div>
10627
11075
 
@@ -10648,10 +11096,15 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10648
11096
 
10649
11097
  <div class="doc doc-contents ">
10650
11098
  <p class="doc doc-class-bases">
10651
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
11099
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
11100
+
11101
+
11102
+ <p>Helper class to get ContentType models that implements tags(TagsField)</p>
11103
+
11104
+
11105
+
10652
11106
 
10653
11107
 
10654
- <p>Helper class to get ContentType models that implements tags(TagsField)</p>
10655
11108
 
10656
11109
 
10657
11110
 
@@ -10677,7 +11130,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10677
11130
 
10678
11131
  <div class="doc doc-contents ">
10679
11132
 
10680
- <p>Return a list of classes that has implements tags e.g tags = TagsField(...)</p>
11133
+ <p>Return a list of classes that has implements tags e.g tags = TagsField(...)</p>
10681
11134
 
10682
11135
  </div>
10683
11136
 
@@ -10703,7 +11156,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10703
11156
 
10704
11157
  <div class="doc doc-contents ">
10705
11158
 
10706
- <p>Return lookup expr with its verbose name</p>
11159
+ <p>Return lookup expr with its verbose name</p>
10707
11160
 
10708
11161
 
10709
11162
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10718,9 +11171,11 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10718
11171
  </thead>
10719
11172
  <tbody>
10720
11173
  <tr class="doc-section-item">
10721
- <td><code>field_name</code></td>
10722
11174
  <td>
10723
- <code><autoref identifier="str" optional>str</autoref></code>
11175
+ <code>field_name</code>
11176
+ </td>
11177
+ <td>
11178
+ <code>str</code>
10724
11179
  </td>
10725
11180
  <td>
10726
11181
  <div class="doc-md-description">
@@ -10732,9 +11187,11 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10732
11187
  </td>
10733
11188
  </tr>
10734
11189
  <tr class="doc-section-item">
10735
- <td><code>_verbose_name</code></td>
10736
11190
  <td>
10737
- <code><autoref identifier="str" optional>str</autoref></code>
11191
+ <code>_verbose_name</code>
11192
+ </td>
11193
+ <td>
11194
+ <code>str</code>
10738
11195
  </td>
10739
11196
  <td>
10740
11197
  <div class="doc-md-description">
@@ -10769,7 +11226,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10769
11226
 
10770
11227
  <div class="doc doc-contents ">
10771
11228
 
10772
- <p>Helper method to check if a key field is Python/GraphQL safe.
11229
+ <p>Helper method to check if a key field is Python/GraphQL safe.
10773
11230
  Used in CustomField, ComputedField and Relationship models.</p>
10774
11231
 
10775
11232
  </div>
@@ -10787,7 +11244,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
10787
11244
 
10788
11245
  <div class="doc doc-contents ">
10789
11246
 
10790
- <p>Decorator to mark a class as deprecated with a custom message about what to do instead of subclassing it.</p>
11247
+ <p>Decorator to mark a class as deprecated with a custom message about what to do instead of subclassing it.</p>
10791
11248
 
10792
11249
  </div>
10793
11250
 
@@ -10804,7 +11261,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
10804
11261
 
10805
11262
  <div class="doc doc-contents ">
10806
11263
 
10807
- <p>Decorator to mark a class as deprecated and suggest a replacement class if it is subclassed from.</p>
11264
+ <p>Decorator to mark a class as deprecated and suggest a replacement class if it is subclassed from.</p>
10808
11265
 
10809
11266
  </div>
10810
11267
 
@@ -10821,7 +11278,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
10821
11278
 
10822
11279
  <div class="doc doc-contents ">
10823
11280
 
10824
- <div class="highlight"><pre><span></span><code>Convert Git diff log into a list splitted by \n
11281
+ <div class="highlight"><pre><span></span><code>Convert Git diff log into a list splitted by \n
10825
11282
 
10826
11283
  Example:
10827
11284
  &gt;&gt;&gt; git_log = &quot;M index.html
@@ -10845,7 +11302,7 @@ Example:
10845
11302
 
10846
11303
  <div class="doc doc-contents ">
10847
11304
 
10848
- <p>Convert request QueryDict/GET into an acceptable factory formset QueryDict
11305
+ <p>Convert request QueryDict/GET into an acceptable factory formset QueryDict
10849
11306
  while discarding <code>querydict</code> params which are not part of <code>filterset_class</code> params</p>
10850
11307
 
10851
11308
 
@@ -10861,9 +11318,11 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10861
11318
  </thead>
10862
11319
  <tbody>
10863
11320
  <tr class="doc-section-item">
10864
- <td><code>request_querydict</code></td>
10865
11321
  <td>
10866
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11322
+ <code>request_querydict</code>
11323
+ </td>
11324
+ <td>
11325
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
10867
11326
  </td>
10868
11327
  <td>
10869
11328
  <div class="doc-md-description">
@@ -10875,9 +11334,11 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10875
11334
  </td>
10876
11335
  </tr>
10877
11336
  <tr class="doc-section-item">
10878
- <td><code>filterset</code></td>
10879
11337
  <td>
10880
- <code><autoref identifier="FilterSet" optional>FilterSet</autoref></code>
11338
+ <code>filterset</code>
11339
+ </td>
11340
+ <td>
11341
+ <code>FilterSet</code>
10881
11342
  </td>
10882
11343
  <td>
10883
11344
  <div class="doc-md-description">
@@ -10923,7 +11384,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10923
11384
 
10924
11385
  <div class="doc doc-contents ">
10925
11386
 
10926
- <p>Decorator that wraps a models existing clean method to also execute registered plugin custom validators</p>
11387
+ <p>Decorator that wraps a models existing clean method to also execute registered plugin custom validators</p>
10927
11388
  <p>:param model_clean_func: The original model clean method which is to be wrapped</p>
10928
11389
 
10929
11390
  </div>
@@ -10941,7 +11402,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10941
11402
 
10942
11403
  <div class="doc doc-contents ">
10943
11404
 
10944
- <p>Deep merge two dictionaries (new into original) and return a new dict</p>
11405
+ <p>Deep merge two dictionaries (new into original) and return a new dict</p>
10945
11406
 
10946
11407
  </div>
10947
11408
 
@@ -10958,7 +11419,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10958
11419
 
10959
11420
  <div class="doc doc-contents ">
10960
11421
 
10961
- <p>Ensure <code>query_params</code> includes <code>content_type</code> and <code>field_name</code> and <code>content_type</code> is a valid ContentType.</p>
11422
+ <p>Ensure <code>query_params</code> includes <code>content_type</code> and <code>field_name</code> and <code>content_type</code> is a valid ContentType.</p>
10962
11423
  <p>Return the 'ContentTypes' model and 'field_name' if validation was successful.</p>
10963
11424
 
10964
11425
  </div>
@@ -10976,7 +11437,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10976
11437
 
10977
11438
  <div class="doc doc-contents ">
10978
11439
 
10979
- <p>For instances of model that have an invalid NULL status field, create and use a special status_model instance.</p>
11440
+ <p>For instances of model that have an invalid NULL status field, create and use a special status_model instance.</p>
10980
11441
 
10981
11442
  </div>
10982
11443
 
@@ -10993,7 +11454,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
10993
11454
 
10994
11455
  <div class="doc doc-contents ">
10995
11456
 
10996
- <p>Flatten nested dictionaries into a single level by joining key names with a separator.</p>
11457
+ <p>Flatten nested dictionaries into a single level by joining key names with a separator.</p>
10997
11458
  <p>:param d: The dictionary to be flattened
10998
11459
  :param prefix: Initial prefix (if any)
10999
11460
  :param separator: The character to use when concatenating key names</p>
@@ -11013,7 +11474,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11013
11474
 
11014
11475
  <div class="doc doc-contents ">
11015
11476
 
11016
- <p>Flatten a nested iterable such as a list of lists, keeping strings intact.</p>
11477
+ <p>Flatten a nested iterable such as a list of lists, keeping strings intact.</p>
11017
11478
  <p>:param iterable: The iterable to be flattened
11018
11479
  :returns: generator</p>
11019
11480
 
@@ -11032,7 +11493,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11032
11493
 
11033
11494
  <div class="doc doc-contents ">
11034
11495
 
11035
- <p>Return the ideal foreground color (black or white) for a given background color in hexadecimal RGB format.</p>
11496
+ <p>Return the ideal foreground color (black or white) for a given background color in hexadecimal RGB format.</p>
11036
11497
 
11037
11498
  </div>
11038
11499
 
@@ -11049,7 +11510,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11049
11510
 
11050
11511
  <div class="doc doc-contents ">
11051
11512
 
11052
- <p>Return a cryptographic signature that can be used to verify the authenticity of webhook data.</p>
11513
+ <p>Return a cryptographic signature that can be used to verify the authenticity of webhook data.</p>
11053
11514
 
11054
11515
  </div>
11055
11516
 
@@ -11066,24 +11527,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11066
11527
 
11067
11528
  <div class="doc doc-contents ">
11068
11529
 
11069
- <p>Return all lookup expressions for <code>field_name</code> in <code>model</code> filterset</p>
11070
-
11071
- </div>
11072
-
11073
- </div>
11074
-
11075
- <div class="doc doc-object doc-function">
11076
-
11077
-
11078
- <h2 id="nautobot.apps.utils.get_all_new_ui_ready_routes" class="doc doc-heading">
11079
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_all_new_ui_ready_routes</span><span class="p">()</span></code>
11080
-
11081
- <a href="#nautobot.apps.utils.get_all_new_ui_ready_routes" class="headerlink" title="Permanent link">&para;</a></h2>
11082
-
11083
-
11084
- <div class="doc doc-contents ">
11085
-
11086
-
11530
+ <p>Return all lookup expressions for <code>field_name</code> in <code>model</code> filterset</p>
11087
11531
 
11088
11532
  </div>
11089
11533
 
@@ -11100,7 +11544,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11100
11544
 
11101
11545
  <div class="doc doc-contents ">
11102
11546
 
11103
- <p>Returns the name of the base template, if the base_template is not None
11547
+ <p>Returns the name of the base template, if the base_template is not None
11104
11548
  Otherwise, default to using "<app>/<model>.html" as the base template, if it exists.
11105
11549
  Otherwise, check if "<app>/<model>_retrieve.html" used in <code>NautobotUIViewSet</code> exists.
11106
11550
  If both templates do not exist, fall back to "base.html".</p>
@@ -11120,7 +11564,7 @@ If both templates do not exist, fall back to "base.html".</p>
11120
11564
 
11121
11565
  <div class="doc doc-contents ">
11122
11566
 
11123
- <p>Return a dictionary of celery queues and the number of workers active on the queue in
11567
+ <p>Return a dictionary of celery queues and the number of workers active on the queue in
11124
11568
  the form {queue_name: num_workers}</p>
11125
11569
 
11126
11570
  </div>
@@ -11138,7 +11582,7 @@ the form {queue_name: num_workers}</p>
11138
11582
 
11139
11583
  <div class="doc doc-contents ">
11140
11584
 
11141
- <p>Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered
11585
+ <p>Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered
11142
11586
  by the model class. If an instance is provided, the queryset will also be filtered by the instance id.</p>
11143
11587
 
11144
11588
  </div>
@@ -11156,7 +11600,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11156
11600
 
11157
11601
  <div class="doc doc-contents ">
11158
11602
 
11159
- <p>Return a label for a given field name and value.</p>
11603
+ <p>Return a label for a given field name and value.</p>
11160
11604
 
11161
11605
 
11162
11606
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -11171,9 +11615,11 @@ by the model class. If an instance is provided, the queryset will also be filter
11171
11615
  </thead>
11172
11616
  <tbody>
11173
11617
  <tr class="doc-section-item">
11174
- <td><code>filter_field</code></td>
11175
11618
  <td>
11176
- <code><autoref identifier="Filter" optional>Filter</autoref></code>
11619
+ <code>filter_field</code>
11620
+ </td>
11621
+ <td>
11622
+ <code>Filter</code>
11177
11623
  </td>
11178
11624
  <td>
11179
11625
  <div class="doc-md-description">
@@ -11199,7 +11645,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11199
11645
  <tbody>
11200
11646
  <tr class="doc-section-item">
11201
11647
  <td>
11202
- <code><autoref identifier="str" optional>str</autoref></code>
11648
+ <code>str</code>
11203
11649
  </td>
11204
11650
  <td>
11205
11651
  <div class="doc-md-description">
@@ -11225,7 +11671,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11225
11671
 
11226
11672
  <div class="doc doc-contents ">
11227
11673
 
11228
- <p>Remove any <code>non_filter_params</code> and fields that are not a part of the filterset from <code>filter_params</code>
11674
+ <p>Remove any <code>non_filter_params</code> and fields that are not a part of the filterset from <code>filter_params</code>
11229
11675
  to return only queryset filterable parameters.</p>
11230
11676
 
11231
11677
 
@@ -11241,9 +11687,11 @@ to return only queryset filterable parameters.</p>
11241
11687
  </thead>
11242
11688
  <tbody>
11243
11689
  <tr class="doc-section-item">
11244
- <td><code>filter_params</code></td>
11245
11690
  <td>
11246
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11691
+ <code>filter_params</code>
11692
+ </td>
11693
+ <td>
11694
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
11247
11695
  </td>
11248
11696
  <td>
11249
11697
  <div class="doc-md-description">
@@ -11255,9 +11703,11 @@ to return only queryset filterable parameters.</p>
11255
11703
  </td>
11256
11704
  </tr>
11257
11705
  <tr class="doc-section-item">
11258
- <td><code>non_filter_params</code></td>
11259
11706
  <td>
11260
- <code><autoref identifier="list" optional>list</autoref></code>
11707
+ <code>non_filter_params</code>
11708
+ </td>
11709
+ <td>
11710
+ <code>list</code>
11261
11711
  </td>
11262
11712
  <td>
11263
11713
  <div class="doc-md-description">
@@ -11269,9 +11719,11 @@ to return only queryset filterable parameters.</p>
11269
11719
  </td>
11270
11720
  </tr>
11271
11721
  <tr class="doc-section-item">
11272
- <td><code>filterset</code></td>
11273
11722
  <td>
11274
- <code><autoref identifier="FilterSet" optional>FilterSet</autoref></code>
11723
+ <code>filterset</code>
11724
+ </td>
11725
+ <td>
11726
+ <code>FilterSet</code>
11275
11727
  </td>
11276
11728
  <td>
11277
11729
  <div class="doc-md-description">
@@ -11297,7 +11749,7 @@ to return only queryset filterable parameters.</p>
11297
11749
  <tbody>
11298
11750
  <tr class="doc-section-item">
11299
11751
  <td>
11300
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11752
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
11301
11753
  </td>
11302
11754
  <td>
11303
11755
  <div class="doc-md-description">
@@ -11323,7 +11775,7 @@ to return only queryset filterable parameters.</p>
11323
11775
 
11324
11776
  <div class="doc doc-contents ">
11325
11777
 
11326
- <p>Return the <code>FilterSet</code> class associated with a given <code>model</code>.</p>
11778
+ <p>Return the <code>FilterSet</code> class associated with a given <code>model</code>.</p>
11327
11779
  <p>The <code>FilterSet</code> class is expected to be in the <code>filters</code> module within the application
11328
11780
  associated with the model and its name is expected to be <code>{ModelName}FilterSet</code>.</p>
11329
11781
  <p>If a matching <code>FilterSet</code> is not found, this will return <code>None</code>.</p>
@@ -11341,9 +11793,11 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11341
11793
  </thead>
11342
11794
  <tbody>
11343
11795
  <tr class="doc-section-item">
11344
- <td><code>model</code></td>
11345
11796
  <td>
11346
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
11797
+ <code>model</code>
11798
+ </td>
11799
+ <td>
11800
+ <code>BaseModel</code>
11347
11801
  </td>
11348
11802
  <td>
11349
11803
  <div class="doc-md-description">
@@ -11369,7 +11823,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11369
11823
  <tbody>
11370
11824
  <tr class="doc-section-item">
11371
11825
  <td>
11372
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="FilterSet" optional>FilterSet</autoref>, None]</code>
11826
+ <code>Union[FilterSet, None]</code>
11373
11827
  </td>
11374
11828
  <td>
11375
11829
  <div class="doc-md-description">
@@ -11395,7 +11849,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11395
11849
 
11396
11850
  <div class="doc doc-contents ">
11397
11851
 
11398
- <p>Return the relevant form field instance for a filterset parameter e.g DynamicModelMultipleChoiceField, forms.IntegerField e.t.c</p>
11852
+ <p>Return the relevant form field instance for a filterset parameter e.g DynamicModelMultipleChoiceField, forms.IntegerField e.t.c</p>
11399
11853
 
11400
11854
  </div>
11401
11855
 
@@ -11412,7 +11866,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11412
11866
 
11413
11867
  <div class="doc doc-contents ">
11414
11868
 
11415
- <p>Return the <code>Form</code> class associated with a given <code>model</code>.</p>
11869
+ <p>Return the <code>Form</code> class associated with a given <code>model</code>.</p>
11416
11870
  <p>The <code>Form</code> class is expected to be in the <code>forms</code> module within the application
11417
11871
  associated with the model and its name is expected to be <code>{ModelName}{form_prefix}Form</code>.</p>
11418
11872
  <p>If a matching <code>Form</code> is not found, this will return <code>None</code>.</p>
@@ -11430,9 +11884,11 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11430
11884
  </thead>
11431
11885
  <tbody>
11432
11886
  <tr class="doc-section-item">
11433
- <td><code>form_prefix</code></td>
11434
11887
  <td>
11435
- <code><autoref identifier="str" optional>str</autoref></code>
11888
+ <code>form_prefix</code>
11889
+ </td>
11890
+ <td>
11891
+ <code>str</code>
11436
11892
  </td>
11437
11893
  <td>
11438
11894
  <div class="doc-md-description">
@@ -11459,7 +11915,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11459
11915
  <tbody>
11460
11916
  <tr class="doc-section-item">
11461
11917
  <td>
11462
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="Form" optional>Form</autoref>, None]</code>
11918
+ <code>Union[Form, None]</code>
11463
11919
  </td>
11464
11920
  <td>
11465
11921
  <div class="doc-md-description">
@@ -11485,7 +11941,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11485
11941
 
11486
11942
  <div class="doc doc-contents ">
11487
11943
 
11488
- <p>Get latest known Nautobot release from cache, or if not available, queue up a background task to populate the cache.</p>
11944
+ <p>Get latest known Nautobot release from cache, or if not available, queue up a background task to populate the cache.</p>
11489
11945
 
11490
11946
 
11491
11947
  <p><span class="doc-section-title">Returns:</span></p>
@@ -11499,7 +11955,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11499
11955
  <tbody>
11500
11956
  <tr class="doc-section-item">
11501
11957
  <td>
11502
- <code>(<autoref identifier="Version" optional>Version</autoref>, <autoref identifier="str" optional>str</autoref>)</code>
11958
+ <code>(Version, str)</code>
11503
11959
  </td>
11504
11960
  <td>
11505
11961
  <div class="doc-md-description">
@@ -11509,7 +11965,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11509
11965
  </tr>
11510
11966
  <tr class="doc-section-item">
11511
11967
  <td>
11512
- <code>(<autoref identifier="unknown" optional>unknown</autoref>, None)</code>
11968
+ <code>(unknown, None)</code>
11513
11969
  </td>
11514
11970
  <td>
11515
11971
  <div class="doc-md-description">
@@ -11535,7 +11991,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11535
11991
 
11536
11992
  <div class="doc doc-contents ">
11537
11993
 
11538
- <p>Given a full model name in dotted format (example: <code>dcim.model</code>), a model class is returned if valid.</p>
11994
+ <p>Given a full model name in dotted format (example: <code>dcim.model</code>), a model class is returned if valid.</p>
11539
11995
  <p>:param model_name: Full dotted name for a model as a string (ex: <code>dcim.model</code>)
11540
11996
  :type model_name: str</p>
11541
11997
  <p>:raises TypeError: If given model name is not found.</p>
@@ -11548,90 +12004,6 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11548
12004
  <div class="doc doc-object doc-function">
11549
12005
 
11550
12006
 
11551
- <h2 id="nautobot.apps.utils.get_only_new_ui_ready_routes" class="doc doc-heading">
11552
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_only_new_ui_ready_routes</span><span class="p">(</span><span class="n">patterns</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span></code>
11553
-
11554
- <a href="#nautobot.apps.utils.get_only_new_ui_ready_routes" class="headerlink" title="Permanent link">&para;</a></h2>
11555
-
11556
-
11557
- <div class="doc doc-contents ">
11558
-
11559
- <p>Recursively traverses Django URL patterns to find routes associated with view classes
11560
- that have the <code>use_new_ui</code> attribute set to <code>True</code>.</p>
11561
-
11562
-
11563
- <p><span class="doc-section-title">Parameters:</span></p>
11564
- <table>
11565
- <thead>
11566
- <tr>
11567
- <th>Name</th>
11568
- <th>Type</th>
11569
- <th>Description</th>
11570
- <th>Default</th>
11571
- </tr>
11572
- </thead>
11573
- <tbody>
11574
- <tr class="doc-section-item">
11575
- <td><code>patterns</code></td>
11576
- <td>
11577
- <code><autoref identifier="list" optional>list</autoref></code>
11578
- </td>
11579
- <td>
11580
- <div class="doc-md-description">
11581
- <p>List of URL patterns to traverse.</p>
11582
- </div>
11583
- </td>
11584
- <td>
11585
- <em>required</em>
11586
- </td>
11587
- </tr>
11588
- <tr class="doc-section-item">
11589
- <td><code>prefix</code></td>
11590
- <td>
11591
- <code><autoref identifier="str" optional>str</autoref></code>
11592
- </td>
11593
- <td>
11594
- <div class="doc-md-description">
11595
- <p>URL pattern prefix to include when constructing route patterns.</p>
11596
- </div>
11597
- </td>
11598
- <td>
11599
- <code>&#39;&#39;</code>
11600
- </td>
11601
- </tr>
11602
- </tbody>
11603
- </table>
11604
-
11605
-
11606
- <p><span class="doc-section-title">Returns:</span></p>
11607
- <table>
11608
- <thead>
11609
- <tr>
11610
- <th>Type</th>
11611
- <th>Description</th>
11612
- </tr>
11613
- </thead>
11614
- <tbody>
11615
- <tr class="doc-section-item">
11616
- <td>
11617
- <code><autoref identifier="list" optional>list</autoref></code>
11618
- </td>
11619
- <td>
11620
- <div class="doc-md-description">
11621
- <p>A list of route patterns associated with view classes that use the new UI.</p>
11622
- </div>
11623
- </td>
11624
- </tr>
11625
- </tbody>
11626
- </table>
11627
-
11628
- </div>
11629
-
11630
- </div>
11631
-
11632
- <div class="doc doc-object doc-function">
11633
-
11634
-
11635
12007
  <h2 id="nautobot.apps.utils.get_permission_for_model" class="doc doc-heading">
11636
12008
  <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_permission_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span></code>
11637
12009
 
@@ -11640,7 +12012,7 @@ that have the <code>use_new_ui</code> attribute set to <code>True</code>.</p>
11640
12012
 
11641
12013
  <div class="doc doc-contents ">
11642
12014
 
11643
- <p>Resolve the named permission for a given model (or instance) and action (e.g. view or add).</p>
12015
+ <p>Resolve the named permission for a given model (or instance) and action (e.g. view or add).</p>
11644
12016
  <p>:param model: A model or instance
11645
12017
  :param action: View, add, change, or delete (string)</p>
11646
12018
 
@@ -11659,7 +12031,7 @@ that have the <code>use_new_ui</code> attribute set to <code>True</code>.</p>
11659
12031
 
11660
12032
  <div class="doc doc-contents ">
11661
12033
 
11662
- <p>Return the appropriate class associated with a given model matching the <code>module_name</code> and
12034
+ <p>Return the appropriate class associated with a given model matching the <code>module_name</code> and
11663
12035
  <code>object_suffix</code>.</p>
11664
12036
  <p>The given <code>model</code> can either be a model class, a model instance, or a dotted representation (ex: <code>dcim.device</code>).</p>
11665
12037
  <p>The object class is expected to be in the module within the application
@@ -11679,9 +12051,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11679
12051
  </thead>
11680
12052
  <tbody>
11681
12053
  <tr class="doc-section-item">
11682
- <td><code>model</code></td>
11683
12054
  <td>
11684
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="BaseModel" optional>BaseModel</autoref>, <autoref identifier="str" optional>str</autoref>]</code>
12055
+ <code>model</code>
12056
+ </td>
12057
+ <td>
12058
+ <code>Union[BaseModel, str]</code>
11685
12059
  </td>
11686
12060
  <td>
11687
12061
  <div class="doc-md-description">
@@ -11693,9 +12067,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11693
12067
  </td>
11694
12068
  </tr>
11695
12069
  <tr class="doc-section-item">
11696
- <td><code>module_name</code></td>
11697
12070
  <td>
11698
- <code><autoref identifier="str" optional>str</autoref></code>
12071
+ <code>module_name</code>
12072
+ </td>
12073
+ <td>
12074
+ <code>str</code>
11699
12075
  </td>
11700
12076
  <td>
11701
12077
  <div class="doc-md-description">
@@ -11707,9 +12083,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11707
12083
  </td>
11708
12084
  </tr>
11709
12085
  <tr class="doc-section-item">
11710
- <td><code>object_suffix</code></td>
11711
12086
  <td>
11712
- <code><autoref identifier="str" optional>str</autoref></code>
12087
+ <code>object_suffix</code>
12088
+ </td>
12089
+ <td>
12090
+ <code>str</code>
11713
12091
  </td>
11714
12092
  <td>
11715
12093
  <div class="doc-md-description">
@@ -11735,7 +12113,7 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11735
12113
  <tbody>
11736
12114
  <tr class="doc-section-item">
11737
12115
  <td>
11738
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="BaseModel" optional>BaseModel</autoref>, <autoref identifier="str" optional>str</autoref>]</code>
12116
+ <code>Union[BaseModel, str]</code>
11739
12117
  </td>
11740
12118
  <td>
11741
12119
  <div class="doc-md-description">
@@ -11761,7 +12139,7 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11761
12139
 
11762
12140
  <div class="doc doc-contents ">
11763
12141
 
11764
- <p>Find the field on <code>from_model</code> that is a relation to <code>to_model</code>.</p>
12142
+ <p>Find the field on <code>from_model</code> that is a relation to <code>to_model</code>.</p>
11765
12143
  <p>If no such field is found, returns None.
11766
12144
  If more than one such field is found, raises an AttributeError.</p>
11767
12145
 
@@ -11778,9 +12156,11 @@ If more than one such field is found, raises an AttributeError.</p>
11778
12156
  </thead>
11779
12157
  <tbody>
11780
12158
  <tr class="doc-section-item">
11781
- <td><code>from_model</code></td>
11782
12159
  <td>
11783
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12160
+ <code>from_model</code>
12161
+ </td>
12162
+ <td>
12163
+ <code>BaseModel</code>
11784
12164
  </td>
11785
12165
  <td>
11786
12166
  <div class="doc-md-description">
@@ -11792,9 +12172,11 @@ If more than one such field is found, raises an AttributeError.</p>
11792
12172
  </td>
11793
12173
  </tr>
11794
12174
  <tr class="doc-section-item">
11795
- <td><code>to_model</code></td>
11796
12175
  <td>
11797
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12176
+ <code>to_model</code>
12177
+ </td>
12178
+ <td>
12179
+ <code>BaseModel</code>
11798
12180
  </td>
11799
12181
  <td>
11800
12182
  <div class="doc-md-description">
@@ -11837,7 +12219,7 @@ If more than one such field is found, raises an AttributeError.</p>
11837
12219
 
11838
12220
  <div class="doc doc-contents ">
11839
12221
 
11840
- <p>Return the URL route name for the given model and action. Does not perform any validation.
12222
+ <p>Return the URL route name for the given model and action. Does not perform any validation.
11841
12223
  Supports both core and App routes.</p>
11842
12224
 
11843
12225
 
@@ -11853,9 +12235,11 @@ Supports both core and App routes.</p>
11853
12235
  </thead>
11854
12236
  <tbody>
11855
12237
  <tr class="doc-section-item">
11856
- <td><code>model</code></td>
11857
12238
  <td>
11858
- <code>(<autoref identifier="nautobot.core.models.Model" optional hover>Model</autoref>, <autoref identifier="str" optional>str</autoref>)</code>
12239
+ <code>model</code>
12240
+ </td>
12241
+ <td>
12242
+ <code>(<span title="nautobot.core.models.Model">Model</span>, str)</code>
11859
12243
  </td>
11860
12244
  <td>
11861
12245
  <div class="doc-md-description">
@@ -11867,9 +12251,11 @@ Supports both core and App routes.</p>
11867
12251
  </td>
11868
12252
  </tr>
11869
12253
  <tr class="doc-section-item">
11870
- <td><code>action</code></td>
11871
12254
  <td>
11872
- <code><autoref identifier="str" optional>str</autoref></code>
12255
+ <code>action</code>
12256
+ </td>
12257
+ <td>
12258
+ <code>str</code>
11873
12259
  </td>
11874
12260
  <td>
11875
12261
  <div class="doc-md-description">
@@ -11881,9 +12267,11 @@ Supports both core and App routes.</p>
11881
12267
  </td>
11882
12268
  </tr>
11883
12269
  <tr class="doc-section-item">
11884
- <td><code>api</code></td>
11885
12270
  <td>
11886
- <code><autoref identifier="bool" optional>bool</autoref></code>
12271
+ <code>api</code>
12272
+ </td>
12273
+ <td>
12274
+ <code>bool</code>
11887
12275
  </td>
11888
12276
  <td>
11889
12277
  <div class="doc-md-description">
@@ -11909,7 +12297,7 @@ Supports both core and App routes.</p>
11909
12297
  <tbody>
11910
12298
  <tr class="doc-section-item">
11911
12299
  <td>
11912
- <code><autoref identifier="str" optional>str</autoref></code>
12300
+ <code>str</code>
11913
12301
  </td>
11914
12302
  <td>
11915
12303
  <div class="doc-md-description">
@@ -11944,14 +12332,16 @@ Supports both core and App routes.</p>
11944
12332
 
11945
12333
 
11946
12334
  <h2 id="nautobot.apps.utils.get_settings_or_config" class="doc doc-heading">
11947
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_settings_or_config</span><span class="p">(</span><span class="n">variable_name</span><span class="p">)</span></code>
12335
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_settings_or_config</span><span class="p">(</span><span class="n">variable_name</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
11948
12336
 
11949
12337
  <a href="#nautobot.apps.utils.get_settings_or_config" class="headerlink" title="Permanent link">&para;</a></h2>
11950
12338
 
11951
12339
 
11952
12340
  <div class="doc doc-contents ">
11953
12341
 
11954
- <p>Get a value from Django settings (if specified there) or Constance configuration (otherwise).</p>
12342
+ <p>Get a value from Django settings (if specified there) or Constance configuration (otherwise).</p>
12343
+ <p>The fallback value is returned <em>only</em> if the requested variable cannot be found at all - this is an error case,
12344
+ and will generate warning logs.</p>
11955
12345
 
11956
12346
  </div>
11957
12347
 
@@ -11968,7 +12358,7 @@ Supports both core and App routes.</p>
11968
12358
 
11969
12359
  <div class="doc doc-contents ">
11970
12360
 
11971
- <p>Return the <code>Table</code> class associated with a given <code>model</code>.</p>
12361
+ <p>Return the <code>Table</code> class associated with a given <code>model</code>.</p>
11972
12362
  <p>The <code>Table</code> class is expected to be in the <code>tables</code> module within the application
11973
12363
  associated with the model and its name is expected to be <code>{ModelName}Table</code>.</p>
11974
12364
  <p>If a matching <code>Table</code> is not found, this will return <code>None</code>.</p>
@@ -11986,9 +12376,11 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
11986
12376
  </thead>
11987
12377
  <tbody>
11988
12378
  <tr class="doc-section-item">
11989
- <td><code>model</code></td>
11990
12379
  <td>
11991
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12380
+ <code>model</code>
12381
+ </td>
12382
+ <td>
12383
+ <code>BaseModel</code>
11992
12384
  </td>
11993
12385
  <td>
11994
12386
  <div class="doc-md-description">
@@ -12000,9 +12392,11 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12000
12392
  </td>
12001
12393
  </tr>
12002
12394
  <tr class="doc-section-item">
12003
- <td><code>suffix</code></td>
12004
12395
  <td>
12005
- <code><autoref identifier="str" optional>str</autoref></code>
12396
+ <code>suffix</code>
12397
+ </td>
12398
+ <td>
12399
+ <code>str</code>
12006
12400
  </td>
12007
12401
  <td>
12008
12402
  <div class="doc-md-description">
@@ -12028,7 +12422,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12028
12422
  <tbody>
12029
12423
  <tr class="doc-section-item">
12030
12424
  <td>
12031
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="Table" optional>Table</autoref>, None]</code>
12425
+ <code>Union[Table, None]</code>
12032
12426
  </td>
12033
12427
  <td>
12034
12428
  <div class="doc-md-description">
@@ -12054,7 +12448,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12054
12448
 
12055
12449
  <div class="doc doc-contents ">
12056
12450
 
12057
- <p>Given a URL pattern, construct a URL string that would match that pattern.</p>
12451
+ <p>Given a URL pattern, construct a URL string that would match that pattern.</p>
12058
12452
 
12059
12453
 
12060
12454
  <p><span class="doc-section-title">Examples:</span></p>
@@ -12072,14 +12466,14 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12072
12466
 
12073
12467
 
12074
12468
  <h2 id="nautobot.apps.utils.get_url_patterns" class="doc doc-heading">
12075
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_url_patterns</span><span class="p">(</span><span class="n">urlconf</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">patterns_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">base_path</span><span class="o">=</span><span class="s1">&#39;/&#39;</span><span class="p">)</span></code>
12469
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_url_patterns</span><span class="p">(</span><span class="n">urlconf</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">patterns_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">base_path</span><span class="o">=</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="n">ignore_redirects</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
12076
12470
 
12077
12471
  <a href="#nautobot.apps.utils.get_url_patterns" class="headerlink" title="Permanent link">&para;</a></h2>
12078
12472
 
12079
12473
 
12080
12474
  <div class="doc doc-contents ">
12081
12475
 
12082
- <p>Recursively yield a list of registered URL patterns.</p>
12476
+ <p>Recursively yield a list of registered URL patterns.</p>
12083
12477
 
12084
12478
 
12085
12479
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12094,9 +12488,11 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12094
12488
  </thead>
12095
12489
  <tbody>
12096
12490
  <tr class="doc-section-item">
12097
- <td><code>urlconf</code></td>
12098
12491
  <td>
12099
- <code><autoref identifier="URLConf" optional>URLConf</autoref></code>
12492
+ <code>urlconf</code>
12493
+ </td>
12494
+ <td>
12495
+ <code>URLConf</code>
12100
12496
  </td>
12101
12497
  <td>
12102
12498
  <div class="doc-md-description">
@@ -12109,9 +12505,11 @@ Default if unspecified is the value of <code>settings.ROOT_URLCONF</code>, i.e.
12109
12505
  </td>
12110
12506
  </tr>
12111
12507
  <tr class="doc-section-item">
12112
- <td><code>patterns_list</code></td>
12113
12508
  <td>
12114
- <code><autoref identifier="list" optional>list</autoref></code>
12509
+ <code>patterns_list</code>
12510
+ </td>
12511
+ <td>
12512
+ <code>list</code>
12115
12513
  </td>
12116
12514
  <td>
12117
12515
  <div class="doc-md-description">
@@ -12124,9 +12522,11 @@ Default if unspecified is the <code>url_patterns</code> attribute of the given <
12124
12522
  </td>
12125
12523
  </tr>
12126
12524
  <tr class="doc-section-item">
12127
- <td><code>base_path</code></td>
12128
12525
  <td>
12129
- <code><autoref identifier="str" optional>str</autoref></code>
12526
+ <code>base_path</code>
12527
+ </td>
12528
+ <td>
12529
+ <code>str</code>
12130
12530
  </td>
12131
12531
  <td>
12132
12532
  <div class="doc-md-description">
@@ -12138,6 +12538,22 @@ Default if unspecified is the string <code>"/"</code>.</p>
12138
12538
  <code>&#39;/&#39;</code>
12139
12539
  </td>
12140
12540
  </tr>
12541
+ <tr class="doc-section-item">
12542
+ <td>
12543
+ <code>ignore_redirects</code>
12544
+ </td>
12545
+ <td>
12546
+ <code>bool</code>
12547
+ </td>
12548
+ <td>
12549
+ <div class="doc-md-description">
12550
+ <p>If True, skip URL patterns that correspond to RedirectViews.</p>
12551
+ </div>
12552
+ </td>
12553
+ <td>
12554
+ <code>False</code>
12555
+ </td>
12556
+ </tr>
12141
12557
  </tbody>
12142
12558
  </table>
12143
12559
 
@@ -12153,7 +12569,7 @@ Default if unspecified is the string <code>"/"</code>.</p>
12153
12569
  <tbody>
12154
12570
  <tr class="doc-section-item">
12155
12571
  <td>
12156
- <code><autoref identifier="str" optional>str</autoref></code>
12572
+ <code>str</code>
12157
12573
  </td>
12158
12574
  <td>
12159
12575
  <div class="doc-md-description">
@@ -12228,7 +12644,7 @@ Default if unspecified is the string <code>"/"</code>.</p>
12228
12644
 
12229
12645
  <div class="doc doc-contents ">
12230
12646
 
12231
- <p>Return the <code>UIViewSet</code> or <code>&lt;view_type&gt;View</code> class associated with a given <code>model</code>.</p>
12647
+ <p>Return the <code>UIViewSet</code> or <code>&lt;view_type&gt;View</code> class associated with a given <code>model</code>.</p>
12232
12648
  <p>The view class is expected to be in the <code>views</code> module within the app associated with the model,
12233
12649
  and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code>{ModelName}{view_type}View</code>.</p>
12234
12650
  <p>If neither view class is found, this will return <code>None</code>.</p>
@@ -12248,7 +12664,8 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12248
12664
 
12249
12665
  <div class="doc doc-contents ">
12250
12666
 
12251
- <p>Return a count of the active Celery workers in a specified queue. Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12667
+ <p>Return a count of the active Celery workers in a specified queue (Could be a JobQueue instance, instance pk or instance name).
12668
+ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12252
12669
 
12253
12670
  </div>
12254
12671
 
@@ -12265,7 +12682,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12265
12682
 
12266
12683
  <div class="doc doc-contents ">
12267
12684
 
12268
- <p>Map a hex string like "00ff00" to individual r, g, b integer values.</p>
12685
+ <p>Map a hex string like "00ff00" to individual r, g, b integer values.</p>
12269
12686
 
12270
12687
  </div>
12271
12688
 
@@ -12282,7 +12699,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12282
12699
 
12283
12700
  <div class="doc doc-contents ">
12284
12701
 
12285
- <p>Return a path for uploading image attachments.</p>
12702
+ <p>Return a path for uploading image attachments.</p>
12286
12703
 
12287
12704
  </div>
12288
12705
 
@@ -12299,7 +12716,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12299
12716
 
12300
12717
  <div class="doc doc-contents ">
12301
12718
 
12302
- <p>Validate whether a value is a URL.</p>
12719
+ <p>Validate whether a value is a URL.</p>
12303
12720
 
12304
12721
 
12305
12722
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12314,9 +12731,11 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12314
12731
  </thead>
12315
12732
  <tbody>
12316
12733
  <tr class="doc-section-item">
12317
- <td><code>value</code></td>
12318
12734
  <td>
12319
- <code><autoref identifier="str" optional>str</autoref></code>
12735
+ <code>value</code>
12736
+ </td>
12737
+ <td>
12738
+ <code>str</code>
12320
12739
  </td>
12321
12740
  <td>
12322
12741
  <div class="doc-md-description">
@@ -12342,7 +12761,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12342
12761
  <tbody>
12343
12762
  <tr class="doc-section-item">
12344
12763
  <td>
12345
- <code><autoref identifier="bool" optional>bool</autoref></code>
12764
+ <code>bool</code>
12346
12765
  </td>
12347
12766
  <td>
12348
12767
  <div class="doc-md-description">
@@ -12368,7 +12787,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12368
12787
 
12369
12788
  <div class="doc doc-contents ">
12370
12789
 
12371
- <p>Make a given RGB color lighter (closer to white).</p>
12790
+ <p>Make a given RGB color lighter (closer to white).</p>
12372
12791
 
12373
12792
  </div>
12374
12793
 
@@ -12385,7 +12804,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12385
12804
 
12386
12805
  <div class="doc doc-contents ">
12387
12806
 
12388
- <p>Merge two dicts into a new dict, but raise a ValueError if any key exists with differing values across both dicts.</p>
12807
+ <p>Merge two dicts into a new dict, but raise a ValueError if any key exists with differing values across both dicts.</p>
12389
12808
 
12390
12809
  </div>
12391
12810
 
@@ -12402,7 +12821,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12402
12821
 
12403
12822
  <div class="doc doc-contents ">
12404
12823
 
12405
- <p>When replacing a model, this will update references to the content type on related models such as tags and object changes.</p>
12824
+ <p>When replacing a model, this will update references to the content type on related models such as tags and object changes.</p>
12406
12825
  <p>Since this only updates the content type and not the primary key, this is typically only useful when migrating to a new model
12407
12826
  and preserving the old instance's primary key.</p>
12408
12827
 
@@ -12421,7 +12840,7 @@ and preserving the old instance's primary key.</p>
12421
12840
  <li>RelationshipAssociation.destination_type</li>
12422
12841
  <li>TaggedItem.content_type</li>
12423
12842
  </ul>
12424
- </details> <p>For these one-to-many and many-to-many relationships, the new content type is added
12843
+ </details> <p>For these one-to-many and many-to-many relationships, the new content type is added
12425
12844
  to the related model's content type list, but the old content type is not removed:
12426
12845
  - CustomField.content_types
12427
12846
  - JobButton.content_types
@@ -12446,9 +12865,11 @@ content types if an instance of the new model is using the tag.</p>
12446
12865
  </thead>
12447
12866
  <tbody>
12448
12867
  <tr class="doc-section-item">
12449
- <td><code>apps</code></td>
12450
12868
  <td>
12451
- <code><autoref identifier="obj" optional>obj</autoref></code>
12869
+ <code>apps</code>
12870
+ </td>
12871
+ <td>
12872
+ <code>obj</code>
12452
12873
  </td>
12453
12874
  <td>
12454
12875
  <div class="doc-md-description">
@@ -12460,9 +12881,11 @@ content types if an instance of the new model is using the tag.</p>
12460
12881
  </td>
12461
12882
  </tr>
12462
12883
  <tr class="doc-section-item">
12463
- <td><code>old_ct</code></td>
12464
12884
  <td>
12465
- <code><autoref identifier="obj" optional>obj</autoref></code>
12885
+ <code>old_ct</code>
12886
+ </td>
12887
+ <td>
12888
+ <code>obj</code>
12466
12889
  </td>
12467
12890
  <td>
12468
12891
  <div class="doc-md-description">
@@ -12474,9 +12897,11 @@ content types if an instance of the new model is using the tag.</p>
12474
12897
  </td>
12475
12898
  </tr>
12476
12899
  <tr class="doc-section-item">
12477
- <td><code>new_ct</code></td>
12478
12900
  <td>
12479
- <code><autoref identifier="obj" optional>obj</autoref></code>
12901
+ <code>new_ct</code>
12902
+ </td>
12903
+ <td>
12904
+ <code>obj</code>
12480
12905
  </td>
12481
12906
  <td>
12482
12907
  <div class="doc-md-description">
@@ -12505,7 +12930,7 @@ content types if an instance of the new model is using the tag.</p>
12505
12930
 
12506
12931
  <div class="doc doc-contents ">
12507
12932
 
12508
- <p>Update all <code>model_to_migrate</code> with a value for <code>to_role_field</code> based on <code>from_role_field</code> values.</p>
12933
+ <p>Update all <code>model_to_migrate</code> with a value for <code>to_role_field</code> based on <code>from_role_field</code> values.</p>
12509
12934
 
12510
12935
 
12511
12936
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12520,9 +12945,11 @@ content types if an instance of the new model is using the tag.</p>
12520
12945
  </thead>
12521
12946
  <tbody>
12522
12947
  <tr class="doc-section-item">
12523
- <td><code>model_to_migrate</code></td>
12524
12948
  <td>
12525
- <code><autoref identifier="Model" optional>Model</autoref></code>
12949
+ <code>model_to_migrate</code>
12950
+ </td>
12951
+ <td>
12952
+ <code>Model</code>
12526
12953
  </td>
12527
12954
  <td>
12528
12955
  <div class="doc-md-description">
@@ -12534,9 +12961,11 @@ content types if an instance of the new model is using the tag.</p>
12534
12961
  </td>
12535
12962
  </tr>
12536
12963
  <tr class="doc-section-item">
12537
- <td><code>from_role_field_name</code></td>
12538
12964
  <td>
12539
- <code><autoref identifier="str" optional>str</autoref></code>
12965
+ <code>from_role_field_name</code>
12966
+ </td>
12967
+ <td>
12968
+ <code>str</code>
12540
12969
  </td>
12541
12970
  <td>
12542
12971
  <div class="doc-md-description">
@@ -12548,9 +12977,11 @@ content types if an instance of the new model is using the tag.</p>
12548
12977
  </td>
12549
12978
  </tr>
12550
12979
  <tr class="doc-section-item">
12551
- <td><code>from_role_model</code></td>
12552
12980
  <td>
12553
- <code><autoref identifier="Model" optional>Model</autoref></code>
12981
+ <code>from_role_model</code>
12982
+ </td>
12983
+ <td>
12984
+ <code>Model</code>
12554
12985
  </td>
12555
12986
  <td>
12556
12987
  <div class="doc-md-description">
@@ -12562,9 +12993,11 @@ content types if an instance of the new model is using the tag.</p>
12562
12993
  </td>
12563
12994
  </tr>
12564
12995
  <tr class="doc-section-item">
12565
- <td><code>from_role_choiceset</code></td>
12566
12996
  <td>
12567
- <code><autoref identifier="ChoiceSet" optional>ChoiceSet</autoref></code>
12997
+ <code>from_role_choiceset</code>
12998
+ </td>
12999
+ <td>
13000
+ <code>ChoiceSet</code>
12568
13001
  </td>
12569
13002
  <td>
12570
13003
  <div class="doc-md-description">
@@ -12576,9 +13009,11 @@ content types if an instance of the new model is using the tag.</p>
12576
13009
  </td>
12577
13010
  </tr>
12578
13011
  <tr class="doc-section-item">
12579
- <td><code>to_role_field_name</code></td>
12580
13012
  <td>
12581
- <code><autoref identifier="str" optional>str</autoref></code>
13013
+ <code>to_role_field_name</code>
13014
+ </td>
13015
+ <td>
13016
+ <code>str</code>
12582
13017
  </td>
12583
13018
  <td>
12584
13019
  <div class="doc-md-description">
@@ -12590,9 +13025,11 @@ content types if an instance of the new model is using the tag.</p>
12590
13025
  </td>
12591
13026
  </tr>
12592
13027
  <tr class="doc-section-item">
12593
- <td><code>to_role_model</code></td>
12594
13028
  <td>
12595
- <code><autoref identifier="Model" optional>Model</autoref></code>
13029
+ <code>to_role_model</code>
13030
+ </td>
13031
+ <td>
13032
+ <code>Model</code>
12596
13033
  </td>
12597
13034
  <td>
12598
13035
  <div class="doc-md-description">
@@ -12604,9 +13041,11 @@ content types if an instance of the new model is using the tag.</p>
12604
13041
  </td>
12605
13042
  </tr>
12606
13043
  <tr class="doc-section-item">
12607
- <td><code>to_role_choiceset</code></td>
12608
13044
  <td>
12609
- <code><autoref identifier="ChoiceSet" optional>ChoiceSet</autoref></code>
13045
+ <code>to_role_choiceset</code>
13046
+ </td>
13047
+ <td>
13048
+ <code>ChoiceSet</code>
12610
13049
  </td>
12611
13050
  <td>
12612
13051
  <div class="doc-md-description">
@@ -12618,9 +13057,11 @@ content types if an instance of the new model is using the tag.</p>
12618
13057
  </td>
12619
13058
  </tr>
12620
13059
  <tr class="doc-section-item">
12621
- <td><code>is_m2m_field</code></td>
12622
13060
  <td>
12623
- <code><autoref identifier="bool" optional>bool</autoref></code>
13061
+ <code>is_m2m_field</code>
13062
+ </td>
13063
+ <td>
13064
+ <code>bool</code>
12624
13065
  </td>
12625
13066
  <td>
12626
13067
  <div class="doc-md-description">
@@ -12642,22 +13083,111 @@ content types if an instance of the new model is using the tag.</p>
12642
13083
 
12643
13084
 
12644
13085
  <h2 id="nautobot.apps.utils.normalize_querydict" class="doc doc-heading">
12645
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">normalize_querydict</span><span class="p">(</span><span class="n">querydict</span><span class="p">,</span> <span class="n">form_class</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
13086
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">normalize_querydict</span><span class="p">(</span><span class="n">querydict</span><span class="p">,</span> <span class="n">form_class</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">filterset</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
12646
13087
 
12647
13088
  <a href="#nautobot.apps.utils.normalize_querydict" class="headerlink" title="Permanent link">&para;</a></h2>
12648
13089
 
12649
13090
 
12650
13091
  <div class="doc doc-contents ">
12651
13092
 
12652
- <p>Convert a QueryDict to a normal, mutable dictionary, preserving list values. For example,</p>
12653
- <div class="highlight"><pre><span></span><code>QueryDict(&#39;foo=1&amp;bar=2&amp;bar=3&amp;baz=&#39;)
12654
- </code></pre></div>
12655
- <p>becomes:</p>
12656
- <div class="highlight"><pre><span></span><code>{&#39;foo&#39;: &#39;1&#39;, &#39;bar&#39;: [&#39;2&#39;, &#39;3&#39;], &#39;baz&#39;: &#39;&#39;}
12657
- </code></pre></div>
12658
- <p>This function is necessary because QueryDict does not provide any built-in mechanism which preserves multiple
12659
- values.</p>
12660
- <p>A <code>form_class</code> can be provided as a way to hint which query parameters should be treated as lists.</p>
13093
+ <p>Converts a QueryDict into a standard, mutable dictionary while preserving multiple values as lists.</p>
13094
+
13095
+
13096
+ <details class="example" open>
13097
+ <summary>Example</summary>
13098
+ <p>A QueryDict like:
13099
+ QueryDict('foo=1&amp;bar=2&amp;bar=3&amp;baz=')</p>
13100
+ <p _="''" _1_="'1'," _2_="['2'," _3_="'3']," _bar_:="'bar':" _baz_:="'baz':" _foo_:="'foo':">Converts to:</p>
13101
+ </details> <p>This function ensures that fields with multiple values are handled correctly, as QueryDict
13102
+ does not inherently preserve multiple values as lists.</p>
13103
+
13104
+
13105
+ <p><span class="doc-section-title">Parameters:</span></p>
13106
+ <table>
13107
+ <thead>
13108
+ <tr>
13109
+ <th>Name</th>
13110
+ <th>Type</th>
13111
+ <th>Description</th>
13112
+ <th>Default</th>
13113
+ </tr>
13114
+ </thead>
13115
+ <tbody>
13116
+ <tr class="doc-section-item">
13117
+ <td>
13118
+ <code>querydict</code>
13119
+ </td>
13120
+ <td>
13121
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
13122
+ </td>
13123
+ <td>
13124
+ <div class="doc-md-description">
13125
+ <p>The QueryDict to be normalized.</p>
13126
+ </div>
13127
+ </td>
13128
+ <td>
13129
+ <em>required</em>
13130
+ </td>
13131
+ </tr>
13132
+ <tr class="doc-section-item">
13133
+ <td>
13134
+ <code>form_class</code>
13135
+ </td>
13136
+ <td>
13137
+ <code><span title="django.forms.Form">Form</span></code>
13138
+ </td>
13139
+ <td>
13140
+ <div class="doc-md-description">
13141
+ <p>A form class to identify fields that should be treated as
13142
+ lists (e.g., <code>MultipleChoiceField</code> or <code>ModelMultipleChoiceField</code>).</p>
13143
+ </div>
13144
+ </td>
13145
+ <td>
13146
+ <code>None</code>
13147
+ </td>
13148
+ </tr>
13149
+ <tr class="doc-section-item">
13150
+ <td>
13151
+ <code>filterset</code>
13152
+ </td>
13153
+ <td>
13154
+ <code><span title="django_filters.FilterSet">FilterSet</span></code>
13155
+ </td>
13156
+ <td>
13157
+ <div class="doc-md-description">
13158
+ <p>A FilterSet instance to identify filters that
13159
+ should preserve multiple values as lists (e.g., non-single-choice fields).</p>
13160
+ </div>
13161
+ </td>
13162
+ <td>
13163
+ <code>None</code>
13164
+ </td>
13165
+ </tr>
13166
+ </tbody>
13167
+ </table>
13168
+
13169
+
13170
+ <p><span class="doc-section-title">Raises:</span></p>
13171
+ <table>
13172
+ <thead>
13173
+ <tr>
13174
+ <th>Type</th>
13175
+ <th>Description</th>
13176
+ </tr>
13177
+ </thead>
13178
+ <tbody>
13179
+ <tr class="doc-section-item">
13180
+ <td>
13181
+ <code>AttributeError</code>
13182
+ </td>
13183
+ <td>
13184
+ <div class="doc-md-description">
13185
+ <p>If both <code>form_class</code> and <code>filterset</code> are provided.</p>
13186
+ </div>
13187
+ </td>
13188
+ </tr>
13189
+ </tbody>
13190
+ </table>
12661
13191
 
12662
13192
  </div>
12663
13193
 
@@ -12674,7 +13204,7 @@ values.</p>
12674
13204
 
12675
13205
  <div class="doc doc-contents ">
12676
13206
 
12677
- <p>Determine whether a specified permission is exempt from evaluation.</p>
13207
+ <p>Determine whether a specified permission is exempt from evaluation.</p>
12678
13208
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
12679
13209
 
12680
13210
  </div>
@@ -12692,7 +13222,7 @@ values.</p>
12692
13222
 
12693
13223
  <div class="doc doc-contents ">
12694
13224
 
12695
- <p>Populate the registry model features with new apps.</p>
13225
+ <p>Populate the registry model features with new apps.</p>
12696
13226
  <p>This function updates the registry model features.</p>
12697
13227
  <p>Behavior:
12698
13228
  - Defines a list of dictionaries called lookup_confs. Each dictionary contains:
@@ -12718,17 +13248,20 @@ values.</p>
12718
13248
 
12719
13249
 
12720
13250
  <h2 id="nautobot.apps.utils.refresh_job_model_from_job_class" class="doc doc-heading">
12721
- <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">refresh_job_model_from_job_class</span><span class="p">(</span><span class="n">job_model_class</span><span class="p">,</span> <span class="n">job_class</span><span class="p">)</span></code>
13251
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">refresh_job_model_from_job_class</span><span class="p">(</span><span class="n">job_model_class</span><span class="p">,</span> <span class="n">job_class</span><span class="p">,</span> <span class="n">job_queue_class</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
12722
13252
 
12723
13253
  <a href="#nautobot.apps.utils.refresh_job_model_from_job_class" class="headerlink" title="Permanent link">&para;</a></h2>
12724
13254
 
12725
13255
 
12726
13256
  <div class="doc doc-contents ">
12727
13257
 
12728
- <p>Create or update a job_model record based on the metadata of the provided job_class.</p>
12729
- <p>Note that job_model_class is a parameter (rather than doing a "from nautobot.extras.models import Job") because
13258
+ <p>Create or update a job_model record based on the metadata of the provided job_class.</p>
13259
+ <p>Note that <code>job_model_class</code> and <code>job_queue_class</code> are parameters rather than local imports because
12730
13260
  this function may be called from various initialization processes (such as the "nautobot_database_ready" signal)
12731
13261
  and in that case we need to not import models ourselves.</p>
13262
+ <p>The <code>job_queue_class</code> parameter really should be required, but for some reason we decided to make this function
13263
+ part of the <code>nautobot.apps.utils</code> API surface and so we need it to stay backwards-compatible with Apps that might
13264
+ be calling the two-argument form of this function.</p>
12732
13265
 
12733
13266
  </div>
12734
13267
 
@@ -12745,7 +13278,7 @@ and in that case we need to not import models ourselves.</p>
12745
13278
 
12746
13279
  <div class="doc doc-contents ">
12747
13280
 
12748
- <p>field_name (str): f"cf_{cf.key}"</p>
13281
+ <p>field_name (str): f"cf_{cf.key}"</p>
12749
13282
  <p>Helper method to remove the "cf_" prefix</p>
12750
13283
 
12751
13284
  </div>
@@ -12763,7 +13296,7 @@ and in that case we need to not import models ourselves.</p>
12763
13296
 
12764
13297
  <div class="doc doc-contents ">
12765
13298
 
12766
- <p>Render a Jinja2 template with the provided context. Return the rendered content.</p>
13299
+ <p>Render a Jinja2 template with the provided context. Return the rendered content.</p>
12767
13300
 
12768
13301
  </div>
12769
13302
 
@@ -12780,7 +13313,7 @@ and in that case we need to not import models ourselves.</p>
12780
13313
 
12781
13314
  <div class="doc doc-contents ">
12782
13315
 
12783
- <p>Given a permission name, return the app_label, action, and model_name components. For example, "dcim.view_location"
13316
+ <p>Given a permission name, return the app_label, action, and model_name components. For example, "dcim.view_location"
12784
13317
  returns ("dcim", "view", "location").</p>
12785
13318
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
12786
13319
 
@@ -12799,7 +13332,7 @@ returns ("dcim", "view", "location").</p>
12799
13332
 
12800
13333
  <div class="doc doc-contents ">
12801
13334
 
12802
- <p>Given a permission name, return the relevant ContentType and action. For example, "dcim.view_location" returns
13335
+ <p>Given a permission name, return the relevant ContentType and action. For example, "dcim.view_location" returns
12803
13336
  (Location, "view").</p>
12804
13337
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
12805
13338
 
@@ -12818,7 +13351,7 @@ returns ("dcim", "view", "location").</p>
12818
13351
 
12819
13352
  <div class="doc doc-contents ">
12820
13353
 
12821
- <p>Map r, g, b values to a hex string.</p>
13354
+ <p>Map r, g, b values to a hex string.</p>
12822
13355
 
12823
13356
  </div>
12824
13357
 
@@ -12835,7 +13368,7 @@ returns ("dcim", "view", "location").</p>
12835
13368
 
12836
13369
  <div class="doc doc-contents ">
12837
13370
 
12838
- <p>Make an attempt at stripping potentially-sensitive information from the given string, bytes or iterable thereof.</p>
13371
+ <p>Make an attempt at stripping potentially-sensitive information from the given string, bytes or iterable thereof.</p>
12839
13372
  <p>Obviously this will never be 100% foolproof but we can at least try.</p>
12840
13373
  <p>Uses settings.SANITIZER_PATTERNS as the list of (regexp, repl) tuples to apply.</p>
12841
13374
 
@@ -12854,7 +13387,7 @@ returns ("dcim", "view", "location").</p>
12854
13387
 
12855
13388
  <div class="doc doc-contents ">
12856
13389
 
12857
- <p>Return a new dictionary of the different keys. The values of <code>destination_dict</code> are returned. Only the equality of
13390
+ <p>Return a new dictionary of the different keys. The values of <code>destination_dict</code> are returned. Only the equality of
12858
13391
  the first layer of keys/values is checked. <code>exclude</code> is a list or tuple of keys to be ignored.</p>
12859
13392
 
12860
13393
  </div>
@@ -12872,7 +13405,7 @@ the first layer of keys/values is checked. <code>exclude</code> is a list or tup
12872
13405
 
12873
13406
  <div class="doc doc-contents ">
12874
13407
 
12875
- <p>Swap Git status initials with its equivalent.</p>
13408
+ <p>Swap Git status initials with its equivalent.</p>
12876
13409
 
12877
13410
  </div>
12878
13411
 
@@ -12889,7 +13422,7 @@ the first layer of keys/values is checked. <code>exclude</code> is a list or tup
12889
13422
 
12890
13423
  <div class="doc doc-contents ">
12891
13424
 
12892
- <p>Returns a list of 2-tuples for use in the form field <code>choices</code> argument. Appends
13425
+ <p>Returns a list of 2-tuples for use in the form field <code>choices</code> argument. Appends
12893
13426
  worker count to the description.</p>
12894
13427
 
12895
13428
  </div>
@@ -12907,7 +13440,7 @@ worker count to the description.</p>
12907
13440
 
12908
13441
  <div class="doc doc-contents ">
12909
13442
 
12910
- <p>Convert the given length to meters.</p>
13443
+ <p>Convert the given length to meters.</p>
12911
13444
 
12912
13445
  </div>
12913
13446
 
@@ -12924,7 +13457,7 @@ worker count to the description.</p>
12924
13457
 
12925
13458
  <div class="doc doc-contents ">
12926
13459
 
12927
- <p>Helper function that wraps plugin model validator registered clean methods for all applicable models</p>
13460
+ <p>Helper function that wraps plugin model validator registered clean methods for all applicable models</p>
12928
13461
 
12929
13462
  </div>
12930
13463
 
@@ -13080,7 +13613,7 @@ worker count to the description.</p>
13080
13613
  </div>
13081
13614
 
13082
13615
 
13083
- <script id="__config" type="application/json">{"base": "../../..", "features": ["content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
13616
+ <script id="__config" type="application/json">{"base": "../../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
13084
13617
 
13085
13618
 
13086
13619
  <script src="../../../assets/javascripts/bundle.88dd0f4e.min.js"></script>