nautobot 2.4.0b1__py3-none-any.whl → 2.4.2__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 (668) hide show
  1. nautobot/apps/__init__.py +1 -1
  2. nautobot/apps/api.py +8 -8
  3. nautobot/apps/change_logging.py +2 -2
  4. nautobot/apps/choices.py +4 -4
  5. nautobot/apps/events.py +3 -3
  6. nautobot/apps/factory.py +2 -2
  7. nautobot/apps/filters.py +1 -1
  8. nautobot/apps/forms.py +20 -20
  9. nautobot/apps/graphql.py +2 -2
  10. nautobot/apps/jobs.py +8 -8
  11. nautobot/apps/models.py +19 -19
  12. nautobot/apps/tables.py +1 -1
  13. nautobot/apps/testing.py +10 -10
  14. nautobot/apps/ui.py +2 -2
  15. nautobot/apps/utils.py +7 -7
  16. nautobot/apps/views.py +7 -7
  17. nautobot/circuits/api/serializers.py +1 -0
  18. nautobot/circuits/api/views.py +4 -8
  19. nautobot/circuits/tables.py +2 -1
  20. nautobot/circuits/templates/circuits/circuit_create.html +1 -7
  21. nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +43 -0
  22. nautobot/circuits/tests/integration/test_relationships.py +1 -1
  23. nautobot/circuits/views.py +3 -3
  24. nautobot/cloud/api/views.py +6 -10
  25. nautobot/cloud/models.py +1 -1
  26. nautobot/cloud/views.py +0 -16
  27. nautobot/core/api/constants.py +11 -0
  28. nautobot/core/api/fields.py +5 -5
  29. nautobot/core/api/filter_backends.py +3 -9
  30. nautobot/core/api/schema.py +13 -2
  31. nautobot/core/api/serializers.py +40 -34
  32. nautobot/core/api/views.py +56 -4
  33. nautobot/core/apps/__init__.py +0 -5
  34. nautobot/core/celery/log.py +4 -4
  35. nautobot/core/celery/schedulers.py +2 -2
  36. nautobot/core/choices.py +2 -2
  37. nautobot/core/events/__init__.py +3 -3
  38. nautobot/core/filters.py +67 -35
  39. nautobot/core/forms/__init__.py +19 -19
  40. nautobot/core/forms/fields.py +14 -11
  41. nautobot/core/forms/forms.py +33 -2
  42. nautobot/core/graphql/types.py +1 -1
  43. nautobot/core/jobs/__init__.py +28 -7
  44. nautobot/core/jobs/bulk_actions.py +285 -0
  45. nautobot/core/jobs/cleanup.py +48 -12
  46. nautobot/core/jobs/groups.py +1 -1
  47. nautobot/core/management/commands/validate_models.py +1 -1
  48. nautobot/core/models/__init__.py +3 -1
  49. nautobot/core/models/query_functions.py +2 -2
  50. nautobot/core/models/tree_queries.py +6 -3
  51. nautobot/core/settings.py +29 -2
  52. nautobot/core/settings.yaml +21 -0
  53. nautobot/core/tables.py +79 -61
  54. nautobot/core/templates/about.html +67 -0
  55. nautobot/core/templates/generic/object_bulk_destroy.html +1 -1
  56. nautobot/core/templates/inc/media.html +3 -0
  57. nautobot/core/templates/inc/nav_menu.html +1 -0
  58. nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
  59. nautobot/core/templates/inc/tenant_table_row.html +11 -0
  60. nautobot/core/templates/nautobot_config.py.j2 +13 -0
  61. nautobot/core/templates/search.html +7 -0
  62. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  63. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  64. nautobot/core/templates/utilities/theme_preview.html +7 -0
  65. nautobot/core/templatetags/helpers.py +11 -2
  66. nautobot/core/testing/__init__.py +8 -8
  67. nautobot/core/testing/api.py +170 -15
  68. nautobot/core/testing/filters.py +45 -10
  69. nautobot/core/testing/forms.py +2 -0
  70. nautobot/core/testing/integration.py +514 -5
  71. nautobot/core/testing/mixins.py +7 -2
  72. nautobot/core/testing/views.py +44 -29
  73. nautobot/core/tests/integration/test_app_home.py +0 -1
  74. nautobot/core/tests/integration/test_app_navbar.py +0 -1
  75. nautobot/core/tests/integration/test_filters.py +0 -2
  76. nautobot/core/tests/integration/test_home.py +0 -1
  77. nautobot/core/tests/integration/test_navbar.py +0 -1
  78. nautobot/core/tests/integration/test_view_authentication.py +1 -0
  79. nautobot/core/tests/runner.py +1 -1
  80. nautobot/core/tests/test_api.py +98 -1
  81. nautobot/core/tests/test_csv.py +25 -3
  82. nautobot/core/tests/test_filters.py +209 -246
  83. nautobot/core/tests/test_forms.py +1 -0
  84. nautobot/core/tests/test_jobs.py +492 -1
  85. nautobot/core/tests/test_models.py +9 -0
  86. nautobot/core/tests/test_settings_schema.py +7 -0
  87. nautobot/core/tests/test_tables.py +100 -0
  88. nautobot/core/tests/test_utils.py +63 -1
  89. nautobot/core/tests/test_views.py +30 -3
  90. nautobot/core/ui/nav.py +1 -0
  91. nautobot/core/ui/object_detail.py +15 -1
  92. nautobot/core/urls.py +11 -0
  93. nautobot/core/utils/git.py +7 -2
  94. nautobot/core/utils/lookup.py +11 -8
  95. nautobot/core/utils/querysets.py +64 -0
  96. nautobot/core/utils/requests.py +24 -9
  97. nautobot/core/views/__init__.py +42 -0
  98. nautobot/core/views/generic.py +131 -197
  99. nautobot/core/views/mixins.py +136 -41
  100. nautobot/core/views/renderers.py +6 -6
  101. nautobot/core/views/utils.py +2 -2
  102. nautobot/dcim/api/serializers.py +56 -64
  103. nautobot/dcim/api/views.py +47 -113
  104. nautobot/dcim/constants.py +6 -13
  105. nautobot/dcim/factory.py +6 -1
  106. nautobot/dcim/filters/__init__.py +31 -2
  107. nautobot/dcim/forms.py +48 -17
  108. nautobot/dcim/graphql/types.py +2 -2
  109. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
  110. nautobot/dcim/models/__init__.py +1 -1
  111. nautobot/dcim/models/device_component_templates.py +2 -2
  112. nautobot/dcim/models/device_components.py +22 -20
  113. nautobot/dcim/models/devices.py +10 -1
  114. nautobot/dcim/models/locations.py +3 -3
  115. nautobot/dcim/models/power.py +6 -5
  116. nautobot/dcim/models/racks.py +4 -4
  117. nautobot/dcim/tables/__init__.py +3 -3
  118. nautobot/dcim/tables/devices.py +9 -6
  119. nautobot/dcim/tables/devicetypes.py +2 -2
  120. nautobot/dcim/tables/racks.py +1 -1
  121. nautobot/dcim/templates/dcim/cable.html +1 -1
  122. nautobot/dcim/templates/dcim/controller_create.html +1 -7
  123. nautobot/dcim/templates/dcim/controller_retrieve.html +1 -9
  124. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +2 -0
  125. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +5 -0
  126. nautobot/dcim/templates/dcim/device/base.html +1 -1
  127. nautobot/dcim/templates/dcim/device.html +3 -11
  128. nautobot/dcim/templates/dcim/device_component.html +1 -1
  129. nautobot/dcim/templates/dcim/device_edit.html +36 -37
  130. nautobot/dcim/templates/dcim/devicetype.html +1 -1
  131. nautobot/dcim/templates/dcim/location.html +2 -10
  132. nautobot/dcim/templates/dcim/location_edit.html +1 -7
  133. nautobot/dcim/templates/dcim/locationtype.html +1 -1
  134. nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -1
  135. nautobot/dcim/templates/dcim/manufacturer.html +1 -1
  136. nautobot/dcim/templates/dcim/platform.html +1 -1
  137. nautobot/dcim/templates/dcim/powerfeed.html +1 -1
  138. nautobot/dcim/templates/dcim/powerpanel.html +1 -1
  139. nautobot/dcim/templates/dcim/rack.html +2 -10
  140. nautobot/dcim/templates/dcim/rack_edit.html +1 -7
  141. nautobot/dcim/templates/dcim/rackgroup.html +1 -1
  142. nautobot/dcim/templates/dcim/rackreservation.html +3 -11
  143. nautobot/dcim/templates/dcim/virtualchassis.html +1 -1
  144. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -9
  145. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +1 -7
  146. nautobot/dcim/tests/integration/test_controller.py +62 -0
  147. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
  148. nautobot/dcim/tests/integration/test_device_bulk_operations.py +30 -0
  149. nautobot/dcim/tests/integration/test_location_bulk_operations.py +43 -0
  150. nautobot/dcim/tests/test_api.py +16 -5
  151. nautobot/dcim/tests/test_filters.py +33 -0
  152. nautobot/dcim/tests/test_forms.py +51 -2
  153. nautobot/dcim/tests/test_graphql.py +52 -0
  154. nautobot/dcim/tests/test_jobs.py +118 -0
  155. nautobot/dcim/tests/test_models.py +52 -9
  156. nautobot/dcim/tests/test_views.py +30 -84
  157. nautobot/dcim/views.py +13 -28
  158. nautobot/extras/api/customfields.py +2 -2
  159. nautobot/extras/api/serializers.py +123 -85
  160. nautobot/extras/api/views.py +33 -30
  161. nautobot/extras/constants.py +3 -0
  162. nautobot/extras/datasources/git.py +125 -0
  163. nautobot/extras/filters/__init__.py +8 -6
  164. nautobot/extras/forms/base.py +2 -2
  165. nautobot/extras/forms/forms.py +139 -31
  166. nautobot/extras/forms/mixins.py +14 -6
  167. nautobot/extras/group_sync.py +3 -3
  168. nautobot/extras/health_checks.py +1 -2
  169. nautobot/extras/jobs.py +85 -18
  170. nautobot/extras/managers.py +3 -1
  171. nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
  172. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
  173. nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
  174. nautobot/extras/migrations/0122_add_graphqlquery_owner_content_type.py +34 -0
  175. nautobot/extras/models/__init__.py +1 -1
  176. nautobot/extras/models/contacts.py +1 -1
  177. nautobot/extras/models/customfields.py +41 -23
  178. nautobot/extras/models/datasources.py +85 -0
  179. nautobot/extras/models/groups.py +11 -9
  180. nautobot/extras/models/jobs.py +23 -4
  181. nautobot/extras/models/models.py +17 -2
  182. nautobot/extras/models/relationships.py +17 -5
  183. nautobot/extras/plugins/__init__.py +13 -2
  184. nautobot/extras/plugins/marketplace_manifest.yml +84 -79
  185. nautobot/extras/plugins/tables.py +16 -14
  186. nautobot/extras/plugins/views.py +65 -69
  187. nautobot/extras/registry.py +1 -1
  188. nautobot/extras/secrets/__init__.py +2 -2
  189. nautobot/extras/signals.py +15 -1
  190. nautobot/extras/tables.py +7 -5
  191. nautobot/extras/templates/extras/computedfield.html +1 -1
  192. nautobot/extras/templates/extras/configcontext.html +1 -1
  193. nautobot/extras/templates/extras/configcontextschema.html +1 -1
  194. nautobot/extras/templates/extras/customfield.html +1 -1
  195. nautobot/extras/templates/extras/customlink.html +1 -1
  196. nautobot/extras/templates/extras/dynamicgroup.html +2 -10
  197. nautobot/extras/templates/extras/exporttemplate.html +1 -1
  198. nautobot/extras/templates/extras/gitrepository.html +1 -1
  199. nautobot/extras/templates/extras/graphqlquery.html +1 -1
  200. nautobot/extras/templates/extras/job_detail.html +17 -1
  201. nautobot/extras/templates/extras/job_edit.html +1 -0
  202. nautobot/extras/templates/extras/jobbutton_retrieve.html +1 -1
  203. nautobot/extras/templates/extras/jobhook.html +1 -1
  204. nautobot/extras/templates/extras/jobqueue_retrieve.html +1 -9
  205. nautobot/extras/templates/extras/jobresult.html +1 -1
  206. nautobot/extras/templates/extras/marketplace.html +29 -11
  207. nautobot/extras/templates/extras/objectchange.html +1 -1
  208. nautobot/extras/templates/extras/plugin_detail.html +33 -16
  209. nautobot/extras/templates/extras/plugins_tiles.html +21 -10
  210. nautobot/extras/templates/extras/relationship.html +1 -63
  211. nautobot/extras/templates/extras/role_retrieve.html +1 -1
  212. nautobot/extras/templates/extras/scheduledjob.html +1 -1
  213. nautobot/extras/templates/extras/secret.html +1 -1
  214. nautobot/extras/templates/extras/secretsgroup.html +1 -1
  215. nautobot/extras/templates/extras/status.html +1 -1
  216. nautobot/extras/templates/extras/tag.html +1 -1
  217. nautobot/extras/templates/extras/webhook.html +1 -1
  218. nautobot/extras/templatetags/job_buttons.py +4 -4
  219. nautobot/extras/test_jobs/api_test_job.py +1 -1
  220. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  221. nautobot/extras/test_jobs/dry_run.py +1 -1
  222. nautobot/extras/test_jobs/fail.py +5 -5
  223. nautobot/extras/test_jobs/file_output.py +1 -1
  224. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  225. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  226. nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
  227. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  228. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  229. nautobot/extras/test_jobs/log_redaction.py +1 -1
  230. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  231. nautobot/extras/test_jobs/modify_db.py +1 -1
  232. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  233. nautobot/extras/test_jobs/object_var_required.py +1 -1
  234. nautobot/extras/test_jobs/object_vars.py +1 -1
  235. nautobot/extras/test_jobs/pass.py +3 -3
  236. nautobot/extras/test_jobs/profiling.py +1 -1
  237. nautobot/extras/test_jobs/relative_import.py +3 -3
  238. nautobot/extras/test_jobs/singleton.py +16 -0
  239. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  240. nautobot/extras/test_jobs/task_queues.py +1 -1
  241. nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_interfaces.gql +8 -0
  242. nautobot/extras/tests/git_data/01-valid-files/graphql_queries/device_names.gql +5 -0
  243. nautobot/extras/tests/git_data/02-invalid-files/graphql_queries/bad_device_names.gql +5 -0
  244. nautobot/extras/tests/git_helper.py +9 -1
  245. nautobot/extras/tests/integration/__init__.py +29 -16
  246. nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
  247. nautobot/extras/tests/test_api.py +19 -13
  248. nautobot/extras/tests/test_customfields.py +50 -52
  249. nautobot/extras/tests/test_datasources.py +29 -1
  250. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  251. nautobot/extras/tests/test_filters.py +6 -6
  252. nautobot/extras/tests/test_forms.py +33 -1
  253. nautobot/extras/tests/test_jobs.py +178 -32
  254. nautobot/extras/tests/test_models.py +299 -10
  255. nautobot/extras/tests/test_plugins.py +62 -9
  256. nautobot/extras/tests/test_relationships.py +120 -9
  257. nautobot/extras/tests/test_utils.py +22 -1
  258. nautobot/extras/tests/test_views.py +56 -194
  259. nautobot/extras/utils.py +20 -10
  260. nautobot/extras/views.py +85 -110
  261. nautobot/ipam/api/fields.py +3 -3
  262. nautobot/ipam/api/serializers.py +41 -33
  263. nautobot/ipam/api/views.py +68 -117
  264. nautobot/ipam/factory.py +1 -1
  265. nautobot/ipam/filters.py +3 -2
  266. nautobot/ipam/lookups.py +101 -62
  267. nautobot/ipam/models.py +74 -18
  268. nautobot/ipam/querysets.py +2 -2
  269. nautobot/ipam/tables.py +25 -9
  270. nautobot/ipam/templates/ipam/ipaddress.html +2 -10
  271. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
  272. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
  273. nautobot/ipam/templates/ipam/prefix.html +2 -10
  274. nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
  275. nautobot/ipam/templates/ipam/rir.html +1 -1
  276. nautobot/ipam/templates/ipam/routetarget.html +1 -1
  277. nautobot/ipam/templates/ipam/service.html +1 -1
  278. nautobot/ipam/templates/ipam/vlan.html +2 -10
  279. nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
  280. nautobot/ipam/templates/ipam/vlangroup.html +1 -1
  281. nautobot/ipam/templates/ipam/vrf.html +1 -1
  282. nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
  283. nautobot/ipam/tests/test_api.py +436 -3
  284. nautobot/ipam/tests/test_forms.py +49 -47
  285. nautobot/ipam/tests/test_migrations.py +30 -30
  286. nautobot/ipam/tests/test_models.py +119 -34
  287. nautobot/ipam/tests/test_querysets.py +63 -1
  288. nautobot/ipam/tests/test_utils.py +41 -2
  289. nautobot/ipam/tests/test_views.py +3 -0
  290. nautobot/ipam/utils/__init__.py +54 -17
  291. nautobot/ipam/views.py +61 -87
  292. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  293. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  294. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
  295. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  296. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  297. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  298. nautobot/project-static/docs/404.html +131 -14
  299. nautobot/project-static/docs/apps/index.html +131 -14
  300. nautobot/project-static/docs/apps/nautobot-apps.html +132 -16
  301. nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
  302. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.60a45f97.min.js} +2 -2
  303. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.60a45f97.min.js.map} +2 -2
  304. nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js → search.f8cc74c7.min.js} +1 -1
  305. nautobot/project-static/docs/assets/javascripts/workers/{search.6ce7567c.min.js.map → search.f8cc74c7.min.js.map} +1 -1
  306. nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css → main.a40c8224.min.css} +1 -1
  307. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +147 -20
  308. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +144 -17
  309. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +459 -132
  310. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +175 -28
  311. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +180 -31
  312. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +138 -16
  313. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +137 -15
  314. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +164 -27
  315. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +187 -38
  316. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +193 -31
  317. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +216 -48
  318. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +324 -75
  319. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +666 -175
  320. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +194 -46
  321. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +538 -177
  322. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +578 -221
  323. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +145 -18
  324. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +156 -25
  325. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +492 -65
  326. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +705 -215
  327. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +943 -422
  328. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +144 -17
  329. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +619 -200
  330. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +474 -159
  331. nautobot/project-static/docs/development/apps/api/configuration-view.html +131 -14
  332. nautobot/project-static/docs/development/apps/api/database-backend-config.html +131 -14
  333. nautobot/project-static/docs/development/apps/api/models/django-admin.html +131 -14
  334. nautobot/project-static/docs/development/apps/api/models/global-search.html +131 -14
  335. nautobot/project-static/docs/development/apps/api/models/graphql.html +131 -14
  336. nautobot/project-static/docs/development/apps/api/models/index.html +131 -14
  337. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +131 -14
  338. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +131 -14
  339. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +131 -14
  340. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +131 -14
  341. nautobot/project-static/docs/development/apps/api/platform-features/index.html +131 -14
  342. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +131 -14
  343. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +131 -14
  344. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +131 -14
  345. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +131 -14
  346. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +153 -17
  347. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +131 -14
  348. nautobot/project-static/docs/development/apps/api/prometheus.html +131 -14
  349. nautobot/project-static/docs/development/apps/api/setup.html +131 -14
  350. nautobot/project-static/docs/development/apps/api/testing.html +131 -14
  351. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +131 -14
  352. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +131 -14
  353. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +131 -14
  354. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +131 -14
  355. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +131 -14
  356. nautobot/project-static/docs/development/apps/api/views/base-template.html +131 -14
  357. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +131 -14
  358. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +131 -14
  359. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +131 -14
  360. nautobot/project-static/docs/development/apps/api/views/index.html +131 -14
  361. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +131 -14
  362. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +131 -14
  363. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +131 -14
  364. nautobot/project-static/docs/development/apps/api/views/notes.html +131 -14
  365. nautobot/project-static/docs/development/apps/api/views/rest-api.html +137 -16
  366. nautobot/project-static/docs/development/apps/api/views/urls.html +131 -14
  367. nautobot/project-static/docs/development/apps/index.html +131 -14
  368. nautobot/project-static/docs/development/apps/migration/code-updates.html +131 -14
  369. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +131 -14
  370. nautobot/project-static/docs/development/apps/migration/from-v1.html +131 -14
  371. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +131 -14
  372. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +131 -14
  373. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +131 -14
  374. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +131 -14
  375. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +135 -18
  376. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +131 -14
  377. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +297 -25
  378. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +131 -14
  379. nautobot/project-static/docs/development/apps/porting-from-netbox.html +131 -14
  380. nautobot/project-static/docs/development/core/application-registry.html +131 -14
  381. nautobot/project-static/docs/development/core/best-practices.html +131 -14
  382. nautobot/project-static/docs/development/core/bootstrap-ui.html +131 -14
  383. nautobot/project-static/docs/development/core/caching.html +131 -14
  384. nautobot/project-static/docs/development/core/controllers.html +131 -14
  385. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +158 -84
  386. nautobot/project-static/docs/development/core/generic-views.html +131 -14
  387. nautobot/project-static/docs/development/core/getting-started.html +334 -234
  388. nautobot/project-static/docs/development/core/homepage.html +134 -17
  389. nautobot/project-static/docs/development/core/index.html +131 -14
  390. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9829 -0
  391. nautobot/project-static/docs/development/core/model-checklist.html +141 -22
  392. nautobot/project-static/docs/development/core/model-features.html +131 -14
  393. nautobot/project-static/docs/development/core/natural-keys.html +131 -14
  394. nautobot/project-static/docs/development/core/navigation-menu.html +131 -14
  395. nautobot/project-static/docs/development/core/release-checklist.html +134 -17
  396. nautobot/project-static/docs/development/core/role-internals.html +131 -14
  397. nautobot/project-static/docs/development/core/settings.html +131 -14
  398. nautobot/project-static/docs/development/core/style-guide.html +134 -17
  399. nautobot/project-static/docs/development/core/templates.html +132 -15
  400. nautobot/project-static/docs/development/core/testing.html +131 -14
  401. nautobot/project-static/docs/development/core/ui-component-framework.html +454 -283
  402. nautobot/project-static/docs/development/core/user-preferences.html +131 -14
  403. nautobot/project-static/docs/development/index.html +131 -14
  404. nautobot/project-static/docs/development/jobs/index.html +301 -132
  405. nautobot/project-static/docs/development/jobs/migration/from-v1.html +131 -14
  406. nautobot/project-static/docs/index.html +139 -33
  407. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  408. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  409. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  410. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  411. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  412. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  413. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  414. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  415. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  416. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  417. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  418. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  419. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  420. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  421. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  422. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  423. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  424. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  425. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  426. nautobot/project-static/docs/objects.inv +0 -0
  427. nautobot/project-static/docs/overview/application_stack.html +132 -17
  428. nautobot/project-static/docs/overview/design_philosophy.html +131 -14
  429. nautobot/project-static/docs/release-notes/index.html +137 -22
  430. nautobot/project-static/docs/release-notes/version-1.0.html +319 -203
  431. nautobot/project-static/docs/release-notes/version-1.1.html +316 -200
  432. nautobot/project-static/docs/release-notes/version-1.2.html +391 -275
  433. nautobot/project-static/docs/release-notes/version-1.3.html +417 -301
  434. nautobot/project-static/docs/release-notes/version-1.4.html +502 -387
  435. nautobot/project-static/docs/release-notes/version-1.5.html +690 -576
  436. nautobot/project-static/docs/release-notes/version-1.6.html +989 -457
  437. nautobot/project-static/docs/release-notes/version-2.0.html +613 -499
  438. nautobot/project-static/docs/release-notes/version-2.1.html +448 -334
  439. nautobot/project-static/docs/release-notes/version-2.2.html +441 -327
  440. nautobot/project-static/docs/release-notes/version-2.3.html +1171 -451
  441. nautobot/project-static/docs/release-notes/version-2.4.html +800 -111
  442. nautobot/project-static/docs/requirements.txt +2 -2
  443. nautobot/project-static/docs/search/search_index.json +1 -1
  444. nautobot/project-static/docs/sitemap.xml +303 -287
  445. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  446. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +131 -14
  447. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +131 -14
  448. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +133 -16
  449. nautobot/project-static/docs/user-guide/administration/configuration/index.html +131 -14
  450. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +131 -14
  451. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +195 -18
  452. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +131 -14
  453. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +134 -17
  454. nautobot/project-static/docs/user-guide/administration/guides/docker.html +131 -14
  455. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +131 -14
  456. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +131 -14
  457. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +131 -14
  458. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +131 -14
  459. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +131 -14
  460. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +133 -16
  461. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +131 -14
  462. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +131 -14
  463. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +131 -14
  464. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +151 -18
  465. nautobot/project-static/docs/user-guide/administration/installation/index.html +131 -14
  466. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +132 -15
  467. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +131 -14
  468. nautobot/project-static/docs/user-guide/administration/installation/services.html +131 -14
  469. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +131 -14
  470. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +131 -14
  471. nautobot/project-static/docs/user-guide/administration/security/index.html +9420 -0
  472. nautobot/project-static/docs/user-guide/administration/security/notices.html +9843 -0
  473. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +131 -14
  474. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +131 -14
  475. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +131 -14
  476. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +131 -14
  477. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +131 -14
  478. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +131 -14
  479. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +131 -14
  480. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +134 -18
  481. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +131 -14
  482. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +131 -14
  483. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +131 -14
  484. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +131 -14
  485. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +131 -14
  486. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +131 -14
  487. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +131 -14
  488. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +131 -14
  489. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +131 -14
  490. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +131 -14
  491. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +131 -14
  492. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +131 -14
  493. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +131 -14
  494. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +131 -14
  495. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +131 -14
  496. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +131 -14
  497. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +131 -14
  498. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +131 -14
  499. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +131 -14
  500. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +131 -14
  501. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +131 -14
  502. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +131 -14
  503. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +131 -14
  504. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +131 -14
  505. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +131 -14
  506. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +131 -14
  507. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +131 -14
  508. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +131 -14
  509. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +131 -14
  510. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +131 -14
  511. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +131 -14
  512. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +131 -14
  513. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +131 -14
  514. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +131 -14
  515. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +131 -14
  516. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +131 -14
  517. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +131 -14
  518. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +131 -14
  519. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +131 -14
  520. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +131 -14
  521. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +131 -14
  522. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +131 -14
  523. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +131 -14
  524. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +131 -14
  525. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +131 -14
  526. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +131 -14
  527. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +131 -14
  528. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +131 -14
  529. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +131 -14
  530. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +131 -14
  531. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +131 -14
  532. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +131 -14
  533. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +131 -14
  534. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +131 -14
  535. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +131 -14
  536. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +131 -14
  537. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +131 -14
  538. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +135 -22
  539. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +131 -14
  540. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +131 -14
  541. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +131 -14
  542. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +131 -14
  543. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +131 -14
  544. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +131 -14
  545. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +131 -14
  546. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +131 -14
  547. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +131 -14
  548. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +131 -14
  549. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +131 -14
  550. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +131 -14
  551. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +134 -17
  552. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +131 -14
  553. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +131 -14
  554. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +131 -14
  555. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +131 -14
  556. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +131 -14
  557. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +131 -14
  558. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +131 -14
  559. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +131 -14
  560. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +131 -14
  561. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +131 -14
  562. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +131 -14
  563. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +131 -14
  564. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +131 -14
  565. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +131 -14
  566. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +131 -14
  567. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +134 -17
  568. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +131 -14
  569. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +131 -14
  570. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +131 -14
  571. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +131 -14
  572. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +131 -14
  573. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +131 -14
  574. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +236 -34
  575. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +131 -14
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  587. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  588. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  589. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +131 -14
  590. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +131 -14
  591. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +134 -17
  592. nautobot/project-static/docs/{development/core/local-k8s.html → user-guide/feature-guides/wireless-networks-and-controllers.html} +632 -566
  593. nautobot/project-static/docs/user-guide/index.html +131 -14
  594. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +131 -14
  595. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +135 -18
  596. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +131 -14
  597. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +131 -14
  598. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +131 -14
  599. nautobot/project-static/docs/user-guide/platform-functionality/events.html +131 -14
  600. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +131 -14
  601. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +131 -14
  602. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +451 -16
  603. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +131 -14
  604. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +131 -14
  605. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +131 -14
  606. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +135 -17
  607. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +131 -14
  608. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +134 -17
  609. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +131 -14
  610. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +131 -14
  611. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9797 -0
  612. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +131 -14
  613. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +131 -14
  614. nautobot/project-static/docs/user-guide/platform-functionality/note.html +131 -14
  615. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +131 -14
  616. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +132 -15
  617. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +131 -14
  618. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +131 -14
  619. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +179 -35
  620. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +159 -15
  621. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +131 -14
  622. nautobot/project-static/docs/user-guide/platform-functionality/role.html +131 -14
  623. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +131 -14
  624. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +131 -14
  625. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +131 -14
  626. nautobot/project-static/docs/user-guide/platform-functionality/status.html +131 -14
  627. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +131 -14
  628. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +131 -14
  629. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +131 -14
  630. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +131 -14
  631. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +131 -14
  632. nautobot/project-static/js/forms.js +1 -1
  633. nautobot/tenancy/api/views.py +9 -13
  634. nautobot/tenancy/templates/tenancy/tenant.html +1 -2
  635. nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
  636. nautobot/tenancy/views.py +4 -2
  637. nautobot/users/admin.py +1 -1
  638. nautobot/users/api/serializers.py +5 -4
  639. nautobot/users/api/views.py +3 -3
  640. nautobot/virtualization/api/serializers.py +4 -4
  641. nautobot/virtualization/api/views.py +5 -24
  642. nautobot/virtualization/filters.py +20 -3
  643. nautobot/virtualization/models.py +1 -1
  644. nautobot/virtualization/tables.py +2 -2
  645. nautobot/virtualization/templates/virtualization/cluster.html +1 -1
  646. nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
  647. nautobot/virtualization/templates/virtualization/clustergroup.html +1 -1
  648. nautobot/virtualization/templates/virtualization/clustertype.html +1 -1
  649. nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -10
  650. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
  651. nautobot/virtualization/templates/virtualization/vminterface.html +1 -1
  652. nautobot/virtualization/tests/test_filters.py +17 -0
  653. nautobot/wireless/filters.py +2 -2
  654. nautobot/wireless/forms.py +1 -1
  655. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -9
  656. nautobot/wireless/tests/integration/__init__.py +0 -0
  657. nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
  658. nautobot/wireless/tests/test_filters.py +29 -1
  659. nautobot/wireless/tests/test_views.py +22 -1
  660. nautobot/wireless/views.py +0 -10
  661. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/METADATA +9 -9
  662. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/RECORD +667 -610
  663. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/WHEEL +1 -1
  664. nautobot/core/fixtures/user-data.json +0 -59
  665. /nautobot/project-static/docs/assets/stylesheets/{main.6f8fc17f.min.css.map → main.a40c8224.min.css.map} +0 -0
  666. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/LICENSE.txt +0 -0
  667. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/NOTICE +0 -0
  668. {nautobot-2.4.0b1.dist-info → nautobot-2.4.2.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.46">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.50">
22
22
 
23
23
 
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../../assets/stylesheets/main.6f8fc17f.min.css">
29
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.a40c8224.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1"/></svg>');}</style>
41
+ <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1"/></svg>');}</style>
42
42
 
43
43
 
44
44
 
@@ -217,7 +217,7 @@
217
217
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
218
218
  <div class="md-source__icon md-icon">
219
219
 
220
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
220
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
221
221
  </div>
222
222
  <div class="md-source__repository">
223
223
  GitHub
@@ -377,7 +377,7 @@
377
377
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
378
378
  <div class="md-source__icon md-icon">
379
379
 
380
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
380
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
381
381
  </div>
382
382
  <div class="md-source__repository">
383
383
  GitHub
@@ -1697,6 +1697,81 @@
1697
1697
 
1698
1698
 
1699
1699
 
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+ <li class="md-nav__item md-nav__item--nested">
1714
+
1715
+
1716
+
1717
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_7" >
1718
+
1719
+
1720
+
1721
+ <div class="md-nav__link md-nav__container">
1722
+ <a href="../../../user-guide/administration/security/index.html" class="md-nav__link ">
1723
+
1724
+
1725
+ <span class="md-ellipsis">
1726
+ Security
1727
+ </span>
1728
+
1729
+
1730
+ </a>
1731
+
1732
+
1733
+ <label class="md-nav__link " for="__nav_2_1_7" id="__nav_2_1_7_label" tabindex="0">
1734
+ <span class="md-nav__icon md-icon"></span>
1735
+ </label>
1736
+
1737
+ </div>
1738
+
1739
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_7_label" aria-expanded="false">
1740
+ <label class="md-nav__title" for="__nav_2_1_7">
1741
+ <span class="md-nav__icon md-icon"></span>
1742
+ Security
1743
+ </label>
1744
+ <ul class="md-nav__list" data-md-scrollfix>
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+ <li class="md-nav__item">
1753
+ <a href="../../../user-guide/administration/security/notices.html" class="md-nav__link">
1754
+
1755
+
1756
+ <span class="md-ellipsis">
1757
+ Notices
1758
+ </span>
1759
+
1760
+
1761
+ </a>
1762
+ </li>
1763
+
1764
+
1765
+
1766
+
1767
+ </ul>
1768
+ </nav>
1769
+
1770
+ </li>
1771
+
1772
+
1773
+
1774
+
1700
1775
  </ul>
1701
1776
  </nav>
1702
1777
 
@@ -2112,6 +2187,27 @@
2112
2187
 
2113
2188
 
2114
2189
 
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+ <li class="md-nav__item">
2197
+ <a href="../../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2198
+
2199
+
2200
+ <span class="md-ellipsis">
2201
+ Wireless Networks and Controllers
2202
+ </span>
2203
+
2204
+
2205
+ </a>
2206
+ </li>
2207
+
2208
+
2209
+
2210
+
2115
2211
  </ul>
2116
2212
  </nav>
2117
2213
 
@@ -5131,6 +5227,27 @@
5131
5227
 
5132
5228
 
5133
5229
 
5230
+ <li class="md-nav__item">
5231
+ <a href="../../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5232
+
5233
+
5234
+ <span class="md-ellipsis">
5235
+ Kubernetes Job Support
5236
+ </span>
5237
+
5238
+
5239
+ </a>
5240
+ </li>
5241
+
5242
+
5243
+
5244
+
5245
+
5246
+
5247
+
5248
+
5249
+
5250
+
5134
5251
  <li class="md-nav__item">
5135
5252
  <a href="../../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
5136
5253
 
@@ -8815,11 +8932,11 @@
8815
8932
 
8816
8933
 
8817
8934
  <li class="md-nav__item">
8818
- <a href="../../../development/core/local-k8s.html" class="md-nav__link">
8935
+ <a href="../../../development/core/minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
8819
8936
 
8820
8937
 
8821
8938
  <span class="md-ellipsis">
8822
- Local Kubernetes Cluster
8939
+ Minikube Dev Environment for K8s Jobs
8823
8940
  </span>
8824
8941
 
8825
8942
 
@@ -10476,7 +10593,12 @@
10476
10593
 
10477
10594
  <div class="doc doc-contents first">
10478
10595
 
10479
- <p>Nautobot utility functions.</p>
10596
+ <p>Nautobot utility functions.</p>
10597
+
10598
+
10599
+
10600
+
10601
+
10480
10602
 
10481
10603
 
10482
10604
 
@@ -10502,10 +10624,15 @@
10502
10624
 
10503
10625
  <div class="doc doc-contents ">
10504
10626
  <p class="doc doc-class-bases">
10505
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
10627
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
10628
+
10629
+
10630
+ <p>Helper class to get ContentType for models that implements the to_objectchange method for change logging.</p>
10631
+
10632
+
10633
+
10506
10634
 
10507
10635
 
10508
- <p>Helper class to get ContentType for models that implements the to_objectchange method for change logging.</p>
10509
10636
 
10510
10637
 
10511
10638
 
@@ -10531,7 +10658,7 @@
10531
10658
 
10532
10659
  <div class="doc doc-contents ">
10533
10660
 
10534
- <p>Return a list of classes that implement the to_objectchange method</p>
10661
+ <p>Return a list of classes that implement the to_objectchange method</p>
10535
10662
 
10536
10663
  </div>
10537
10664
 
@@ -10559,12 +10686,17 @@
10559
10686
  <div class="doc doc-contents ">
10560
10687
 
10561
10688
 
10562
- <p>Helper class that delays evaluation of the registry contents for the functionality store
10689
+ <p>Helper class that delays evaluation of the registry contents for the functionality store
10563
10690
  until it has been populated.</p>
10564
10691
 
10565
10692
 
10566
10693
 
10567
10694
 
10695
+
10696
+
10697
+
10698
+
10699
+
10568
10700
  <div class="doc doc-children">
10569
10701
 
10570
10702
 
@@ -10586,7 +10718,7 @@ until it has been populated.</p>
10586
10718
 
10587
10719
  <div class="doc doc-contents ">
10588
10720
 
10589
- <p>Given an extras feature, return a iterable of app_label: [models] for content type lookup.</p>
10721
+ <p>Given an extras feature, return a iterable of app_label: [models] for content type lookup.</p>
10590
10722
  <p>Misnamed, as it returns an iterable of (key, value) (i.e. dict.items()) rather than an actual dict.</p>
10591
10723
  <p>Raises a KeyError if the given feature doesn't exist.</p>
10592
10724
 
@@ -10605,7 +10737,7 @@ until it has been populated.</p>
10605
10737
 
10606
10738
  <div class="doc doc-contents ">
10607
10739
 
10608
- <p>Given an extras feature, return a list of 2-tuple of <code>(model_label, pk)</code>
10740
+ <p>Given an extras feature, return a list of 2-tuple of <code>(model_label, pk)</code>
10609
10741
  suitable for use as <code>choices</code> on a choice field:</p>
10610
10742
  <div class="highlight"><pre><span></span><code>&gt;&gt;&gt; FeatureQuery(&#39;statuses&#39;).get_choices()
10611
10743
  [(&#39;dcim.device&#39;, 13), (&#39;dcim.rack&#39;, 34)]
@@ -10627,7 +10759,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10627
10759
 
10628
10760
  <div class="doc doc-contents ">
10629
10761
 
10630
- <p>Given an extras feature, return a Q object for content type lookup</p>
10762
+ <p>Given an extras feature, return a Q object for content type lookup</p>
10631
10763
 
10632
10764
  </div>
10633
10765
 
@@ -10644,7 +10776,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10644
10776
 
10645
10777
  <div class="doc doc-contents ">
10646
10778
 
10647
- <p>Return a list of model classes that declare this feature.</p>
10779
+ <p>Return a list of model classes that declare this feature.</p>
10648
10780
  <p>Cache is cleared by post_migrate signal (nautobot.extras.signals.post_migrate_clear_content_type_caches).</p>
10649
10781
 
10650
10782
  </div>
@@ -10673,7 +10805,12 @@ suitable for use as <code>choices</code> on a choice field:</p>
10673
10805
  <div class="doc doc-contents ">
10674
10806
 
10675
10807
 
10676
- <p>Mixin class that gets a list of featured models.</p>
10808
+ <p>Mixin class that gets a list of featured models.</p>
10809
+
10810
+
10811
+
10812
+
10813
+
10677
10814
 
10678
10815
 
10679
10816
 
@@ -10699,7 +10836,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10699
10836
 
10700
10837
  <div class="doc doc-contents ">
10701
10838
 
10702
- <p>Given an extras feature, return a Q object for content type lookup</p>
10839
+ <p>Given an extras feature, return a Q object for content type lookup</p>
10703
10840
 
10704
10841
  </div>
10705
10842
 
@@ -10716,7 +10853,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10716
10853
 
10717
10854
  <div class="doc doc-contents ">
10718
10855
 
10719
- <p>Return a list of classes that has implements this <code>name</code>.</p>
10856
+ <p>Return a list of classes that has implements this <code>name</code>.</p>
10720
10857
 
10721
10858
  </div>
10722
10859
 
@@ -10747,6 +10884,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10747
10884
 
10748
10885
 
10749
10886
 
10887
+
10888
+
10889
+
10890
+
10891
+
10750
10892
  <div class="doc doc-children">
10751
10893
 
10752
10894
 
@@ -10771,7 +10913,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10771
10913
 
10772
10914
  <div class="doc doc-contents ">
10773
10915
 
10774
- <p>Current checked out repository head commit.</p>
10916
+ <p>Current checked out repository head commit.</p>
10775
10917
  </div>
10776
10918
 
10777
10919
  </div>
@@ -10782,14 +10924,14 @@ suitable for use as <code>choices</code> on a choice field:</p>
10782
10924
 
10783
10925
 
10784
10926
  <h3 id="nautobot.apps.utils.GitRepo.__init__" class="doc doc-heading">
10785
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">clone_initially</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></code>
10927
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">clone_initially</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">branch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span></code>
10786
10928
 
10787
10929
  <a href="#nautobot.apps.utils.GitRepo.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
10788
10930
 
10789
10931
 
10790
10932
  <div class="doc doc-contents ">
10791
10933
 
10792
- <p>Ensure that we have a clone of the given remote Git repository URL at the given local directory path.</p>
10934
+ <p>Ensure that we have a clone of the given remote Git repository URL at the given local directory path.</p>
10793
10935
 
10794
10936
 
10795
10937
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10804,9 +10946,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10804
10946
  </thead>
10805
10947
  <tbody>
10806
10948
  <tr class="doc-section-item">
10807
- <td><code>path</code></td>
10808
10949
  <td>
10809
- <code><autoref identifier="str" optional>str</autoref></code>
10950
+ <code>path</code>
10951
+ </td>
10952
+ <td>
10953
+ <code>str</code>
10810
10954
  </td>
10811
10955
  <td>
10812
10956
  <div class="doc-md-description">
@@ -10818,9 +10962,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10818
10962
  </td>
10819
10963
  </tr>
10820
10964
  <tr class="doc-section-item">
10821
- <td><code>url</code></td>
10822
10965
  <td>
10823
- <code><autoref identifier="str" optional>str</autoref></code>
10966
+ <code>url</code>
10967
+ </td>
10968
+ <td>
10969
+ <code>str</code>
10824
10970
  </td>
10825
10971
  <td>
10826
10972
  <div class="doc-md-description">
@@ -10832,9 +10978,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10832
10978
  </td>
10833
10979
  </tr>
10834
10980
  <tr class="doc-section-item">
10835
- <td><code>clone_initially</code></td>
10836
10981
  <td>
10837
- <code><autoref identifier="bool" optional>bool</autoref></code>
10982
+ <code>clone_initially</code>
10983
+ </td>
10984
+ <td>
10985
+ <code>bool</code>
10838
10986
  </td>
10839
10987
  <td>
10840
10988
  <div class="doc-md-description">
@@ -10845,6 +10993,38 @@ suitable for use as <code>choices</code> on a choice field:</p>
10845
10993
  <code>True</code>
10846
10994
  </td>
10847
10995
  </tr>
10996
+ <tr class="doc-section-item">
10997
+ <td>
10998
+ <code>branch</code>
10999
+ </td>
11000
+ <td>
11001
+ <code>str</code>
11002
+ </td>
11003
+ <td>
11004
+ <div class="doc-md-description">
11005
+ <p>branch to checkout</p>
11006
+ </div>
11007
+ </td>
11008
+ <td>
11009
+ <code>None</code>
11010
+ </td>
11011
+ </tr>
11012
+ <tr class="doc-section-item">
11013
+ <td>
11014
+ <code>depth</code>
11015
+ </td>
11016
+ <td>
11017
+ <code>int</code>
11018
+ </td>
11019
+ <td>
11020
+ <div class="doc-md-description">
11021
+ <p>depth of the clone</p>
11022
+ </div>
11023
+ </td>
11024
+ <td>
11025
+ <code>0</code>
11026
+ </td>
11027
+ </tr>
10848
11028
  </tbody>
10849
11029
  </table>
10850
11030
 
@@ -10863,7 +11043,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10863
11043
 
10864
11044
  <div class="doc doc-contents ">
10865
11045
 
10866
- <p>Check out the given branch, and optionally the specified commit within that branch.</p>
11046
+ <p>Check out the given branch, and optionally the specified commit within that branch.</p>
10867
11047
 
10868
11048
 
10869
11049
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -10878,9 +11058,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10878
11058
  </thead>
10879
11059
  <tbody>
10880
11060
  <tr class="doc-section-item">
10881
- <td><code>branch</code></td>
10882
11061
  <td>
10883
- <code><autoref identifier="str" optional>str</autoref></code>
11062
+ <code>branch</code>
11063
+ </td>
11064
+ <td>
11065
+ <code>str</code>
10884
11066
  </td>
10885
11067
  <td>
10886
11068
  <div class="doc-md-description">
@@ -10892,9 +11074,11 @@ suitable for use as <code>choices</code> on a choice field:</p>
10892
11074
  </td>
10893
11075
  </tr>
10894
11076
  <tr class="doc-section-item">
10895
- <td><code>commit_hexsha</code></td>
10896
11077
  <td>
10897
- <code><autoref identifier="str" optional>str</autoref></code>
11078
+ <code>commit_hexsha</code>
11079
+ </td>
11080
+ <td>
11081
+ <code>str</code>
10898
11082
  </td>
10899
11083
  <td>
10900
11084
  <div class="doc-md-description">
@@ -10907,7 +11091,7 @@ suitable for use as <code>choices</code> on a choice field:</p>
10907
11091
  </tr>
10908
11092
  </tbody>
10909
11093
  </table>
10910
- <p>If <code>commit_hexsha</code> is specified and <code>branch</code> is either a tag or a commit identifier, they must match.
11094
+ <p>If <code>commit_hexsha</code> is specified and <code>branch</code> is either a tag or a commit identifier, they must match.
10911
11095
  If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch name, it must contain the specified commit.</p>
10912
11096
 
10913
11097
 
@@ -10922,7 +11106,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10922
11106
  <tbody>
10923
11107
  <tr class="doc-section-item">
10924
11108
  <td>
10925
- <code>(<autoref identifier="str" optional>str</autoref>, <autoref identifier="bool" optional>bool</autoref>)</code>
11109
+ <code>(str, bool)</code>
10926
11110
  </td>
10927
11111
  <td>
10928
11112
  <div class="doc-md-description">
@@ -10958,10 +11142,15 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10958
11142
 
10959
11143
  <div class="doc doc-contents ">
10960
11144
  <p class="doc doc-class-bases">
10961
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
11145
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
11146
+
11147
+
11148
+ <p>Helper class to get ContentType models that implements role.</p>
11149
+
11150
+
11151
+
10962
11152
 
10963
11153
 
10964
- <p>Helper class to get ContentType models that implements role.</p>
10965
11154
 
10966
11155
 
10967
11156
 
@@ -10987,7 +11176,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
10987
11176
 
10988
11177
  <div class="doc doc-contents ">
10989
11178
 
10990
- <p>Return a list of classes that implements roles e.g roles = ...</p>
11179
+ <p>Return a list of classes that implements roles e.g roles = ...</p>
10991
11180
 
10992
11181
  </div>
10993
11182
 
@@ -11014,10 +11203,15 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11014
11203
 
11015
11204
  <div class="doc doc-contents ">
11016
11205
  <p class="doc doc-class-bases">
11017
- Bases: <code><autoref identifier="nautobot.extras.utils.FeaturedQueryMixin" optional hover>FeaturedQueryMixin</autoref></code></p>
11206
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.extras.utils.FeaturedQueryMixin" href="#nautobot.apps.utils.FeaturedQueryMixin">FeaturedQueryMixin</a></code></p>
11207
+
11208
+
11209
+ <p>Helper class to get ContentType models that implements tags(TagsField)</p>
11210
+
11211
+
11212
+
11018
11213
 
11019
11214
 
11020
- <p>Helper class to get ContentType models that implements tags(TagsField)</p>
11021
11215
 
11022
11216
 
11023
11217
 
@@ -11043,7 +11237,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11043
11237
 
11044
11238
  <div class="doc doc-contents ">
11045
11239
 
11046
- <p>Return a list of classes that has implements tags e.g tags = TagsField(...)</p>
11240
+ <p>Return a list of classes that has implements tags e.g tags = TagsField(...)</p>
11047
11241
 
11048
11242
  </div>
11049
11243
 
@@ -11069,7 +11263,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11069
11263
 
11070
11264
  <div class="doc doc-contents ">
11071
11265
 
11072
- <p>Return lookup expr with its verbose name</p>
11266
+ <p>Return lookup expr with its verbose name</p>
11073
11267
 
11074
11268
 
11075
11269
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -11084,9 +11278,11 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11084
11278
  </thead>
11085
11279
  <tbody>
11086
11280
  <tr class="doc-section-item">
11087
- <td><code>field_name</code></td>
11088
11281
  <td>
11089
- <code><autoref identifier="str" optional>str</autoref></code>
11282
+ <code>field_name</code>
11283
+ </td>
11284
+ <td>
11285
+ <code>str</code>
11090
11286
  </td>
11091
11287
  <td>
11092
11288
  <div class="doc-md-description">
@@ -11098,9 +11294,11 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11098
11294
  </td>
11099
11295
  </tr>
11100
11296
  <tr class="doc-section-item">
11101
- <td><code>_verbose_name</code></td>
11102
11297
  <td>
11103
- <code><autoref identifier="str" optional>str</autoref></code>
11298
+ <code>_verbose_name</code>
11299
+ </td>
11300
+ <td>
11301
+ <code>str</code>
11104
11302
  </td>
11105
11303
  <td>
11106
11304
  <div class="doc-md-description">
@@ -11135,7 +11333,7 @@ If <code>commit_hexsha</code> is specified and <code>branch</code> is a branch n
11135
11333
 
11136
11334
  <div class="doc doc-contents ">
11137
11335
 
11138
- <p>Helper method to check if a key field is Python/GraphQL safe.
11336
+ <p>Helper method to check if a key field is Python/GraphQL safe.
11139
11337
  Used in CustomField, ComputedField and Relationship models.</p>
11140
11338
 
11141
11339
  </div>
@@ -11153,7 +11351,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
11153
11351
 
11154
11352
  <div class="doc doc-contents ">
11155
11353
 
11156
- <p>Decorator to mark a class as deprecated with a custom message about what to do instead of subclassing it.</p>
11354
+ <p>Decorator to mark a class as deprecated with a custom message about what to do instead of subclassing it.</p>
11157
11355
 
11158
11356
  </div>
11159
11357
 
@@ -11170,7 +11368,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
11170
11368
 
11171
11369
  <div class="doc doc-contents ">
11172
11370
 
11173
- <p>Decorator to mark a class as deprecated and suggest a replacement class if it is subclassed from.</p>
11371
+ <p>Decorator to mark a class as deprecated and suggest a replacement class if it is subclassed from.</p>
11174
11372
 
11175
11373
  </div>
11176
11374
 
@@ -11187,7 +11385,7 @@ Used in CustomField, ComputedField and Relationship models.</p>
11187
11385
 
11188
11386
  <div class="doc doc-contents ">
11189
11387
 
11190
- <div class="highlight"><pre><span></span><code>Convert Git diff log into a list splitted by \n
11388
+ <div class="highlight"><pre><span></span><code>Convert Git diff log into a list splitted by \n
11191
11389
 
11192
11390
  Example:
11193
11391
  &gt;&gt;&gt; git_log = &quot;M index.html
@@ -11211,7 +11409,7 @@ Example:
11211
11409
 
11212
11410
  <div class="doc doc-contents ">
11213
11411
 
11214
- <p>Convert request QueryDict/GET into an acceptable factory formset QueryDict
11412
+ <p>Convert request QueryDict/GET into an acceptable factory formset QueryDict
11215
11413
  while discarding <code>querydict</code> params which are not part of <code>filterset_class</code> params</p>
11216
11414
 
11217
11415
 
@@ -11227,9 +11425,11 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11227
11425
  </thead>
11228
11426
  <tbody>
11229
11427
  <tr class="doc-section-item">
11230
- <td><code>request_querydict</code></td>
11231
11428
  <td>
11232
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11429
+ <code>request_querydict</code>
11430
+ </td>
11431
+ <td>
11432
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
11233
11433
  </td>
11234
11434
  <td>
11235
11435
  <div class="doc-md-description">
@@ -11241,9 +11441,11 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11241
11441
  </td>
11242
11442
  </tr>
11243
11443
  <tr class="doc-section-item">
11244
- <td><code>filterset</code></td>
11245
11444
  <td>
11246
- <code><autoref identifier="FilterSet" optional>FilterSet</autoref></code>
11445
+ <code>filterset</code>
11446
+ </td>
11447
+ <td>
11448
+ <code>FilterSet</code>
11247
11449
  </td>
11248
11450
  <td>
11249
11451
  <div class="doc-md-description">
@@ -11289,7 +11491,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11289
11491
 
11290
11492
  <div class="doc doc-contents ">
11291
11493
 
11292
- <p>Decorator that wraps a models existing clean method to also execute registered plugin custom validators</p>
11494
+ <p>Decorator that wraps a models existing clean method to also execute registered plugin custom validators</p>
11293
11495
  <p>:param model_clean_func: The original model clean method which is to be wrapped</p>
11294
11496
 
11295
11497
  </div>
@@ -11307,7 +11509,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11307
11509
 
11308
11510
  <div class="doc doc-contents ">
11309
11511
 
11310
- <p>Deep merge two dictionaries (new into original) and return a new dict</p>
11512
+ <p>Deep merge two dictionaries (new into original) and return a new dict</p>
11311
11513
 
11312
11514
  </div>
11313
11515
 
@@ -11324,7 +11526,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11324
11526
 
11325
11527
  <div class="doc doc-contents ">
11326
11528
 
11327
- <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>
11529
+ <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>
11328
11530
  <p>Return the 'ContentTypes' model and 'field_name' if validation was successful.</p>
11329
11531
 
11330
11532
  </div>
@@ -11342,7 +11544,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11342
11544
 
11343
11545
  <div class="doc doc-contents ">
11344
11546
 
11345
- <p>For instances of model that have an invalid NULL status field, create and use a special status_model instance.</p>
11547
+ <p>For instances of model that have an invalid NULL status field, create and use a special status_model instance.</p>
11346
11548
 
11347
11549
  </div>
11348
11550
 
@@ -11359,7 +11561,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11359
11561
 
11360
11562
  <div class="doc doc-contents ">
11361
11563
 
11362
- <p>Flatten nested dictionaries into a single level by joining key names with a separator.</p>
11564
+ <p>Flatten nested dictionaries into a single level by joining key names with a separator.</p>
11363
11565
  <p>:param d: The dictionary to be flattened
11364
11566
  :param prefix: Initial prefix (if any)
11365
11567
  :param separator: The character to use when concatenating key names</p>
@@ -11379,7 +11581,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11379
11581
 
11380
11582
  <div class="doc doc-contents ">
11381
11583
 
11382
- <p>Flatten a nested iterable such as a list of lists, keeping strings intact.</p>
11584
+ <p>Flatten a nested iterable such as a list of lists, keeping strings intact.</p>
11383
11585
  <p>:param iterable: The iterable to be flattened
11384
11586
  :returns: generator</p>
11385
11587
 
@@ -11398,7 +11600,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11398
11600
 
11399
11601
  <div class="doc doc-contents ">
11400
11602
 
11401
- <p>Return the ideal foreground color (black or white) for a given background color in hexadecimal RGB format.</p>
11603
+ <p>Return the ideal foreground color (black or white) for a given background color in hexadecimal RGB format.</p>
11402
11604
 
11403
11605
  </div>
11404
11606
 
@@ -11415,7 +11617,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11415
11617
 
11416
11618
  <div class="doc doc-contents ">
11417
11619
 
11418
- <p>Return a cryptographic signature that can be used to verify the authenticity of webhook data.</p>
11620
+ <p>Return a cryptographic signature that can be used to verify the authenticity of webhook data.</p>
11419
11621
 
11420
11622
  </div>
11421
11623
 
@@ -11432,7 +11634,7 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11432
11634
 
11433
11635
  <div class="doc doc-contents ">
11434
11636
 
11435
- <p>Return all lookup expressions for <code>field_name</code> in <code>model</code> filterset</p>
11637
+ <p>Return all lookup expressions for <code>field_name</code> in <code>model</code> filterset</p>
11436
11638
 
11437
11639
  </div>
11438
11640
 
@@ -11449,10 +11651,60 @@ while discarding <code>querydict</code> params which are not part of <code>filte
11449
11651
 
11450
11652
  <div class="doc doc-contents ">
11451
11653
 
11452
- <p>Returns the name of the base template, if the base_template is not None
11453
- Otherwise, default to using "<app>/<model>.html" as the base template, if it exists.
11454
- Otherwise, check if "<app>/<model>_retrieve.html" used in <code>NautobotUIViewSet</code> exists.
11455
- If both templates do not exist, fall back to "base.html".</p>
11654
+ <p>Attempt to locate the correct base template for an object detail view and related views, if one was not specified.</p>
11655
+
11656
+
11657
+ <p><span class="doc-section-title">Parameters:</span></p>
11658
+ <table>
11659
+ <thead>
11660
+ <tr>
11661
+ <th>Name</th>
11662
+ <th>Type</th>
11663
+ <th>Description</th>
11664
+ <th>Default</th>
11665
+ </tr>
11666
+ </thead>
11667
+ <tbody>
11668
+ <tr class="doc-section-item">
11669
+ <td>
11670
+ <code>base_template</code>
11671
+ </td>
11672
+ <td>
11673
+ <code>str</code>
11674
+ </td>
11675
+ <td>
11676
+ <div class="doc-md-description">
11677
+ <p>If not None, this explicitly specified template will be preferred.</p>
11678
+ </div>
11679
+ </td>
11680
+ <td>
11681
+ <em>required</em>
11682
+ </td>
11683
+ </tr>
11684
+ <tr class="doc-section-item">
11685
+ <td>
11686
+ <code>model</code>
11687
+ </td>
11688
+ <td>
11689
+ <code><span title="django.db.models.Model">Model</span></code>
11690
+ </td>
11691
+ <td>
11692
+ <div class="doc-md-description">
11693
+ <p>The model to identify a base template for, if base_template is None.</p>
11694
+ </div>
11695
+ </td>
11696
+ <td>
11697
+ <em>required</em>
11698
+ </td>
11699
+ </tr>
11700
+ </tbody>
11701
+ </table>
11702
+ <p>Returns the specified <code>base_template</code>, if not <code>None</code>.
11703
+ Otherwise, if <code>"&lt;app&gt;/&lt;model_name&gt;.html"</code> exists (legacy ObjectView pattern), returns that string.
11704
+ Otherwise, if <code>"&lt;app&gt;/&lt;model_name&gt;_retrieve.html"</code> exists (as used in <code>NautobotUIViewSet</code>), returns that string.
11705
+ If all else fails, returns <code>"generic/object_retrieve.html"</code>.</p>
11706
+ <p>Note: before Nautobot 2.4.2, this API would default to "base.html" rather than "generic/object_retrieve.html".
11707
+ This behavior was changed to the current behavior to address issue #6550 and similar incorrect behavior.</p>
11456
11708
 
11457
11709
  </div>
11458
11710
 
@@ -11469,7 +11721,7 @@ If both templates do not exist, fall back to "base.html".</p>
11469
11721
 
11470
11722
  <div class="doc doc-contents ">
11471
11723
 
11472
- <p>Return a dictionary of celery queues and the number of workers active on the queue in
11724
+ <p>Return a dictionary of celery queues and the number of workers active on the queue in
11473
11725
  the form {queue_name: num_workers}</p>
11474
11726
 
11475
11727
  </div>
@@ -11487,7 +11739,7 @@ the form {queue_name: num_workers}</p>
11487
11739
 
11488
11740
  <div class="doc doc-contents ">
11489
11741
 
11490
- <p>Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered
11742
+ <p>Return a queryset of ObjectChanges for a model or instance. The queryset will be filtered
11491
11743
  by the model class. If an instance is provided, the queryset will also be filtered by the instance id.</p>
11492
11744
 
11493
11745
  </div>
@@ -11505,7 +11757,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11505
11757
 
11506
11758
  <div class="doc doc-contents ">
11507
11759
 
11508
- <p>Return a label for a given field name and value.</p>
11760
+ <p>Return a label for a given field name and value.</p>
11509
11761
 
11510
11762
 
11511
11763
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -11520,9 +11772,11 @@ by the model class. If an instance is provided, the queryset will also be filter
11520
11772
  </thead>
11521
11773
  <tbody>
11522
11774
  <tr class="doc-section-item">
11523
- <td><code>filter_field</code></td>
11524
11775
  <td>
11525
- <code><autoref identifier="Filter" optional>Filter</autoref></code>
11776
+ <code>filter_field</code>
11777
+ </td>
11778
+ <td>
11779
+ <code>Filter</code>
11526
11780
  </td>
11527
11781
  <td>
11528
11782
  <div class="doc-md-description">
@@ -11548,7 +11802,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11548
11802
  <tbody>
11549
11803
  <tr class="doc-section-item">
11550
11804
  <td>
11551
- <code><autoref identifier="str" optional>str</autoref></code>
11805
+ <code>str</code>
11552
11806
  </td>
11553
11807
  <td>
11554
11808
  <div class="doc-md-description">
@@ -11574,7 +11828,7 @@ by the model class. If an instance is provided, the queryset will also be filter
11574
11828
 
11575
11829
  <div class="doc doc-contents ">
11576
11830
 
11577
- <p>Remove any <code>non_filter_params</code> and fields that are not a part of the filterset from <code>filter_params</code>
11831
+ <p>Remove any <code>non_filter_params</code> and fields that are not a part of the filterset from <code>filter_params</code>
11578
11832
  to return only queryset filterable parameters.</p>
11579
11833
 
11580
11834
 
@@ -11590,9 +11844,11 @@ to return only queryset filterable parameters.</p>
11590
11844
  </thead>
11591
11845
  <tbody>
11592
11846
  <tr class="doc-section-item">
11593
- <td><code>filter_params</code></td>
11594
11847
  <td>
11595
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11848
+ <code>filter_params</code>
11849
+ </td>
11850
+ <td>
11851
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
11596
11852
  </td>
11597
11853
  <td>
11598
11854
  <div class="doc-md-description">
@@ -11604,9 +11860,11 @@ to return only queryset filterable parameters.</p>
11604
11860
  </td>
11605
11861
  </tr>
11606
11862
  <tr class="doc-section-item">
11607
- <td><code>non_filter_params</code></td>
11608
11863
  <td>
11609
- <code><autoref identifier="list" optional>list</autoref></code>
11864
+ <code>non_filter_params</code>
11865
+ </td>
11866
+ <td>
11867
+ <code>list</code>
11610
11868
  </td>
11611
11869
  <td>
11612
11870
  <div class="doc-md-description">
@@ -11618,9 +11876,11 @@ to return only queryset filterable parameters.</p>
11618
11876
  </td>
11619
11877
  </tr>
11620
11878
  <tr class="doc-section-item">
11621
- <td><code>filterset</code></td>
11622
11879
  <td>
11623
- <code><autoref identifier="FilterSet" optional>FilterSet</autoref></code>
11880
+ <code>filterset</code>
11881
+ </td>
11882
+ <td>
11883
+ <code>FilterSet</code>
11624
11884
  </td>
11625
11885
  <td>
11626
11886
  <div class="doc-md-description">
@@ -11646,7 +11906,7 @@ to return only queryset filterable parameters.</p>
11646
11906
  <tbody>
11647
11907
  <tr class="doc-section-item">
11648
11908
  <td>
11649
- <code><autoref identifier="django.http.QueryDict" optional hover>QueryDict</autoref></code>
11909
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
11650
11910
  </td>
11651
11911
  <td>
11652
11912
  <div class="doc-md-description">
@@ -11672,7 +11932,7 @@ to return only queryset filterable parameters.</p>
11672
11932
 
11673
11933
  <div class="doc doc-contents ">
11674
11934
 
11675
- <p>Return the <code>FilterSet</code> class associated with a given <code>model</code>.</p>
11935
+ <p>Return the <code>FilterSet</code> class associated with a given <code>model</code>.</p>
11676
11936
  <p>The <code>FilterSet</code> class is expected to be in the <code>filters</code> module within the application
11677
11937
  associated with the model and its name is expected to be <code>{ModelName}FilterSet</code>.</p>
11678
11938
  <p>If a matching <code>FilterSet</code> is not found, this will return <code>None</code>.</p>
@@ -11690,9 +11950,11 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11690
11950
  </thead>
11691
11951
  <tbody>
11692
11952
  <tr class="doc-section-item">
11693
- <td><code>model</code></td>
11694
11953
  <td>
11695
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
11954
+ <code>model</code>
11955
+ </td>
11956
+ <td>
11957
+ <code>BaseModel</code>
11696
11958
  </td>
11697
11959
  <td>
11698
11960
  <div class="doc-md-description">
@@ -11718,7 +11980,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11718
11980
  <tbody>
11719
11981
  <tr class="doc-section-item">
11720
11982
  <td>
11721
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="FilterSet" optional>FilterSet</autoref>, None]</code>
11983
+ <code>Union[FilterSet, None]</code>
11722
11984
  </td>
11723
11985
  <td>
11724
11986
  <div class="doc-md-description">
@@ -11744,7 +12006,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11744
12006
 
11745
12007
  <div class="doc doc-contents ">
11746
12008
 
11747
- <p>Return the relevant form field instance for a filterset parameter e.g DynamicModelMultipleChoiceField, forms.IntegerField e.t.c</p>
12009
+ <p>Return the relevant form field instance for a filterset parameter e.g DynamicModelMultipleChoiceField, forms.IntegerField e.t.c</p>
11748
12010
 
11749
12011
  </div>
11750
12012
 
@@ -11761,7 +12023,7 @@ associated with the model and its name is expected to be <code>{ModelName}Filter
11761
12023
 
11762
12024
  <div class="doc doc-contents ">
11763
12025
 
11764
- <p>Return the <code>Form</code> class associated with a given <code>model</code>.</p>
12026
+ <p>Return the <code>Form</code> class associated with a given <code>model</code>.</p>
11765
12027
  <p>The <code>Form</code> class is expected to be in the <code>forms</code> module within the application
11766
12028
  associated with the model and its name is expected to be <code>{ModelName}{form_prefix}Form</code>.</p>
11767
12029
  <p>If a matching <code>Form</code> is not found, this will return <code>None</code>.</p>
@@ -11779,9 +12041,11 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11779
12041
  </thead>
11780
12042
  <tbody>
11781
12043
  <tr class="doc-section-item">
11782
- <td><code>form_prefix</code></td>
11783
12044
  <td>
11784
- <code><autoref identifier="str" optional>str</autoref></code>
12045
+ <code>form_prefix</code>
12046
+ </td>
12047
+ <td>
12048
+ <code>str</code>
11785
12049
  </td>
11786
12050
  <td>
11787
12051
  <div class="doc-md-description">
@@ -11808,7 +12072,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11808
12072
  <tbody>
11809
12073
  <tr class="doc-section-item">
11810
12074
  <td>
11811
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="Form" optional>Form</autoref>, None]</code>
12075
+ <code>Union[Form, None]</code>
11812
12076
  </td>
11813
12077
  <td>
11814
12078
  <div class="doc-md-description">
@@ -11834,7 +12098,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11834
12098
 
11835
12099
  <div class="doc doc-contents ">
11836
12100
 
11837
- <p>Get latest known Nautobot release from cache, or if not available, queue up a background task to populate the cache.</p>
12101
+ <p>Get latest known Nautobot release from cache, or if not available, queue up a background task to populate the cache.</p>
11838
12102
 
11839
12103
 
11840
12104
  <p><span class="doc-section-title">Returns:</span></p>
@@ -11848,7 +12112,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11848
12112
  <tbody>
11849
12113
  <tr class="doc-section-item">
11850
12114
  <td>
11851
- <code>(<autoref identifier="Version" optional>Version</autoref>, <autoref identifier="str" optional>str</autoref>)</code>
12115
+ <code>(Version, str)</code>
11852
12116
  </td>
11853
12117
  <td>
11854
12118
  <div class="doc-md-description">
@@ -11858,7 +12122,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11858
12122
  </tr>
11859
12123
  <tr class="doc-section-item">
11860
12124
  <td>
11861
- <code>(<autoref identifier="unknown" optional>unknown</autoref>, None)</code>
12125
+ <code>(unknown, None)</code>
11862
12126
  </td>
11863
12127
  <td>
11864
12128
  <div class="doc-md-description">
@@ -11884,7 +12148,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11884
12148
 
11885
12149
  <div class="doc doc-contents ">
11886
12150
 
11887
- <p>Given a full model name in dotted format (example: <code>dcim.model</code>), a model class is returned if valid.</p>
12151
+ <p>Given a full model name in dotted format (example: <code>dcim.model</code>), a model class is returned if valid.</p>
11888
12152
  <p>:param model_name: Full dotted name for a model as a string (ex: <code>dcim.model</code>)
11889
12153
  :type model_name: str</p>
11890
12154
  <p>:raises TypeError: If given model name is not found.</p>
@@ -11905,7 +12169,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11905
12169
 
11906
12170
  <div class="doc doc-contents ">
11907
12171
 
11908
- <p>Resolve the named permission for a given model (or instance) and action (e.g. view or add).</p>
12172
+ <p>Resolve the named permission for a given model (or instance) and action (e.g. view or add).</p>
11909
12173
  <p>:param model: A model or instance
11910
12174
  :param action: View, add, change, or delete (string)</p>
11911
12175
 
@@ -11924,7 +12188,7 @@ associated with the model and its name is expected to be <code>{ModelName}{form_
11924
12188
 
11925
12189
  <div class="doc doc-contents ">
11926
12190
 
11927
- <p>Return the appropriate class associated with a given model matching the <code>module_name</code> and
12191
+ <p>Return the appropriate class associated with a given model matching the <code>module_name</code> and
11928
12192
  <code>object_suffix</code>.</p>
11929
12193
  <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>
11930
12194
  <p>The object class is expected to be in the module within the application
@@ -11944,9 +12208,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11944
12208
  </thead>
11945
12209
  <tbody>
11946
12210
  <tr class="doc-section-item">
11947
- <td><code>model</code></td>
11948
12211
  <td>
11949
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="BaseModel" optional>BaseModel</autoref>, <autoref identifier="str" optional>str</autoref>]</code>
12212
+ <code>model</code>
12213
+ </td>
12214
+ <td>
12215
+ <code>Union[BaseModel, str]</code>
11950
12216
  </td>
11951
12217
  <td>
11952
12218
  <div class="doc-md-description">
@@ -11958,9 +12224,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11958
12224
  </td>
11959
12225
  </tr>
11960
12226
  <tr class="doc-section-item">
11961
- <td><code>module_name</code></td>
11962
12227
  <td>
11963
- <code><autoref identifier="str" optional>str</autoref></code>
12228
+ <code>module_name</code>
12229
+ </td>
12230
+ <td>
12231
+ <code>str</code>
11964
12232
  </td>
11965
12233
  <td>
11966
12234
  <div class="doc-md-description">
@@ -11972,9 +12240,11 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
11972
12240
  </td>
11973
12241
  </tr>
11974
12242
  <tr class="doc-section-item">
11975
- <td><code>object_suffix</code></td>
11976
12243
  <td>
11977
- <code><autoref identifier="str" optional>str</autoref></code>
12244
+ <code>object_suffix</code>
12245
+ </td>
12246
+ <td>
12247
+ <code>str</code>
11978
12248
  </td>
11979
12249
  <td>
11980
12250
  <div class="doc-md-description">
@@ -12000,7 +12270,7 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
12000
12270
  <tbody>
12001
12271
  <tr class="doc-section-item">
12002
12272
  <td>
12003
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="BaseModel" optional>BaseModel</autoref>, <autoref identifier="str" optional>str</autoref>]</code>
12273
+ <code>Union[BaseModel, str]</code>
12004
12274
  </td>
12005
12275
  <td>
12006
12276
  <div class="doc-md-description">
@@ -12026,7 +12296,7 @@ associated with the model and its name is expected to be <code>{ModelName}{objec
12026
12296
 
12027
12297
  <div class="doc doc-contents ">
12028
12298
 
12029
- <p>Find the field on <code>from_model</code> that is a relation to <code>to_model</code>.</p>
12299
+ <p>Find the field on <code>from_model</code> that is a relation to <code>to_model</code>.</p>
12030
12300
  <p>If no such field is found, returns None.
12031
12301
  If more than one such field is found, raises an AttributeError.</p>
12032
12302
 
@@ -12043,9 +12313,11 @@ If more than one such field is found, raises an AttributeError.</p>
12043
12313
  </thead>
12044
12314
  <tbody>
12045
12315
  <tr class="doc-section-item">
12046
- <td><code>from_model</code></td>
12047
12316
  <td>
12048
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12317
+ <code>from_model</code>
12318
+ </td>
12319
+ <td>
12320
+ <code>BaseModel</code>
12049
12321
  </td>
12050
12322
  <td>
12051
12323
  <div class="doc-md-description">
@@ -12057,9 +12329,11 @@ If more than one such field is found, raises an AttributeError.</p>
12057
12329
  </td>
12058
12330
  </tr>
12059
12331
  <tr class="doc-section-item">
12060
- <td><code>to_model</code></td>
12061
12332
  <td>
12062
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12333
+ <code>to_model</code>
12334
+ </td>
12335
+ <td>
12336
+ <code>BaseModel</code>
12063
12337
  </td>
12064
12338
  <td>
12065
12339
  <div class="doc-md-description">
@@ -12102,7 +12376,7 @@ If more than one such field is found, raises an AttributeError.</p>
12102
12376
 
12103
12377
  <div class="doc doc-contents ">
12104
12378
 
12105
- <p>Return the URL route name for the given model and action. Does not perform any validation.
12379
+ <p>Return the URL route name for the given model and action. Does not perform any validation.
12106
12380
  Supports both core and App routes.</p>
12107
12381
 
12108
12382
 
@@ -12118,9 +12392,11 @@ Supports both core and App routes.</p>
12118
12392
  </thead>
12119
12393
  <tbody>
12120
12394
  <tr class="doc-section-item">
12121
- <td><code>model</code></td>
12122
12395
  <td>
12123
- <code>(<autoref identifier="nautobot.core.models.Model" optional hover>Model</autoref>, <autoref identifier="str" optional>str</autoref>)</code>
12396
+ <code>model</code>
12397
+ </td>
12398
+ <td>
12399
+ <code>(<span title="nautobot.core.models.Model">Model</span>, str)</code>
12124
12400
  </td>
12125
12401
  <td>
12126
12402
  <div class="doc-md-description">
@@ -12132,9 +12408,11 @@ Supports both core and App routes.</p>
12132
12408
  </td>
12133
12409
  </tr>
12134
12410
  <tr class="doc-section-item">
12135
- <td><code>action</code></td>
12136
12411
  <td>
12137
- <code><autoref identifier="str" optional>str</autoref></code>
12412
+ <code>action</code>
12413
+ </td>
12414
+ <td>
12415
+ <code>str</code>
12138
12416
  </td>
12139
12417
  <td>
12140
12418
  <div class="doc-md-description">
@@ -12146,9 +12424,11 @@ Supports both core and App routes.</p>
12146
12424
  </td>
12147
12425
  </tr>
12148
12426
  <tr class="doc-section-item">
12149
- <td><code>api</code></td>
12150
12427
  <td>
12151
- <code><autoref identifier="bool" optional>bool</autoref></code>
12428
+ <code>api</code>
12429
+ </td>
12430
+ <td>
12431
+ <code>bool</code>
12152
12432
  </td>
12153
12433
  <td>
12154
12434
  <div class="doc-md-description">
@@ -12174,7 +12454,7 @@ Supports both core and App routes.</p>
12174
12454
  <tbody>
12175
12455
  <tr class="doc-section-item">
12176
12456
  <td>
12177
- <code><autoref identifier="str" optional>str</autoref></code>
12457
+ <code>str</code>
12178
12458
  </td>
12179
12459
  <td>
12180
12460
  <div class="doc-md-description">
@@ -12216,7 +12496,7 @@ Supports both core and App routes.</p>
12216
12496
 
12217
12497
  <div class="doc doc-contents ">
12218
12498
 
12219
- <p>Get a value from Django settings (if specified there) or Constance configuration (otherwise).</p>
12499
+ <p>Get a value from Django settings (if specified there) or Constance configuration (otherwise).</p>
12220
12500
  <p>The fallback value is returned <em>only</em> if the requested variable cannot be found at all - this is an error case,
12221
12501
  and will generate warning logs.</p>
12222
12502
 
@@ -12228,14 +12508,14 @@ and will generate warning logs.</p>
12228
12508
 
12229
12509
 
12230
12510
  <h2 id="nautobot.apps.utils.get_table_for_model" class="doc doc-heading">
12231
- <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_table_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">)</span></code>
12511
+ <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_table_for_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
12232
12512
 
12233
12513
  <a href="#nautobot.apps.utils.get_table_for_model" class="headerlink" title="Permanent link">&para;</a></h2>
12234
12514
 
12235
12515
 
12236
12516
  <div class="doc doc-contents ">
12237
12517
 
12238
- <p>Return the <code>Table</code> class associated with a given <code>model</code>.</p>
12518
+ <p>Return the <code>Table</code> class associated with a given <code>model</code>.</p>
12239
12519
  <p>The <code>Table</code> class is expected to be in the <code>tables</code> module within the application
12240
12520
  associated with the model and its name is expected to be <code>{ModelName}Table</code>.</p>
12241
12521
  <p>If a matching <code>Table</code> is not found, this will return <code>None</code>.</p>
@@ -12253,9 +12533,11 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12253
12533
  </thead>
12254
12534
  <tbody>
12255
12535
  <tr class="doc-section-item">
12256
- <td><code>model</code></td>
12257
12536
  <td>
12258
- <code><autoref identifier="BaseModel" optional>BaseModel</autoref></code>
12537
+ <code>model</code>
12538
+ </td>
12539
+ <td>
12540
+ <code>BaseModel</code>
12259
12541
  </td>
12260
12542
  <td>
12261
12543
  <div class="doc-md-description">
@@ -12266,6 +12548,22 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12266
12548
  <em>required</em>
12267
12549
  </td>
12268
12550
  </tr>
12551
+ <tr class="doc-section-item">
12552
+ <td>
12553
+ <code>suffix</code>
12554
+ </td>
12555
+ <td>
12556
+ <code>str</code>
12557
+ </td>
12558
+ <td>
12559
+ <div class="doc-md-description">
12560
+ <p>A replacement suffix for the table name (e.g. <code>DetailTable</code>, such as to retrieve <code>FooDetailTable</code>)</p>
12561
+ </div>
12562
+ </td>
12563
+ <td>
12564
+ <code>None</code>
12565
+ </td>
12566
+ </tr>
12269
12567
  </tbody>
12270
12568
  </table>
12271
12569
 
@@ -12281,7 +12579,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12281
12579
  <tbody>
12282
12580
  <tr class="doc-section-item">
12283
12581
  <td>
12284
- <code><autoref identifier="Union" optional>Union</autoref>[<autoref identifier="Table" optional>Table</autoref>, None]</code>
12582
+ <code>Union[Table, None]</code>
12285
12583
  </td>
12286
12584
  <td>
12287
12585
  <div class="doc-md-description">
@@ -12307,7 +12605,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12307
12605
 
12308
12606
  <div class="doc doc-contents ">
12309
12607
 
12310
- <p>Given a URL pattern, construct a URL string that would match that pattern.</p>
12608
+ <p>Given a URL pattern, construct a URL string that would match that pattern.</p>
12311
12609
 
12312
12610
 
12313
12611
  <p><span class="doc-section-title">Examples:</span></p>
@@ -12332,7 +12630,7 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12332
12630
 
12333
12631
  <div class="doc doc-contents ">
12334
12632
 
12335
- <p>Recursively yield a list of registered URL patterns.</p>
12633
+ <p>Recursively yield a list of registered URL patterns.</p>
12336
12634
 
12337
12635
 
12338
12636
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12347,9 +12645,11 @@ associated with the model and its name is expected to be <code>{ModelName}Table<
12347
12645
  </thead>
12348
12646
  <tbody>
12349
12647
  <tr class="doc-section-item">
12350
- <td><code>urlconf</code></td>
12351
12648
  <td>
12352
- <code><autoref identifier="URLConf" optional>URLConf</autoref></code>
12649
+ <code>urlconf</code>
12650
+ </td>
12651
+ <td>
12652
+ <code>URLConf</code>
12353
12653
  </td>
12354
12654
  <td>
12355
12655
  <div class="doc-md-description">
@@ -12362,9 +12662,11 @@ Default if unspecified is the value of <code>settings.ROOT_URLCONF</code>, i.e.
12362
12662
  </td>
12363
12663
  </tr>
12364
12664
  <tr class="doc-section-item">
12365
- <td><code>patterns_list</code></td>
12366
12665
  <td>
12367
- <code><autoref identifier="list" optional>list</autoref></code>
12666
+ <code>patterns_list</code>
12667
+ </td>
12668
+ <td>
12669
+ <code>list</code>
12368
12670
  </td>
12369
12671
  <td>
12370
12672
  <div class="doc-md-description">
@@ -12377,9 +12679,11 @@ Default if unspecified is the <code>url_patterns</code> attribute of the given <
12377
12679
  </td>
12378
12680
  </tr>
12379
12681
  <tr class="doc-section-item">
12380
- <td><code>base_path</code></td>
12381
12682
  <td>
12382
- <code><autoref identifier="str" optional>str</autoref></code>
12683
+ <code>base_path</code>
12684
+ </td>
12685
+ <td>
12686
+ <code>str</code>
12383
12687
  </td>
12384
12688
  <td>
12385
12689
  <div class="doc-md-description">
@@ -12392,9 +12696,11 @@ Default if unspecified is the string <code>"/"</code>.</p>
12392
12696
  </td>
12393
12697
  </tr>
12394
12698
  <tr class="doc-section-item">
12395
- <td><code>ignore_redirects</code></td>
12396
12699
  <td>
12397
- <code><autoref identifier="bool" optional>bool</autoref></code>
12700
+ <code>ignore_redirects</code>
12701
+ </td>
12702
+ <td>
12703
+ <code>bool</code>
12398
12704
  </td>
12399
12705
  <td>
12400
12706
  <div class="doc-md-description">
@@ -12420,7 +12726,7 @@ Default if unspecified is the string <code>"/"</code>.</p>
12420
12726
  <tbody>
12421
12727
  <tr class="doc-section-item">
12422
12728
  <td>
12423
- <code><autoref identifier="str" optional>str</autoref></code>
12729
+ <code>str</code>
12424
12730
  </td>
12425
12731
  <td>
12426
12732
  <div class="doc-md-description">
@@ -12495,7 +12801,7 @@ Default if unspecified is the string <code>"/"</code>.</p>
12495
12801
 
12496
12802
  <div class="doc doc-contents ">
12497
12803
 
12498
- <p>Return the <code>UIViewSet</code> or <code>&lt;view_type&gt;View</code> class associated with a given <code>model</code>.</p>
12804
+ <p>Return the <code>UIViewSet</code> or <code>&lt;view_type&gt;View</code> class associated with a given <code>model</code>.</p>
12499
12805
  <p>The view class is expected to be in the <code>views</code> module within the app associated with the model,
12500
12806
  and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code>{ModelName}{view_type}View</code>.</p>
12501
12807
  <p>If neither view class is found, this will return <code>None</code>.</p>
@@ -12515,7 +12821,7 @@ and its name is expected to be either <code>{ModelName}UIViewSet</code> or <code
12515
12821
 
12516
12822
  <div class="doc doc-contents ">
12517
12823
 
12518
- <p>Return a count of the active Celery workers in a specified queue (Could be a JobQueue instance, instance pk or instance name).
12824
+ <p>Return a count of the active Celery workers in a specified queue (Could be a JobQueue instance, instance pk or instance name).
12519
12825
  Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12520
12826
 
12521
12827
  </div>
@@ -12533,7 +12839,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12533
12839
 
12534
12840
  <div class="doc doc-contents ">
12535
12841
 
12536
- <p>Map a hex string like "00ff00" to individual r, g, b integer values.</p>
12842
+ <p>Map a hex string like "00ff00" to individual r, g, b integer values.</p>
12537
12843
 
12538
12844
  </div>
12539
12845
 
@@ -12550,7 +12856,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12550
12856
 
12551
12857
  <div class="doc doc-contents ">
12552
12858
 
12553
- <p>Return a path for uploading image attachments.</p>
12859
+ <p>Return a path for uploading image attachments.</p>
12554
12860
 
12555
12861
  </div>
12556
12862
 
@@ -12567,7 +12873,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12567
12873
 
12568
12874
  <div class="doc doc-contents ">
12569
12875
 
12570
- <p>Validate whether a value is a URL.</p>
12876
+ <p>Validate whether a value is a URL.</p>
12571
12877
 
12572
12878
 
12573
12879
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12582,9 +12888,11 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12582
12888
  </thead>
12583
12889
  <tbody>
12584
12890
  <tr class="doc-section-item">
12585
- <td><code>value</code></td>
12586
12891
  <td>
12587
- <code><autoref identifier="str" optional>str</autoref></code>
12892
+ <code>value</code>
12893
+ </td>
12894
+ <td>
12895
+ <code>str</code>
12588
12896
  </td>
12589
12897
  <td>
12590
12898
  <div class="doc-md-description">
@@ -12610,7 +12918,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12610
12918
  <tbody>
12611
12919
  <tr class="doc-section-item">
12612
12920
  <td>
12613
- <code><autoref identifier="bool" optional>bool</autoref></code>
12921
+ <code>bool</code>
12614
12922
  </td>
12615
12923
  <td>
12616
12924
  <div class="doc-md-description">
@@ -12636,7 +12944,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12636
12944
 
12637
12945
  <div class="doc doc-contents ">
12638
12946
 
12639
- <p>Make a given RGB color lighter (closer to white).</p>
12947
+ <p>Make a given RGB color lighter (closer to white).</p>
12640
12948
 
12641
12949
  </div>
12642
12950
 
@@ -12653,7 +12961,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12653
12961
 
12654
12962
  <div class="doc doc-contents ">
12655
12963
 
12656
- <p>Merge two dicts into a new dict, but raise a ValueError if any key exists with differing values across both dicts.</p>
12964
+ <p>Merge two dicts into a new dict, but raise a ValueError if any key exists with differing values across both dicts.</p>
12657
12965
 
12658
12966
  </div>
12659
12967
 
@@ -12670,7 +12978,7 @@ Defaults to the <code>CELERY_TASK_DEFAULT_QUEUE</code> setting.</p>
12670
12978
 
12671
12979
  <div class="doc doc-contents ">
12672
12980
 
12673
- <p>When replacing a model, this will update references to the content type on related models such as tags and object changes.</p>
12981
+ <p>When replacing a model, this will update references to the content type on related models such as tags and object changes.</p>
12674
12982
  <p>Since this only updates the content type and not the primary key, this is typically only useful when migrating to a new model
12675
12983
  and preserving the old instance's primary key.</p>
12676
12984
 
@@ -12689,7 +12997,7 @@ and preserving the old instance's primary key.</p>
12689
12997
  <li>RelationshipAssociation.destination_type</li>
12690
12998
  <li>TaggedItem.content_type</li>
12691
12999
  </ul>
12692
- </details> <p>For these one-to-many and many-to-many relationships, the new content type is added
13000
+ </details> <p>For these one-to-many and many-to-many relationships, the new content type is added
12693
13001
  to the related model's content type list, but the old content type is not removed:
12694
13002
  - CustomField.content_types
12695
13003
  - JobButton.content_types
@@ -12714,9 +13022,11 @@ content types if an instance of the new model is using the tag.</p>
12714
13022
  </thead>
12715
13023
  <tbody>
12716
13024
  <tr class="doc-section-item">
12717
- <td><code>apps</code></td>
12718
13025
  <td>
12719
- <code><autoref identifier="obj" optional>obj</autoref></code>
13026
+ <code>apps</code>
13027
+ </td>
13028
+ <td>
13029
+ <code>obj</code>
12720
13030
  </td>
12721
13031
  <td>
12722
13032
  <div class="doc-md-description">
@@ -12728,9 +13038,11 @@ content types if an instance of the new model is using the tag.</p>
12728
13038
  </td>
12729
13039
  </tr>
12730
13040
  <tr class="doc-section-item">
12731
- <td><code>old_ct</code></td>
12732
13041
  <td>
12733
- <code><autoref identifier="obj" optional>obj</autoref></code>
13042
+ <code>old_ct</code>
13043
+ </td>
13044
+ <td>
13045
+ <code>obj</code>
12734
13046
  </td>
12735
13047
  <td>
12736
13048
  <div class="doc-md-description">
@@ -12742,9 +13054,11 @@ content types if an instance of the new model is using the tag.</p>
12742
13054
  </td>
12743
13055
  </tr>
12744
13056
  <tr class="doc-section-item">
12745
- <td><code>new_ct</code></td>
12746
13057
  <td>
12747
- <code><autoref identifier="obj" optional>obj</autoref></code>
13058
+ <code>new_ct</code>
13059
+ </td>
13060
+ <td>
13061
+ <code>obj</code>
12748
13062
  </td>
12749
13063
  <td>
12750
13064
  <div class="doc-md-description">
@@ -12773,7 +13087,7 @@ content types if an instance of the new model is using the tag.</p>
12773
13087
 
12774
13088
  <div class="doc doc-contents ">
12775
13089
 
12776
- <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>
13090
+ <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>
12777
13091
 
12778
13092
 
12779
13093
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -12788,9 +13102,11 @@ content types if an instance of the new model is using the tag.</p>
12788
13102
  </thead>
12789
13103
  <tbody>
12790
13104
  <tr class="doc-section-item">
12791
- <td><code>model_to_migrate</code></td>
12792
13105
  <td>
12793
- <code><autoref identifier="Model" optional>Model</autoref></code>
13106
+ <code>model_to_migrate</code>
13107
+ </td>
13108
+ <td>
13109
+ <code><span title="django.db.models.Model">Model</span></code>
12794
13110
  </td>
12795
13111
  <td>
12796
13112
  <div class="doc-md-description">
@@ -12802,9 +13118,11 @@ content types if an instance of the new model is using the tag.</p>
12802
13118
  </td>
12803
13119
  </tr>
12804
13120
  <tr class="doc-section-item">
12805
- <td><code>from_role_field_name</code></td>
12806
13121
  <td>
12807
- <code><autoref identifier="str" optional>str</autoref></code>
13122
+ <code>from_role_field_name</code>
13123
+ </td>
13124
+ <td>
13125
+ <code>str</code>
12808
13126
  </td>
12809
13127
  <td>
12810
13128
  <div class="doc-md-description">
@@ -12816,9 +13134,11 @@ content types if an instance of the new model is using the tag.</p>
12816
13134
  </td>
12817
13135
  </tr>
12818
13136
  <tr class="doc-section-item">
12819
- <td><code>from_role_model</code></td>
12820
13137
  <td>
12821
- <code><autoref identifier="Model" optional>Model</autoref></code>
13138
+ <code>from_role_model</code>
13139
+ </td>
13140
+ <td>
13141
+ <code><span title="django.db.models.Model">Model</span></code>
12822
13142
  </td>
12823
13143
  <td>
12824
13144
  <div class="doc-md-description">
@@ -12830,9 +13150,11 @@ content types if an instance of the new model is using the tag.</p>
12830
13150
  </td>
12831
13151
  </tr>
12832
13152
  <tr class="doc-section-item">
12833
- <td><code>from_role_choiceset</code></td>
12834
13153
  <td>
12835
- <code><autoref identifier="ChoiceSet" optional>ChoiceSet</autoref></code>
13154
+ <code>from_role_choiceset</code>
13155
+ </td>
13156
+ <td>
13157
+ <code>ChoiceSet</code>
12836
13158
  </td>
12837
13159
  <td>
12838
13160
  <div class="doc-md-description">
@@ -12844,9 +13166,11 @@ content types if an instance of the new model is using the tag.</p>
12844
13166
  </td>
12845
13167
  </tr>
12846
13168
  <tr class="doc-section-item">
12847
- <td><code>to_role_field_name</code></td>
12848
13169
  <td>
12849
- <code><autoref identifier="str" optional>str</autoref></code>
13170
+ <code>to_role_field_name</code>
13171
+ </td>
13172
+ <td>
13173
+ <code>str</code>
12850
13174
  </td>
12851
13175
  <td>
12852
13176
  <div class="doc-md-description">
@@ -12858,9 +13182,11 @@ content types if an instance of the new model is using the tag.</p>
12858
13182
  </td>
12859
13183
  </tr>
12860
13184
  <tr class="doc-section-item">
12861
- <td><code>to_role_model</code></td>
12862
13185
  <td>
12863
- <code><autoref identifier="Model" optional>Model</autoref></code>
13186
+ <code>to_role_model</code>
13187
+ </td>
13188
+ <td>
13189
+ <code><span title="django.db.models.Model">Model</span></code>
12864
13190
  </td>
12865
13191
  <td>
12866
13192
  <div class="doc-md-description">
@@ -12872,9 +13198,11 @@ content types if an instance of the new model is using the tag.</p>
12872
13198
  </td>
12873
13199
  </tr>
12874
13200
  <tr class="doc-section-item">
12875
- <td><code>to_role_choiceset</code></td>
12876
13201
  <td>
12877
- <code><autoref identifier="ChoiceSet" optional>ChoiceSet</autoref></code>
13202
+ <code>to_role_choiceset</code>
13203
+ </td>
13204
+ <td>
13205
+ <code>ChoiceSet</code>
12878
13206
  </td>
12879
13207
  <td>
12880
13208
  <div class="doc-md-description">
@@ -12886,9 +13214,11 @@ content types if an instance of the new model is using the tag.</p>
12886
13214
  </td>
12887
13215
  </tr>
12888
13216
  <tr class="doc-section-item">
12889
- <td><code>is_m2m_field</code></td>
12890
13217
  <td>
12891
- <code><autoref identifier="bool" optional>bool</autoref></code>
13218
+ <code>is_m2m_field</code>
13219
+ </td>
13220
+ <td>
13221
+ <code>bool</code>
12892
13222
  </td>
12893
13223
  <td>
12894
13224
  <div class="doc-md-description">
@@ -12910,22 +13240,111 @@ content types if an instance of the new model is using the tag.</p>
12910
13240
 
12911
13241
 
12912
13242
  <h2 id="nautobot.apps.utils.normalize_querydict" class="doc doc-heading">
12913
- <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>
13243
+ <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>
12914
13244
 
12915
13245
  <a href="#nautobot.apps.utils.normalize_querydict" class="headerlink" title="Permanent link">&para;</a></h2>
12916
13246
 
12917
13247
 
12918
13248
  <div class="doc doc-contents ">
12919
13249
 
12920
- <p>Convert a QueryDict to a normal, mutable dictionary, preserving list values. For example,</p>
12921
- <div class="highlight"><pre><span></span><code>QueryDict(&#39;foo=1&amp;bar=2&amp;bar=3&amp;baz=&#39;)
12922
- </code></pre></div>
12923
- <p>becomes:</p>
12924
- <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;}
12925
- </code></pre></div>
12926
- <p>This function is necessary because QueryDict does not provide any built-in mechanism which preserves multiple
12927
- values.</p>
12928
- <p>A <code>form_class</code> can be provided as a way to hint which query parameters should be treated as lists.</p>
13250
+ <p>Converts a QueryDict into a standard, mutable dictionary while preserving multiple values as lists.</p>
13251
+
13252
+
13253
+ <details class="example" open>
13254
+ <summary>Example</summary>
13255
+ <p>A QueryDict like:
13256
+ QueryDict('foo=1&amp;bar=2&amp;bar=3&amp;baz=')</p>
13257
+ <p _="''" _1_="'1'," _2_="['2'," _3_="'3']," _bar_:="'bar':" _baz_:="'baz':" _foo_:="'foo':">Converts to:</p>
13258
+ </details> <p>This function ensures that fields with multiple values are handled correctly, as QueryDict
13259
+ does not inherently preserve multiple values as lists.</p>
13260
+
13261
+
13262
+ <p><span class="doc-section-title">Parameters:</span></p>
13263
+ <table>
13264
+ <thead>
13265
+ <tr>
13266
+ <th>Name</th>
13267
+ <th>Type</th>
13268
+ <th>Description</th>
13269
+ <th>Default</th>
13270
+ </tr>
13271
+ </thead>
13272
+ <tbody>
13273
+ <tr class="doc-section-item">
13274
+ <td>
13275
+ <code>querydict</code>
13276
+ </td>
13277
+ <td>
13278
+ <code><span title="django.http.QueryDict">QueryDict</span></code>
13279
+ </td>
13280
+ <td>
13281
+ <div class="doc-md-description">
13282
+ <p>The QueryDict to be normalized.</p>
13283
+ </div>
13284
+ </td>
13285
+ <td>
13286
+ <em>required</em>
13287
+ </td>
13288
+ </tr>
13289
+ <tr class="doc-section-item">
13290
+ <td>
13291
+ <code>form_class</code>
13292
+ </td>
13293
+ <td>
13294
+ <code><span title="django.forms.Form">Form</span></code>
13295
+ </td>
13296
+ <td>
13297
+ <div class="doc-md-description">
13298
+ <p>A form class to identify fields that should be treated as
13299
+ lists (e.g., <code>MultipleChoiceField</code> or <code>ModelMultipleChoiceField</code>).</p>
13300
+ </div>
13301
+ </td>
13302
+ <td>
13303
+ <code>None</code>
13304
+ </td>
13305
+ </tr>
13306
+ <tr class="doc-section-item">
13307
+ <td>
13308
+ <code>filterset</code>
13309
+ </td>
13310
+ <td>
13311
+ <code><span title="django_filters.FilterSet">FilterSet</span></code>
13312
+ </td>
13313
+ <td>
13314
+ <div class="doc-md-description">
13315
+ <p>A FilterSet instance to identify filters that
13316
+ should preserve multiple values as lists (e.g., non-single-choice fields).</p>
13317
+ </div>
13318
+ </td>
13319
+ <td>
13320
+ <code>None</code>
13321
+ </td>
13322
+ </tr>
13323
+ </tbody>
13324
+ </table>
13325
+
13326
+
13327
+ <p><span class="doc-section-title">Raises:</span></p>
13328
+ <table>
13329
+ <thead>
13330
+ <tr>
13331
+ <th>Type</th>
13332
+ <th>Description</th>
13333
+ </tr>
13334
+ </thead>
13335
+ <tbody>
13336
+ <tr class="doc-section-item">
13337
+ <td>
13338
+ <code>AttributeError</code>
13339
+ </td>
13340
+ <td>
13341
+ <div class="doc-md-description">
13342
+ <p>If both <code>form_class</code> and <code>filterset</code> are provided.</p>
13343
+ </div>
13344
+ </td>
13345
+ </tr>
13346
+ </tbody>
13347
+ </table>
12929
13348
 
12930
13349
  </div>
12931
13350
 
@@ -12942,7 +13361,7 @@ values.</p>
12942
13361
 
12943
13362
  <div class="doc doc-contents ">
12944
13363
 
12945
- <p>Determine whether a specified permission is exempt from evaluation.</p>
13364
+ <p>Determine whether a specified permission is exempt from evaluation.</p>
12946
13365
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
12947
13366
 
12948
13367
  </div>
@@ -12960,7 +13379,7 @@ values.</p>
12960
13379
 
12961
13380
  <div class="doc doc-contents ">
12962
13381
 
12963
- <p>Populate the registry model features with new apps.</p>
13382
+ <p>Populate the registry model features with new apps.</p>
12964
13383
  <p>This function updates the registry model features.</p>
12965
13384
  <p>Behavior:
12966
13385
  - Defines a list of dictionaries called lookup_confs. Each dictionary contains:
@@ -12993,7 +13412,7 @@ values.</p>
12993
13412
 
12994
13413
  <div class="doc doc-contents ">
12995
13414
 
12996
- <p>Create or update a job_model record based on the metadata of the provided job_class.</p>
13415
+ <p>Create or update a job_model record based on the metadata of the provided job_class.</p>
12997
13416
  <p>Note that <code>job_model_class</code> and <code>job_queue_class</code> are parameters rather than local imports because
12998
13417
  this function may be called from various initialization processes (such as the "nautobot_database_ready" signal)
12999
13418
  and in that case we need to not import models ourselves.</p>
@@ -13016,7 +13435,7 @@ be calling the two-argument form of this function.</p>
13016
13435
 
13017
13436
  <div class="doc doc-contents ">
13018
13437
 
13019
- <p>field_name (str): f"cf_{cf.key}"</p>
13438
+ <p>field_name (str): f"cf_{cf.key}"</p>
13020
13439
  <p>Helper method to remove the "cf_" prefix</p>
13021
13440
 
13022
13441
  </div>
@@ -13034,7 +13453,7 @@ be calling the two-argument form of this function.</p>
13034
13453
 
13035
13454
  <div class="doc doc-contents ">
13036
13455
 
13037
- <p>Render a Jinja2 template with the provided context. Return the rendered content.</p>
13456
+ <p>Render a Jinja2 template with the provided context. Return the rendered content.</p>
13038
13457
 
13039
13458
  </div>
13040
13459
 
@@ -13051,7 +13470,7 @@ be calling the two-argument form of this function.</p>
13051
13470
 
13052
13471
  <div class="doc doc-contents ">
13053
13472
 
13054
- <p>Given a permission name, return the app_label, action, and model_name components. For example, "dcim.view_location"
13473
+ <p>Given a permission name, return the app_label, action, and model_name components. For example, "dcim.view_location"
13055
13474
  returns ("dcim", "view", "location").</p>
13056
13475
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
13057
13476
 
@@ -13070,7 +13489,7 @@ returns ("dcim", "view", "location").</p>
13070
13489
 
13071
13490
  <div class="doc doc-contents ">
13072
13491
 
13073
- <p>Given a permission name, return the relevant ContentType and action. For example, "dcim.view_location" returns
13492
+ <p>Given a permission name, return the relevant ContentType and action. For example, "dcim.view_location" returns
13074
13493
  (Location, "view").</p>
13075
13494
  <p>:param name: Permission name in the format <app_label>.<action>_<model></p>
13076
13495
 
@@ -13089,7 +13508,7 @@ returns ("dcim", "view", "location").</p>
13089
13508
 
13090
13509
  <div class="doc doc-contents ">
13091
13510
 
13092
- <p>Map r, g, b values to a hex string.</p>
13511
+ <p>Map r, g, b values to a hex string.</p>
13093
13512
 
13094
13513
  </div>
13095
13514
 
@@ -13106,7 +13525,7 @@ returns ("dcim", "view", "location").</p>
13106
13525
 
13107
13526
  <div class="doc doc-contents ">
13108
13527
 
13109
- <p>Make an attempt at stripping potentially-sensitive information from the given string, bytes or iterable thereof.</p>
13528
+ <p>Make an attempt at stripping potentially-sensitive information from the given string, bytes or iterable thereof.</p>
13110
13529
  <p>Obviously this will never be 100% foolproof but we can at least try.</p>
13111
13530
  <p>Uses settings.SANITIZER_PATTERNS as the list of (regexp, repl) tuples to apply.</p>
13112
13531
 
@@ -13125,7 +13544,7 @@ returns ("dcim", "view", "location").</p>
13125
13544
 
13126
13545
  <div class="doc doc-contents ">
13127
13546
 
13128
- <p>Return a new dictionary of the different keys. The values of <code>destination_dict</code> are returned. Only the equality of
13547
+ <p>Return a new dictionary of the different keys. The values of <code>destination_dict</code> are returned. Only the equality of
13129
13548
  the first layer of keys/values is checked. <code>exclude</code> is a list or tuple of keys to be ignored.</p>
13130
13549
 
13131
13550
  </div>
@@ -13143,7 +13562,7 @@ the first layer of keys/values is checked. <code>exclude</code> is a list or tup
13143
13562
 
13144
13563
  <div class="doc doc-contents ">
13145
13564
 
13146
- <p>Swap Git status initials with its equivalent.</p>
13565
+ <p>Swap Git status initials with its equivalent.</p>
13147
13566
 
13148
13567
  </div>
13149
13568
 
@@ -13160,7 +13579,7 @@ the first layer of keys/values is checked. <code>exclude</code> is a list or tup
13160
13579
 
13161
13580
  <div class="doc doc-contents ">
13162
13581
 
13163
- <p>Returns a list of 2-tuples for use in the form field <code>choices</code> argument. Appends
13582
+ <p>Returns a list of 2-tuples for use in the form field <code>choices</code> argument. Appends
13164
13583
  worker count to the description.</p>
13165
13584
 
13166
13585
  </div>
@@ -13178,7 +13597,7 @@ worker count to the description.</p>
13178
13597
 
13179
13598
  <div class="doc doc-contents ">
13180
13599
 
13181
- <p>Convert the given length to meters.</p>
13600
+ <p>Convert the given length to meters.</p>
13182
13601
 
13183
13602
  </div>
13184
13603
 
@@ -13195,7 +13614,7 @@ worker count to the description.</p>
13195
13614
 
13196
13615
  <div class="doc doc-contents ">
13197
13616
 
13198
- <p>Helper function that wraps plugin model validator registered clean methods for all applicable models</p>
13617
+ <p>Helper function that wraps plugin model validator registered clean methods for all applicable models</p>
13199
13618
 
13200
13619
  </div>
13201
13620
 
@@ -13304,7 +13723,7 @@ worker count to the description.</p>
13304
13723
 
13305
13724
 
13306
13725
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
13307
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
13726
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
13308
13727
  </a>
13309
13728
 
13310
13729
 
@@ -13312,7 +13731,7 @@ worker count to the description.</p>
13312
13731
 
13313
13732
 
13314
13733
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
13315
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
13734
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
13316
13735
  </a>
13317
13736
 
13318
13737
 
@@ -13320,7 +13739,7 @@ worker count to the description.</p>
13320
13739
 
13321
13740
 
13322
13741
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
13323
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
13742
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
13324
13743
  </a>
13325
13744
 
13326
13745
 
@@ -13328,7 +13747,7 @@ worker count to the description.</p>
13328
13747
 
13329
13748
 
13330
13749
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
13331
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
13750
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
13332
13751
  </a>
13333
13752
 
13334
13753
 
@@ -13336,7 +13755,7 @@ worker count to the description.</p>
13336
13755
 
13337
13756
 
13338
13757
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
13339
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
13758
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
13340
13759
  </a>
13341
13760
 
13342
13761
  </div>
@@ -13351,10 +13770,10 @@ worker count to the description.</p>
13351
13770
  </div>
13352
13771
 
13353
13772
 
13354
- <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>
13773
+ <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.f8cc74c7.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>
13355
13774
 
13356
13775
 
13357
- <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
13776
+ <script src="../../../assets/javascripts/bundle.60a45f97.min.js"></script>
13358
13777
 
13359
13778
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
13360
13779