nautobot 2.1.0__py3-none-any.whl → 2.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. nautobot/__init__.py +1 -3
  2. nautobot/apps/__init__.py +1 -2
  3. nautobot/apps/admin.py +0 -1
  4. nautobot/apps/api.py +0 -1
  5. nautobot/apps/change_logging.py +0 -1
  6. nautobot/apps/choices.py +0 -1
  7. nautobot/apps/datasources.py +0 -1
  8. nautobot/apps/exceptions.py +0 -1
  9. nautobot/apps/factory.py +0 -1
  10. nautobot/apps/filters.py +6 -9
  11. nautobot/apps/forms.py +1 -2
  12. nautobot/apps/graphql.py +0 -1
  13. nautobot/apps/jobs.py +0 -1
  14. nautobot/apps/models.py +1 -2
  15. nautobot/apps/querysets.py +0 -1
  16. nautobot/apps/secrets.py +0 -1
  17. nautobot/apps/tables.py +0 -1
  18. nautobot/apps/testing.py +0 -1
  19. nautobot/apps/ui.py +1 -3
  20. nautobot/apps/urls.py +0 -1
  21. nautobot/apps/utils.py +0 -1
  22. nautobot/apps/views.py +0 -1
  23. nautobot/circuits/api/serializers.py +1 -1
  24. nautobot/circuits/api/urls.py +1 -1
  25. nautobot/circuits/api/views.py +2 -1
  26. nautobot/circuits/apps.py +1 -1
  27. nautobot/circuits/choices.py +0 -1
  28. nautobot/circuits/factory.py +1 -1
  29. nautobot/circuits/filters.py +2 -1
  30. nautobot/circuits/forms.py +2 -2
  31. nautobot/circuits/homepage.py +0 -1
  32. nautobot/circuits/migrations/0001_initial_part_1.py +3 -1
  33. nautobot/circuits/migrations/0002_initial_part_2.py +2 -1
  34. nautobot/circuits/migrations/0003_auto_slug.py +1 -0
  35. nautobot/circuits/migrations/0005_providernetwork.py +4 -2
  36. nautobot/circuits/migrations/0013_alter_circuittermination__path.py +1 -0
  37. nautobot/circuits/migrations/0014_related_name_changes.py +1 -0
  38. nautobot/circuits/migrations/0016_tagsfield.py +1 -0
  39. nautobot/circuits/migrations/0018_status_nonnullable.py +1 -0
  40. nautobot/circuits/models.py +2 -2
  41. nautobot/circuits/navigation.py +0 -1
  42. nautobot/circuits/signals.py +3 -2
  43. nautobot/circuits/tables.py +1 -0
  44. nautobot/circuits/tests/integration/test_relationships.py +1 -1
  45. nautobot/circuits/tests/test_api.py +1 -1
  46. nautobot/circuits/tests/test_urls.py +1 -1
  47. nautobot/circuits/tests/test_views.py +1 -0
  48. nautobot/circuits/urls.py +1 -1
  49. nautobot/circuits/views.py +0 -2
  50. nautobot/core/__init__.py +0 -1
  51. nautobot/core/admin.py +3 -5
  52. nautobot/core/api/__init__.py +0 -1
  53. nautobot/core/api/metadata.py +4 -6
  54. nautobot/core/api/pagination.py +2 -2
  55. nautobot/core/api/parsers.py +1 -3
  56. nautobot/core/api/renderers.py +0 -1
  57. nautobot/core/api/schema.py +2 -3
  58. nautobot/core/api/serializers.py +9 -7
  59. nautobot/core/api/urls.py +1 -5
  60. nautobot/core/api/utils.py +4 -6
  61. nautobot/core/api/versioning.py +1 -1
  62. nautobot/core/api/views.py +22 -91
  63. nautobot/core/apps/__init__.py +5 -7
  64. nautobot/core/authentication.py +1 -1
  65. nautobot/core/celery/__init__.py +1 -2
  66. nautobot/core/celery/control.py +0 -2
  67. nautobot/core/celery/encoders.py +0 -1
  68. nautobot/core/celery/schedulers.py +1 -2
  69. nautobot/core/celery/task.py +1 -1
  70. nautobot/core/checks.py +1 -2
  71. nautobot/core/choices.py +2 -2
  72. nautobot/core/cli/__init__.py +2 -3
  73. nautobot/core/context_processors.py +1 -5
  74. nautobot/core/factory.py +2 -2
  75. nautobot/core/filters.py +1 -1
  76. nautobot/core/forms/fields.py +2 -4
  77. nautobot/core/forms/forms.py +1 -1
  78. nautobot/core/forms/search.py +1 -1
  79. nautobot/core/forms/utils.py +1 -1
  80. nautobot/core/graphql/__init__.py +2 -3
  81. nautobot/core/graphql/generators.py +1 -1
  82. nautobot/core/graphql/schema.py +6 -7
  83. nautobot/core/graphql/schema_init.py +0 -1
  84. nautobot/core/graphql/utils.py +1 -2
  85. nautobot/core/management/commands/generate_test_data.py +4 -6
  86. nautobot/core/management/commands/makemigrations.py +1 -1
  87. nautobot/core/management/commands/migrate.py +1 -1
  88. nautobot/core/management/commands/post_upgrade.py +0 -15
  89. nautobot/core/management/commands/refresh_content_type_cache.py +1 -2
  90. nautobot/core/management/commands/send_installation_metrics.py +2 -3
  91. nautobot/core/management/commands/validate_models.py +1 -1
  92. nautobot/core/middleware.py +2 -2
  93. nautobot/core/models/__init__.py +12 -12
  94. nautobot/core/models/fields.py +1 -1
  95. nautobot/core/models/generics.py +2 -3
  96. nautobot/core/models/managers.py +0 -1
  97. nautobot/core/models/name_color_content_types.py +2 -2
  98. nautobot/core/models/tree_queries.py +2 -4
  99. nautobot/core/models/validators.py +1 -1
  100. nautobot/core/releases.py +1 -1
  101. nautobot/core/runner/importer.py +2 -25
  102. nautobot/core/runner/runner.py +2 -2
  103. nautobot/core/runner/settings.py +1 -1
  104. nautobot/core/settings.py +9 -22
  105. nautobot/core/settings_funcs.py +1 -2
  106. nautobot/core/signals.py +0 -1
  107. nautobot/core/tables.py +1 -1
  108. nautobot/core/templates/graphene/graphiql.html +7 -1
  109. nautobot/core/templates/inc/footer.html +0 -7
  110. nautobot/core/templates/nautobot_config.py.j2 +0 -4
  111. nautobot/core/templatetags/bootstrapped_goodies_tags.py +6 -3
  112. nautobot/core/templatetags/buttons.py +1 -1
  113. nautobot/core/templatetags/helpers.py +5 -16
  114. nautobot/core/testing/__init__.py +1 -2
  115. nautobot/core/testing/api.py +2 -4
  116. nautobot/core/testing/filters.py +1 -1
  117. nautobot/core/testing/integration.py +2 -2
  118. nautobot/core/testing/migrations.py +1 -0
  119. nautobot/core/testing/mixins.py +1 -2
  120. nautobot/core/testing/schema.py +1 -1
  121. nautobot/core/testing/utils.py +3 -3
  122. nautobot/core/testing/views.py +4 -7
  123. nautobot/core/tests/integration/test_plugin_home.py +2 -1
  124. nautobot/core/tests/integration/test_plugin_navbar.py +1 -1
  125. nautobot/core/tests/nautobot_config.py +3 -3
  126. nautobot/core/tests/runner.py +3 -4
  127. nautobot/core/tests/test_api.py +6 -51
  128. nautobot/core/tests/test_authentication.py +2 -3
  129. nautobot/core/tests/test_checks.py +1 -2
  130. nautobot/core/tests/test_config.py +1 -1
  131. nautobot/core/tests/test_csv.py +3 -3
  132. nautobot/core/tests/test_factory.py +1 -3
  133. nautobot/core/tests/test_filters.py +3 -7
  134. nautobot/core/tests/test_forms.py +3 -6
  135. nautobot/core/tests/test_graphql.py +13 -14
  136. nautobot/core/tests/test_jinja_filters.py +4 -4
  137. nautobot/core/tests/test_jobs.py +1 -1
  138. nautobot/core/tests/test_models.py +1 -2
  139. nautobot/core/tests/test_navigations.py +2 -1
  140. nautobot/core/tests/test_openapi.py +0 -1
  141. nautobot/core/tests/test_paginator.py +2 -2
  142. nautobot/core/tests/test_releases.py +2 -2
  143. nautobot/core/tests/test_tables.py +1 -1
  144. nautobot/core/tests/test_templatetags_helpers.py +3 -2
  145. nautobot/core/tests/test_templatetags_netutils.py +1 -2
  146. nautobot/core/tests/test_utils.py +4 -8
  147. nautobot/core/tests/test_views.py +5 -2
  148. nautobot/core/tests/test_views_utils.py +0 -1
  149. nautobot/core/urls.py +4 -4
  150. nautobot/core/utils/color.py +1 -1
  151. nautobot/core/utils/data.py +1 -2
  152. nautobot/core/utils/filtering.py +4 -5
  153. nautobot/core/utils/git.py +3 -2
  154. nautobot/core/utils/logging.py +2 -1
  155. nautobot/core/utils/migrations.py +1 -0
  156. nautobot/core/utils/permissions.py +2 -4
  157. nautobot/core/views/__init__.py +5 -5
  158. nautobot/core/views/generic.py +4 -4
  159. nautobot/core/views/mixins.py +11 -12
  160. nautobot/core/views/renderers.py +1 -1
  161. nautobot/core/views/utils.py +2 -1
  162. nautobot/dcim/api/urls.py +1 -1
  163. nautobot/dcim/api/views.py +6 -5
  164. nautobot/dcim/apps.py +1 -1
  165. nautobot/dcim/choices.py +0 -1
  166. nautobot/dcim/constants.py +0 -1
  167. nautobot/dcim/elevations.py +1 -2
  168. nautobot/dcim/factory.py +10 -13
  169. nautobot/dcim/fields.py +1 -0
  170. nautobot/dcim/filters/__init__.py +2 -3
  171. nautobot/dcim/filters/mixins.py +1 -1
  172. nautobot/dcim/forms.py +10 -12
  173. nautobot/dcim/graphql/types.py +16 -17
  174. nautobot/dcim/migrations/0001_initial_part_1.py +4 -2
  175. nautobot/dcim/migrations/0002_initial_part_2.py +2 -1
  176. nautobot/dcim/migrations/0003_initial_part_3.py +2 -1
  177. nautobot/dcim/migrations/0004_initial_part_4.py +2 -1
  178. nautobot/dcim/migrations/0006_auto_slug.py +1 -0
  179. nautobot/dcim/migrations/0009_add_natural_indexing.py +1 -0
  180. nautobot/dcim/migrations/0010_interface_status.py +1 -0
  181. nautobot/dcim/migrations/0011_interface_status_data_migration.py +1 -0
  182. nautobot/dcim/migrations/0013_location_location_type.py +4 -2
  183. nautobot/dcim/migrations/0014_location_status_data_migration.py +1 -0
  184. nautobot/dcim/migrations/0016_device_components__timestamp_data_migration.py +0 -1
  185. nautobot/dcim/migrations/0018_device_redundancy_group.py +4 -2
  186. nautobot/dcim/migrations/0019_device_redundancy_group_data_migration.py +1 -0
  187. nautobot/dcim/migrations/0022_interface_redundancy_group.py +3 -1
  188. nautobot/dcim/migrations/0023_interface_redundancy_group_data_migration.py +1 -0
  189. nautobot/dcim/migrations/0024_move_site_fields_to_location_model.py +2 -1
  190. nautobot/dcim/migrations/0027_alter_interface_mac_address.py +1 -0
  191. nautobot/dcim/migrations/0028_alter_device_and_rack_role_add_new_role.py +1 -0
  192. nautobot/dcim/migrations/0029_device_and_rack_roles_data_migrations.py +1 -0
  193. nautobot/dcim/migrations/0033_add_tree_managers_and_foreign_keys_pre_data_migration.py +1 -0
  194. nautobot/dcim/migrations/0034_migrate_region_and_site_data_to_locations.py +1 -2
  195. nautobot/dcim/migrations/0038_fixup_fks_and_related_names.py +1 -0
  196. nautobot/dcim/migrations/0039_related_name_changes.py +1 -0
  197. nautobot/dcim/migrations/0042_alter_location_managers.py +1 -0
  198. nautobot/dcim/migrations/0044_tagsfield.py +1 -0
  199. nautobot/dcim/migrations/0047_status_nonnullable.py +1 -0
  200. nautobot/dcim/migrations/0051_interface_redundancy_group_nullable_status.py +1 -0
  201. nautobot/dcim/models/cables.py +3 -3
  202. nautobot/dcim/models/device_component_templates.py +6 -6
  203. nautobot/dcim/models/devices.py +9 -4
  204. nautobot/dcim/models/locations.py +6 -1
  205. nautobot/dcim/models/power.py +1 -1
  206. nautobot/dcim/models/racks.py +5 -4
  207. nautobot/dcim/navigation.py +0 -1
  208. nautobot/dcim/signals.py +3 -2
  209. nautobot/dcim/tables/__init__.py +5 -4
  210. nautobot/dcim/tables/cables.py +1 -0
  211. nautobot/dcim/tables/devices.py +1 -0
  212. nautobot/dcim/tables/power.py +1 -0
  213. nautobot/dcim/tables/racks.py +2 -1
  214. nautobot/dcim/tests/test_api.py +5 -7
  215. nautobot/dcim/tests/test_cablepaths.py +0 -1
  216. nautobot/dcim/tests/test_filters.py +14 -12
  217. nautobot/dcim/tests/test_forms.py +2 -3
  218. nautobot/dcim/tests/test_migrations.py +2 -2
  219. nautobot/dcim/tests/test_models.py +2 -2
  220. nautobot/dcim/tests/test_views.py +7 -8
  221. nautobot/dcim/urls.py +3 -2
  222. nautobot/dcim/utils.py +1 -1
  223. nautobot/dcim/views.py +4 -3
  224. nautobot/extras/admin.py +2 -1
  225. nautobot/extras/api/customfields.py +0 -2
  226. nautobot/extras/api/mixins.py +0 -1
  227. nautobot/extras/api/serializers.py +4 -4
  228. nautobot/extras/api/urls.py +1 -1
  229. nautobot/extras/api/views.py +1 -1
  230. nautobot/extras/apps.py +3 -4
  231. nautobot/extras/choices.py +3 -4
  232. nautobot/extras/context_managers.py +1 -1
  233. nautobot/extras/datasources/__init__.py +1 -1
  234. nautobot/extras/datasources/git.py +6 -6
  235. nautobot/extras/datasources/utils.py +0 -1
  236. nautobot/extras/factory.py +1 -1
  237. nautobot/extras/filters/__init__.py +2 -3
  238. nautobot/extras/filters/customfields.py +0 -1
  239. nautobot/extras/filters/mixins.py +1 -1
  240. nautobot/extras/forms/__init__.py +3 -4
  241. nautobot/extras/forms/base.py +1 -1
  242. nautobot/extras/forms/forms.py +3 -3
  243. nautobot/extras/forms/mixins.py +1 -1
  244. nautobot/extras/graphql/types.py +2 -2
  245. nautobot/extras/health_checks.py +1 -1
  246. nautobot/extras/jobs.py +1 -2
  247. nautobot/extras/management/__init__.py +0 -1
  248. nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -1
  249. nautobot/extras/management/commands/runjob.py +3 -3
  250. nautobot/extras/management/commands/webhook_receiver.py +1 -2
  251. nautobot/extras/migrations/0001_initial_part_1.py +2 -1
  252. nautobot/extras/migrations/0002_initial_part_2.py +2 -1
  253. nautobot/extras/migrations/0003_initial_part_3.py +1 -0
  254. nautobot/extras/migrations/0006_graphqlquery.py +2 -1
  255. nautobot/extras/migrations/0007_configcontextschema.py +3 -1
  256. nautobot/extras/migrations/0009_computedfield.py +3 -1
  257. nautobot/extras/migrations/0011_fileattachment_fileproxy.py +3 -1
  258. nautobot/extras/migrations/0012_healthchecktestmodel.py +2 -1
  259. nautobot/extras/migrations/0014_auto_slug.py +1 -0
  260. nautobot/extras/migrations/0015_scheduled_job.py +3 -1
  261. nautobot/extras/migrations/0016_secret.py +4 -2
  262. nautobot/extras/migrations/0017_joblogentry.py +2 -1
  263. nautobot/extras/migrations/0018_joblog_data_migration.py +2 -1
  264. nautobot/extras/migrations/0021_customfield_changelog_data.py +3 -2
  265. nautobot/extras/migrations/0022_objectchange_object_datav2.py +1 -0
  266. nautobot/extras/migrations/0023_job_model.py +4 -2
  267. nautobot/extras/migrations/0026_job_add_gitrepository_fk.py +1 -0
  268. nautobot/extras/migrations/0029_dynamicgroup.py +3 -1
  269. nautobot/extras/migrations/0031_tag_content_types.py +1 -0
  270. nautobot/extras/migrations/0032_tag_content_types_data_migration.py +1 -0
  271. nautobot/extras/migrations/0040_dynamicgroup__dynamicgroupmembership.py +2 -1
  272. nautobot/extras/migrations/0041_jobresult_job_kwargs.py +1 -0
  273. nautobot/extras/migrations/0043_note.py +3 -1
  274. nautobot/extras/migrations/0044_add_job_hook.py +3 -1
  275. nautobot/extras/migrations/0046_populate_custom_field_slug_label.py +1 -0
  276. nautobot/extras/migrations/0047_enforce_custom_field_slug.py +1 -0
  277. nautobot/extras/migrations/0051_add_job_task_queues.py +1 -0
  278. nautobot/extras/migrations/0055_configcontext_dynamic_groups.py +1 -0
  279. nautobot/extras/migrations/0057_jobbutton.py +3 -1
  280. nautobot/extras/migrations/0065_configcontext_data_migrations.py +1 -0
  281. nautobot/extras/migrations/0067_migrate_job_result_status.py +0 -1
  282. nautobot/extras/migrations/0068_jobresult__add_celery_fields.py +1 -0
  283. nautobot/extras/migrations/0071_replace_related_names.py +1 -0
  284. nautobot/extras/migrations/0077_migrate_custom_field_data.py +1 -0
  285. nautobot/extras/migrations/0078_remove_name_field_and_make_label_field_non_nullable.py +1 -0
  286. nautobot/extras/migrations/0080_tagsfield.py +1 -0
  287. nautobot/extras/migrations/0082_rename_relationship_name_to_label.py +1 -0
  288. nautobot/extras/migrations/0083_ensure_relationship_keys_are_unique.py +1 -0
  289. nautobot/extras/migrations/0090_joblogentry__log_level_data_migration.py +0 -1
  290. nautobot/extras/migrations/0095_ensure_note_timestamps_are_unique.py +4 -5
  291. nautobot/extras/migrations/0097_alter_job_result_remove_result.py +1 -0
  292. nautobot/extras/migrations/0100_fileproxy_job_result.py +1 -0
  293. nautobot/extras/migrations/0101_externalintegration.py +3 -1
  294. nautobot/extras/models/__init__.py +2 -3
  295. nautobot/extras/models/change_logging.py +0 -1
  296. nautobot/extras/models/customfields.py +4 -4
  297. nautobot/extras/models/datasources.py +2 -2
  298. nautobot/extras/models/groups.py +3 -4
  299. nautobot/extras/models/jobs.py +12 -6
  300. nautobot/extras/models/models.py +2 -2
  301. nautobot/extras/models/relationships.py +3 -4
  302. nautobot/extras/models/roles.py +1 -1
  303. nautobot/extras/models/secrets.py +1 -3
  304. nautobot/extras/models/tags.py +0 -1
  305. nautobot/extras/navigation.py +0 -1
  306. nautobot/extras/plugins/__init__.py +6 -7
  307. nautobot/extras/plugins/tables.py +0 -1
  308. nautobot/extras/plugins/utils.py +1 -1
  309. nautobot/extras/plugins/views.py +1 -2
  310. nautobot/extras/querysets.py +3 -3
  311. nautobot/extras/signals.py +6 -7
  312. nautobot/extras/tables.py +4 -4
  313. nautobot/extras/tasks.py +1 -2
  314. nautobot/extras/templates/extras/configcontext_edit.html +1 -1
  315. nautobot/extras/templates/extras/graphqlquery.html +4 -2
  316. nautobot/extras/templates/extras/secretsgroup_edit.html +40 -45
  317. nautobot/extras/templatetags/custom_links.py +2 -3
  318. nautobot/extras/templatetags/job_buttons.py +2 -3
  319. nautobot/extras/templatetags/log_levels.py +0 -1
  320. nautobot/extras/templatetags/plugins.py +1 -1
  321. nautobot/extras/test_jobs/api_test_job.py +1 -2
  322. nautobot/extras/test_jobs/atomic_transaction.py +1 -2
  323. nautobot/extras/test_jobs/dry_run.py +1 -2
  324. nautobot/extras/test_jobs/fail.py +1 -2
  325. nautobot/extras/test_jobs/field_order.py +1 -1
  326. nautobot/extras/test_jobs/file_upload_fail.py +1 -2
  327. nautobot/extras/test_jobs/file_upload_pass.py +1 -2
  328. nautobot/extras/test_jobs/has_sensitive_variables.py +1 -2
  329. nautobot/extras/test_jobs/ipaddress_vars.py +1 -4
  330. nautobot/extras/test_jobs/job_button_receiver.py +1 -2
  331. nautobot/extras/test_jobs/job_hook_receiver.py +1 -2
  332. nautobot/extras/test_jobs/job_variables.py +1 -2
  333. nautobot/extras/test_jobs/location_with_custom_field.py +1 -2
  334. nautobot/extras/test_jobs/log_redaction.py +1 -2
  335. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -2
  336. nautobot/extras/test_jobs/modify_db.py +1 -2
  337. nautobot/extras/test_jobs/object_var_optional.py +1 -2
  338. nautobot/extras/test_jobs/object_var_required.py +1 -2
  339. nautobot/extras/test_jobs/object_vars.py +1 -2
  340. nautobot/extras/test_jobs/pass.py +1 -2
  341. nautobot/extras/test_jobs/profiling.py +1 -2
  342. nautobot/extras/tests/integration/__init__.py +1 -1
  343. nautobot/extras/tests/integration/test_plugins.py +5 -4
  344. nautobot/extras/tests/integration/test_tagfilter.py +1 -1
  345. nautobot/extras/tests/test_api.py +7 -9
  346. nautobot/extras/tests/test_changelog.py +3 -2
  347. nautobot/extras/tests/test_context_managers.py +6 -3
  348. nautobot/extras/tests/test_customfields.py +2 -2
  349. nautobot/extras/tests/test_datasources.py +1 -1
  350. nautobot/extras/tests/test_dynamicgroups.py +2 -3
  351. nautobot/extras/tests/test_filters.py +2 -2
  352. nautobot/extras/tests/test_forms.py +5 -6
  353. nautobot/extras/tests/test_git.py +1 -1
  354. nautobot/extras/tests/test_job_variables.py +0 -1
  355. nautobot/extras/tests/test_jobs.py +5 -5
  356. nautobot/extras/tests/test_models.py +2 -2
  357. nautobot/extras/tests/test_notes.py +0 -1
  358. nautobot/extras/tests/test_plugins.py +8 -9
  359. nautobot/extras/tests/test_relationships.py +3 -3
  360. nautobot/extras/tests/test_tags.py +1 -1
  361. nautobot/extras/tests/test_views.py +8 -9
  362. nautobot/extras/tests/test_webhooks.py +4 -5
  363. nautobot/extras/utils.py +11 -9
  364. nautobot/extras/views.py +3 -3
  365. nautobot/generate_secret_key.py +1 -1
  366. nautobot/ipam/api/serializers.py +1 -2
  367. nautobot/ipam/api/urls.py +1 -1
  368. nautobot/ipam/api/views.py +1 -0
  369. nautobot/ipam/apps.py +2 -1
  370. nautobot/ipam/factory.py +6 -9
  371. nautobot/ipam/fields.py +1 -1
  372. nautobot/ipam/filters.py +4 -3
  373. nautobot/ipam/formfields.py +1 -2
  374. nautobot/ipam/forms.py +4 -3
  375. nautobot/ipam/graphql/types.py +1 -1
  376. nautobot/ipam/homepage.py +0 -1
  377. nautobot/ipam/lookups.py +2 -3
  378. nautobot/ipam/migrations/0002_initial_part_2.py +2 -1
  379. nautobot/ipam/migrations/0003_remove_max_length.py +1 -0
  380. nautobot/ipam/migrations/0004_fixup_p2p_broadcast.py +0 -1
  381. nautobot/ipam/migrations/0005_auto_slug.py +1 -0
  382. nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -0
  383. nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +1 -0
  384. nautobot/ipam/migrations/0020_related_name_changes.py +1 -0
  385. nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +1 -2
  386. nautobot/ipam/migrations/0024_interface_to_ipaddress_m2m.py +2 -1
  387. nautobot/ipam/migrations/0025_interface_ipaddress_m2m_data_migration.py +1 -0
  388. nautobot/ipam/migrations/0028_tagsfield.py +1 -0
  389. nautobot/ipam/migrations/0030_ipam__namespaces.py +3 -1
  390. nautobot/ipam/migrations/0034_status_nonnullable.py +1 -0
  391. nautobot/ipam/migrations/0037_data_migration_vlan_group_name_uniqueness.py +0 -1
  392. nautobot/ipam/models.py +7 -7
  393. nautobot/ipam/navigation.py +0 -1
  394. nautobot/ipam/querysets.py +2 -2
  395. nautobot/ipam/tables.py +4 -3
  396. nautobot/ipam/tests/test_api.py +2 -2
  397. nautobot/ipam/tests/test_filters.py +7 -7
  398. nautobot/ipam/tests/test_migrations.py +1 -2
  399. nautobot/ipam/tests/test_models.py +2 -2
  400. nautobot/ipam/tests/test_ordering.py +1 -1
  401. nautobot/ipam/tests/test_querysets.py +2 -2
  402. nautobot/ipam/tests/test_views.py +6 -6
  403. nautobot/ipam/urls.py +1 -0
  404. nautobot/ipam/utils/migrations.py +0 -1
  405. nautobot/ipam/views.py +6 -6
  406. nautobot/project-static/docs/404.html +1 -43
  407. nautobot/project-static/docs/apps/index.html +1 -43
  408. nautobot/project-static/docs/apps/nautobot-apps.html +1 -43
  409. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +389 -431
  410. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +12 -54
  411. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2452 -2486
  412. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +1 -43
  413. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +90 -132
  414. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +1 -43
  415. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +1 -43
  416. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +1 -43
  417. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +1 -43
  418. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +26 -68
  419. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +993 -1035
  420. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +170 -212
  421. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +1789 -1831
  422. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +961 -1003
  423. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +1 -43
  424. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +1 -43
  425. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -44
  426. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +6904 -6946
  427. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +974 -1016
  428. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +1 -43
  429. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +1159 -1197
  430. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1796 -1832
  431. nautobot/project-static/docs/development/apps/api/configuration-view.html +1 -43
  432. nautobot/project-static/docs/development/apps/api/database-backend-config.html +1 -43
  433. nautobot/project-static/docs/development/apps/api/models/django-admin.html +1 -43
  434. nautobot/project-static/docs/development/apps/api/models/global-search.html +1 -43
  435. nautobot/project-static/docs/development/apps/api/models/graphql.html +1 -43
  436. nautobot/project-static/docs/development/apps/api/models/index.html +1 -43
  437. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +1 -43
  438. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +1 -43
  439. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +1 -43
  440. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +1 -43
  441. nautobot/project-static/docs/development/apps/api/platform-features/index.html +3 -45
  442. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +1 -43
  443. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +1 -43
  444. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +5 -43
  445. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +1 -43
  446. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +1 -43
  447. nautobot/project-static/docs/development/apps/api/prometheus.html +1 -43
  448. nautobot/project-static/docs/development/apps/api/setup.html +1 -43
  449. nautobot/project-static/docs/development/apps/api/testing.html +1 -43
  450. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +1 -43
  451. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +1 -43
  452. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +1 -43
  453. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +1 -43
  454. nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +1 -43
  455. nautobot/project-static/docs/development/apps/api/views/base-template.html +1 -43
  456. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +6 -48
  457. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +1 -43
  458. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +1 -43
  459. nautobot/project-static/docs/development/apps/api/views/index.html +1 -43
  460. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +1 -43
  461. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +1 -43
  462. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +1 -43
  463. nautobot/project-static/docs/development/apps/api/views/notes.html +3 -45
  464. nautobot/project-static/docs/development/apps/api/views/rest-api.html +1 -43
  465. nautobot/project-static/docs/development/apps/api/views/urls.html +1 -43
  466. nautobot/project-static/docs/development/apps/api/views/view-overrides.html +13 -5357
  467. nautobot/project-static/docs/development/apps/index.html +1 -43
  468. nautobot/project-static/docs/development/apps/migration/code-updates.html +1 -43
  469. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +1 -43
  470. nautobot/project-static/docs/development/apps/migration/from-v1.html +1 -44
  471. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +1 -43
  472. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +1 -43
  473. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +1 -43
  474. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +1 -43
  475. nautobot/project-static/docs/development/apps/porting-from-netbox.html +1 -43
  476. nautobot/project-static/docs/development/core/application-registry.html +1 -43
  477. nautobot/project-static/docs/development/core/best-practices.html +1 -43
  478. nautobot/project-static/docs/development/core/bootstrap-ui.html +1 -43
  479. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +1 -43
  480. nautobot/project-static/docs/development/core/extending-models.html +1 -43
  481. nautobot/project-static/docs/development/core/generic-views.html +1 -43
  482. nautobot/project-static/docs/development/core/getting-started.html +108 -257
  483. nautobot/project-static/docs/development/core/homepage.html +1 -43
  484. nautobot/project-static/docs/development/core/index.html +1 -43
  485. nautobot/project-static/docs/development/core/model-features.html +1 -43
  486. nautobot/project-static/docs/development/core/natural-keys.html +1 -43
  487. nautobot/project-static/docs/development/core/navigation-menu.html +1 -43
  488. nautobot/project-static/docs/development/core/react-ui.html +13 -5640
  489. nautobot/project-static/docs/development/core/release-checklist.html +4 -52
  490. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  491. nautobot/project-static/docs/development/core/style-guide.html +61 -102
  492. nautobot/project-static/docs/development/core/templates.html +4 -46
  493. nautobot/project-static/docs/development/core/testing.html +1 -43
  494. nautobot/project-static/docs/development/core/user-preferences.html +1 -43
  495. nautobot/project-static/docs/development/index.html +1 -43
  496. nautobot/project-static/docs/development/jobs/index.html +1 -43
  497. nautobot/project-static/docs/development/jobs/migration/from-v1.html +1 -43
  498. nautobot/project-static/docs/development/react-ui.html +3 -3
  499. nautobot/project-static/docs/index.html +2 -47
  500. nautobot/project-static/docs/release-notes/index.html +1 -43
  501. nautobot/project-static/docs/release-notes/version-1.0.html +1 -43
  502. nautobot/project-static/docs/release-notes/version-1.1.html +1 -43
  503. nautobot/project-static/docs/release-notes/version-1.2.html +1 -43
  504. nautobot/project-static/docs/release-notes/version-1.3.html +1 -43
  505. nautobot/project-static/docs/release-notes/version-1.4.html +1 -43
  506. nautobot/project-static/docs/release-notes/version-1.5.html +1 -43
  507. nautobot/project-static/docs/release-notes/version-1.6.html +1 -43
  508. nautobot/project-static/docs/release-notes/version-2.0.html +1 -43
  509. nautobot/project-static/docs/release-notes/version-2.1.html +189 -77
  510. nautobot/project-static/docs/search/search_index.json +1 -1
  511. nautobot/project-static/docs/sitemap.xml +236 -251
  512. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  513. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +1 -43
  514. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  515. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +1 -43
  516. nautobot/project-static/docs/user-guide/administration/configuration/index.html +1 -43
  517. nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +13 -5389
  518. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1 -65
  519. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +1 -43
  520. nautobot/project-static/docs/user-guide/administration/guides/caching.html +1 -43
  521. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +1 -43
  522. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +1 -43
  523. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +1 -43
  524. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +1 -43
  525. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +1 -43
  526. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +1 -43
  527. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +1 -43
  528. nautobot/project-static/docs/user-guide/administration/installation/docker.html +1 -43
  529. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +1 -43
  530. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +1 -43
  531. nautobot/project-static/docs/user-guide/administration/installation/index.html +1 -64
  532. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -57
  533. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +5 -94
  534. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +1 -43
  535. nautobot/project-static/docs/user-guide/administration/installation/services.html +1 -43
  536. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +1 -43
  537. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +1 -43
  538. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +76 -137
  539. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +1 -43
  540. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +1 -43
  541. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +1 -43
  542. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +1 -43
  543. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +1 -43
  544. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +1 -43
  545. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +1 -43
  546. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +1 -43
  547. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +1 -43
  548. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +1 -43
  549. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +1 -43
  550. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +1 -43
  551. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +1 -43
  552. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +1 -43
  553. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +1 -43
  554. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +1 -43
  555. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +1 -43
  556. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +1 -43
  557. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +1 -43
  558. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +1 -43
  559. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +1 -43
  560. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +1 -43
  561. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +1 -43
  562. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -44
  563. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +1 -43
  564. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +1 -43
  565. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +1 -43
  566. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +1 -43
  567. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +1 -43
  568. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +1 -43
  569. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +1 -43
  570. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +1 -43
  571. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +1 -43
  572. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +1 -43
  573. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +1 -43
  574. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +1 -43
  575. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +1 -43
  576. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +1 -43
  577. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +1 -43
  578. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +1 -43
  579. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +1 -43
  580. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +1 -43
  581. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +1 -43
  582. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +1 -43
  583. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +1 -43
  584. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +1 -43
  585. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +1 -43
  586. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +1 -43
  587. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +1 -43
  588. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +1 -43
  589. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +1 -43
  590. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +1 -43
  591. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +1 -43
  592. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +1 -43
  593. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +1 -43
  594. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +1 -43
  595. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +1 -43
  596. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +1 -43
  597. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +1 -43
  598. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +1 -43
  599. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +1 -43
  600. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +1 -43
  601. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +1 -43
  602. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +1 -43
  603. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +1 -43
  604. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +1 -43
  605. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +1 -43
  606. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +1 -43
  607. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +1 -43
  608. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +1 -43
  609. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +1 -43
  610. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +1 -43
  611. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +1 -43
  612. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +1 -43
  613. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +1 -43
  614. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +1 -43
  615. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +23 -79
  616. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +1 -43
  617. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +1 -43
  618. nautobot/project-static/docs/user-guide/index.html +1 -43
  619. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +1 -43
  620. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +1 -43
  621. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +1 -43
  622. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +1 -43
  623. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1 -43
  624. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +1 -43
  625. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +1 -43
  626. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +1 -43
  627. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +1 -43
  628. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +1 -43
  629. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +1 -43
  630. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +1 -43
  631. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +1 -43
  632. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +1 -43
  633. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +1 -43
  634. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +1 -43
  635. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +1 -43
  636. nautobot/project-static/docs/user-guide/platform-functionality/note.html +1 -43
  637. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +1 -43
  638. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +1 -43
  639. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +1 -43
  640. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +1 -43
  641. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +1 -43
  642. nautobot/project-static/docs/user-guide/platform-functionality/role.html +1 -43
  643. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +1 -43
  644. nautobot/project-static/docs/user-guide/platform-functionality/status.html +1 -43
  645. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +1 -43
  646. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +1 -43
  647. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +5 -43
  648. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +1 -43
  649. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +1 -43
  650. nautobot/project-static/js/theme.js +0 -5
  651. nautobot/tenancy/api/urls.py +1 -1
  652. nautobot/tenancy/api/views.py +1 -0
  653. nautobot/tenancy/factory.py +2 -2
  654. nautobot/tenancy/filters/__init__.py +1 -2
  655. nautobot/tenancy/forms.py +2 -2
  656. nautobot/tenancy/homepage.py +0 -1
  657. nautobot/tenancy/migrations/0001_initial.py +2 -1
  658. nautobot/tenancy/migrations/0002_auto_slug.py +1 -0
  659. nautobot/tenancy/migrations/0004_change_tree_manager_on_tree_models.py +1 -0
  660. nautobot/tenancy/migrations/0008_tagsfield.py +1 -0
  661. nautobot/tenancy/models.py +0 -1
  662. nautobot/tenancy/navigation.py +0 -1
  663. nautobot/tenancy/tables.py +1 -0
  664. nautobot/tenancy/tests/test_filters.py +5 -5
  665. nautobot/tenancy/urls.py +1 -0
  666. nautobot/tenancy/views.py +2 -2
  667. nautobot/users/admin.py +1 -2
  668. nautobot/users/api/urls.py +1 -1
  669. nautobot/users/api/views.py +6 -4
  670. nautobot/users/factory.py +1 -3
  671. nautobot/users/filters.py +4 -4
  672. nautobot/users/forms.py +1 -0
  673. nautobot/users/migrations/0004_alter_user_managers.py +1 -0
  674. nautobot/users/migrations/0008_make_object_permission_a_changelogged_model.py +22 -0
  675. nautobot/users/models.py +2 -2
  676. nautobot/users/tests/test_api.py +7 -6
  677. nautobot/users/tests/test_filters.py +0 -1
  678. nautobot/users/tests/test_models.py +0 -1
  679. nautobot/users/tests/test_password_ui.py +1 -1
  680. nautobot/users/views.py +2 -2
  681. nautobot/virtualization/api/urls.py +1 -1
  682. nautobot/virtualization/api/views.py +2 -1
  683. nautobot/virtualization/apps.py +1 -1
  684. nautobot/virtualization/choices.py +0 -1
  685. nautobot/virtualization/factory.py +1 -1
  686. nautobot/virtualization/filters.py +1 -1
  687. nautobot/virtualization/forms.py +6 -6
  688. nautobot/virtualization/homepage.py +0 -1
  689. nautobot/virtualization/migrations/0003_vminterface_verbose_name.py +1 -0
  690. nautobot/virtualization/migrations/0004_auto_slug.py +1 -0
  691. nautobot/virtualization/migrations/0005_add_natural_indexing.py +1 -0
  692. nautobot/virtualization/migrations/0006_vminterface_status.py +1 -0
  693. nautobot/virtualization/migrations/0007_vminterface_status_data_migration.py +1 -0
  694. nautobot/virtualization/migrations/0011_alter_vminterface_mac_address.py +1 -0
  695. nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -0
  696. nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +1 -0
  697. nautobot/virtualization/migrations/0018_related_name_changes.py +1 -0
  698. nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +1 -0
  699. nautobot/virtualization/migrations/0025_status_nonnullable.py +1 -0
  700. nautobot/virtualization/models.py +1 -2
  701. nautobot/virtualization/navigation.py +0 -1
  702. nautobot/virtualization/signals.py +0 -1
  703. nautobot/virtualization/tables.py +1 -0
  704. nautobot/virtualization/tests/test_filters.py +3 -3
  705. nautobot/virtualization/tests/test_models.py +1 -1
  706. nautobot/virtualization/tests/test_views.py +2 -2
  707. nautobot/virtualization/urls.py +1 -0
  708. nautobot/virtualization/views.py +1 -1
  709. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/METADATA +1 -1
  710. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/RECORD +713 -814
  711. nautobot/core/management/commands/build_ui.py +0 -281
  712. nautobot/core/templates/base_react.html +0 -55
  713. nautobot/core/tests/test_cli.py +0 -25
  714. nautobot/ui/.eslintignore +0 -3
  715. nautobot/ui/.gitignore +0 -7
  716. nautobot/ui/.prettierignore +0 -6
  717. nautobot/ui/.prettierrc +0 -4
  718. nautobot/ui/README.md +0 -27
  719. nautobot/ui/config/env.js +0 -102
  720. nautobot/ui/config/getHttpsConfig.js +0 -68
  721. nautobot/ui/config/jest/babelTransform.js +0 -14
  722. nautobot/ui/config/jest/cssTransform.js +0 -12
  723. nautobot/ui/config/jest/fileTransform.js +0 -38
  724. nautobot/ui/config/modules.js +0 -151
  725. nautobot/ui/config/paths.js +0 -67
  726. nautobot/ui/config/webpack/persistentCache/createEnvironmentHash.js +0 -8
  727. nautobot/ui/config/webpack.config.js +0 -674
  728. nautobot/ui/config/webpackDevServer.config.js +0 -127
  729. nautobot/ui/jest.config.js +0 -35
  730. nautobot/ui/jsconfig.json +0 -4
  731. nautobot/ui/package-lock.json +0 -22947
  732. nautobot/ui/package.json +0 -119
  733. nautobot/ui/public/index.html +0 -47
  734. nautobot/ui/public/logo192.png +0 -0
  735. nautobot/ui/public/logo512.png +0 -0
  736. nautobot/ui/public/manifest.json +0 -25
  737. nautobot/ui/public/nautobot_logo.svg +0 -131
  738. nautobot/ui/public/robots.txt +0 -3
  739. nautobot/ui/scripts/build.js +0 -224
  740. nautobot/ui/scripts/start.js +0 -140
  741. nautobot/ui/scripts/test.js +0 -40
  742. nautobot/ui/src/App.js +0 -79
  743. nautobot/ui/src/components/AppFullWidthComponents.js +0 -8
  744. nautobot/ui/src/components/AppTab.js +0 -40
  745. nautobot/ui/src/components/Apps.js +0 -60
  746. nautobot/ui/src/components/FeedbackModal.js +0 -123
  747. nautobot/ui/src/components/FiltersPanel.js +0 -693
  748. nautobot/ui/src/components/HomeChangelogPanel.js +0 -98
  749. nautobot/ui/src/components/HomePanel.js +0 -58
  750. nautobot/ui/src/components/JobHistoryTable.js +0 -78
  751. nautobot/ui/src/components/Layout.js +0 -76
  752. nautobot/ui/src/components/LoadingWidget.js +0 -14
  753. nautobot/ui/src/components/Navbar.js +0 -204
  754. nautobot/ui/src/components/NotificationPopover.js +0 -27
  755. nautobot/ui/src/components/ObjectTable/ObjectListTable.js +0 -300
  756. nautobot/ui/src/components/ObjectTable/ObjectTable.js +0 -96
  757. nautobot/ui/src/components/ObjectTable/ObjectTableItem.js +0 -70
  758. nautobot/ui/src/components/ObjectTable/index.js +0 -3
  759. nautobot/ui/src/components/Pagination/PageNumberForm.js +0 -228
  760. nautobot/ui/src/components/Pagination/PageSizeForm.js +0 -65
  761. nautobot/ui/src/components/Pagination/Pagination.js +0 -67
  762. nautobot/ui/src/components/Pagination/index.js +0 -3
  763. nautobot/ui/src/components/ReferenceDataTag.js +0 -35
  764. nautobot/ui/src/components/Retrieve/RenderChangeLogsTab.js +0 -58
  765. nautobot/ui/src/components/Retrieve/RenderColumn.js +0 -30
  766. nautobot/ui/src/components/Retrieve/RenderGroup.js +0 -24
  767. nautobot/ui/src/components/Retrieve/RenderHeader.js +0 -125
  768. nautobot/ui/src/components/Retrieve/RenderNotesTab.js +0 -60
  769. nautobot/ui/src/components/Retrieve/RenderTable.js +0 -33
  770. nautobot/ui/src/components/Retrieve/RenderTabs.js +0 -56
  771. nautobot/ui/src/components/Retrieve/index.js +0 -7
  772. nautobot/ui/src/components/RouterButton.js +0 -10
  773. nautobot/ui/src/components/RouterLink.js +0 -10
  774. nautobot/ui/src/components/SidebarNav.js +0 -156
  775. nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +0 -16
  776. nautobot/ui/src/components/__tests__/AppTab.test.js +0 -21
  777. nautobot/ui/src/components/__tests__/Apps.test.js +0 -14
  778. nautobot/ui/src/components/__tests__/Layout.test.js +0 -33
  779. nautobot/ui/src/components/__tests__/PageSizeForm.test.js +0 -13
  780. nautobot/ui/src/components/__tests__/Pagination.test.js +0 -43
  781. nautobot/ui/src/components/__tests__/Table.test.js +0 -39
  782. nautobot/ui/src/components/__tests__/TableItem.test.js +0 -39
  783. nautobot/ui/src/components/index.js +0 -4
  784. nautobot/ui/src/constants/apiPath.js +0 -13
  785. nautobot/ui/src/constants/icons.js +0 -15
  786. nautobot/ui/src/constants/size.js +0 -15
  787. nautobot/ui/src/file_templates/app_imports.js.j2 +0 -7
  788. nautobot/ui/src/file_templates/jsconfig-base.json +0 -12
  789. nautobot/ui/src/index.js +0 -65
  790. nautobot/ui/src/reportWebVitals.js +0 -15
  791. nautobot/ui/src/router.js +0 -77
  792. nautobot/ui/src/utils/api.js +0 -160
  793. nautobot/ui/src/utils/app-import.js +0 -15
  794. nautobot/ui/src/utils/color.js +0 -15
  795. nautobot/ui/src/utils/date.js +0 -14
  796. nautobot/ui/src/utils/index.js +0 -15
  797. nautobot/ui/src/utils/navigation.js +0 -48
  798. nautobot/ui/src/utils/session.js +0 -64
  799. nautobot/ui/src/utils/store.js +0 -242
  800. nautobot/ui/src/utils/string.js +0 -6
  801. nautobot/ui/src/utils/url.js +0 -4
  802. nautobot/ui/src/views/Home.js +0 -142
  803. nautobot/ui/src/views/InstalledApps.js +0 -80
  804. nautobot/ui/src/views/Login.js +0 -48
  805. nautobot/ui/src/views/Logout.js +0 -20
  806. nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +0 -11
  807. nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +0 -107
  808. nautobot/ui/src/views/__tests__/Login.test.js +0 -15
  809. nautobot/ui/src/views/generic/GenericView.js +0 -191
  810. nautobot/ui/src/views/generic/ObjectCreate.js +0 -96
  811. nautobot/ui/src/views/generic/ObjectList.js +0 -137
  812. nautobot/ui/src/views/generic/ObjectRetrieve.js +0 -87
  813. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/LICENSE.txt +0 -0
  814. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/WHEEL +0 -0
  815. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/entry_points.txt +0 -0
@@ -4,13 +4,11 @@ import json
4
4
  import logging
5
5
 
6
6
  from django.conf import settings
7
-
8
7
  from rest_framework import serializers
9
8
  from rest_framework.exceptions import ParseError
10
9
  from rest_framework.parsers import BaseParser
11
10
 
12
- from nautobot.core.constants import CSV_NULL_TYPE, CSV_NO_OBJECT
13
-
11
+ from nautobot.core.constants import CSV_NO_OBJECT, CSV_NULL_TYPE
14
12
 
15
13
  logger = logging.getLogger(__name__)
16
14
 
@@ -9,7 +9,6 @@ from rest_framework.renderers import BaseRenderer, BrowsableAPIRenderer, JSONRen
9
9
  from nautobot.core.celery import NautobotKombuJSONEncoder
10
10
  from nautobot.core.constants import COMPOSITE_KEY_SEPARATOR
11
11
 
12
-
13
12
  logger = logging.getLogger(__name__)
14
13
 
15
14
 
@@ -15,7 +15,6 @@ from nautobot.core.api import (
15
15
  WritableNestedSerializer,
16
16
  )
17
17
 
18
-
19
18
  logger = logging.getLogger(__name__)
20
19
 
21
20
 
@@ -114,7 +113,7 @@ class NautobotAutoSchema(AutoSchema):
114
113
  }
115
114
 
116
115
  # Inject a custom description for the "id" parameter since ours has custom lookup behavior.
117
- if "parameters" in operation:
116
+ if operation is not None and "parameters" in operation:
118
117
  for param in operation["parameters"]:
119
118
  if param["name"] == "id" and "description" not in param:
120
119
  param["description"] = "Unique object identifier, either a UUID primary key or a composite key."
@@ -153,7 +152,7 @@ class NautobotAutoSchema(AutoSchema):
153
152
  if re.search(r"<drf_format_suffix\w*:\w+>", self.path_regex):
154
153
  tokenized_path.append("formatted")
155
154
 
156
- return "_".join(tokenized_path + [action])
155
+ return "_".join([*tokenized_path, action])
157
156
 
158
157
  # For all other view actions, operation-id is the same as in the base class
159
158
  return super().get_operation_id()
@@ -2,6 +2,8 @@ import contextlib
2
2
  from copy import deepcopy
3
3
  import logging
4
4
  import uuid
5
+
6
+ from django.contrib.contenttypes.fields import GenericRel
5
7
  from django.contrib.contenttypes.models import ContentType
6
8
  from django.core.exceptions import (
7
9
  FieldDoesNotExist,
@@ -10,7 +12,6 @@ from django.core.exceptions import (
10
12
  ObjectDoesNotExist,
11
13
  ValidationError as DjangoValidationError,
12
14
  )
13
- from django.contrib.contenttypes.fields import GenericRel
14
15
  from django.db import models
15
16
  from django.db.models.fields.related_descriptors import ManyToManyDescriptor
16
17
  from django.db.models.functions import Cast
@@ -18,27 +19,26 @@ from django.urls import NoReverseMatch
18
19
  from drf_spectacular.types import OpenApiTypes
19
20
  from drf_spectacular.utils import extend_schema_field, PolymorphicProxySerializer as _PolymorphicProxySerializer
20
21
  from rest_framework import relations as drf_relations, serializers
21
- from rest_framework.fields import CreateOnlyDefault
22
22
  from rest_framework.exceptions import PermissionDenied, ValidationError
23
+ from rest_framework.fields import CreateOnlyDefault
23
24
  from rest_framework.reverse import reverse
24
25
  from rest_framework.serializers import SerializerMethodField
25
- from rest_framework.utils.model_meta import RelationInfo, _get_to_field
26
-
26
+ from rest_framework.utils.model_meta import _get_to_field, RelationInfo
27
27
 
28
+ from nautobot.core import constants
28
29
  from nautobot.core.api.fields import NautobotHyperlinkedRelatedField, ObjectTypeField
29
30
  from nautobot.core.api.utils import (
30
31
  dict_to_filter_params,
31
32
  nested_serializer_factory,
32
33
  )
33
- from nautobot.core import constants
34
34
  from nautobot.core.exceptions import ViewConfigException
35
35
  from nautobot.core.models.managers import TagsManager
36
36
  from nautobot.core.models.utils import construct_composite_key, construct_natural_slug
37
37
  from nautobot.core.templatetags.helpers import bettertitle
38
38
  from nautobot.core.utils.lookup import get_route_for_model
39
39
  from nautobot.core.utils.requests import normalize_querydict
40
+ from nautobot.extras.api.customfields import CustomFieldDefaultValues, CustomFieldsDataField
40
41
  from nautobot.extras.api.relationships import RelationshipsDataField
41
- from nautobot.extras.api.customfields import CustomFieldsDataField, CustomFieldDefaultValues
42
42
  from nautobot.extras.choices import RelationshipSideChoices
43
43
  from nautobot.extras.models import RelationshipAssociation, Tag
44
44
  from nautobot.ipam.fields import VarbinaryIPField
@@ -262,7 +262,9 @@ class BaseModelSerializer(OptInFieldsMixin, serializers.HyperlinkedModelSerializ
262
262
  fields = [
263
263
  field
264
264
  for field in model._meta.get_fields()
265
- if field.is_relation and not field.many_to_many and not field.one_to_many
265
+ if field.is_relation
266
+ and not field.many_to_many
267
+ and not field.one_to_many
266
268
  # Ignore GenericRel since its `fk` and `content_type` would be used.
267
269
  and not isinstance(field, GenericRel)
268
270
  ]
nautobot/core/api/urls.py CHANGED
@@ -12,11 +12,9 @@ from nautobot.core.api.views import (
12
12
  GetFilterSetFieldLookupExpressionChoicesAPIView,
13
13
  GetMenuAPIView,
14
14
  GetObjectCountsView,
15
- GetSettingsView,
16
15
  GraphQLDRFAPIView,
17
- NautobotSpectacularSwaggerView,
18
16
  NautobotSpectacularRedocView,
19
- NewUIReadyRoutesAPIView,
17
+ NautobotSpectacularSwaggerView,
20
18
  StatusView,
21
19
  )
22
20
  from nautobot.extras.plugins.urls import plugin_api_patterns
@@ -36,10 +34,8 @@ core_api_patterns = [
36
34
  ui_api_patterns = [
37
35
  # Lookup Expr
38
36
  path("core/", include((core_api_patterns, "core-api"))),
39
- path("new-ui-ready-routes/", NewUIReadyRoutesAPIView.as_view(), name="new-ui-ready-routes"),
40
37
  path("get-menu/", GetMenuAPIView.as_view(), name="get-menu"),
41
38
  path("get-object-counts/", GetObjectCountsView.as_view(), name="get-object-counts"),
42
- path("settings/", GetSettingsView.as_view(), name="settings"),
43
39
  ]
44
40
 
45
41
  urlpatterns = [
@@ -10,11 +10,10 @@ from django.urls import reverse
10
10
  from rest_framework import serializers, status
11
11
  from rest_framework.utils import formatting
12
12
  from rest_framework.utils.field_mapping import get_nested_relation_kwargs
13
- from rest_framework.utils.model_meta import RelationInfo, _get_to_field
13
+ from rest_framework.utils.model_meta import _get_to_field, RelationInfo
14
14
 
15
15
  from nautobot.core.api import exceptions
16
16
 
17
-
18
17
  logger = logging.getLogger(__name__)
19
18
 
20
19
 
@@ -216,11 +215,10 @@ def format_output(field, field_value):
216
215
  "required": False, # Form field placeholder
217
216
  }
218
217
  # TODO: fix these local imports if at all possible
219
- from nautobot.core.api import WritableNestedSerializer
220
- from rest_framework.fields import CharField
221
- from rest_framework.fields import IntegerField
218
+ from rest_framework.fields import CharField, IntegerField
222
219
  from rest_framework.serializers import ListSerializer
223
- from nautobot.core.api import ChoiceField
220
+
221
+ from nautobot.core.api import ChoiceField, WritableNestedSerializer
224
222
 
225
223
  kwargs = {}
226
224
  if isinstance(field_value, (WritableNestedSerializer, ListSerializer)):
@@ -2,8 +2,8 @@ from django.utils.functional import classproperty
2
2
  from django.utils.translation import gettext_lazy as _
3
3
  from rest_framework import exceptions
4
4
  from rest_framework.compat import unicode_http_header
5
- from rest_framework.utils.mediatypes import _MediaType
6
5
  from rest_framework.settings import api_settings
6
+ from rest_framework.utils.mediatypes import _MediaType
7
7
  from rest_framework.versioning import AcceptHeaderVersioning
8
8
 
9
9
 
@@ -1,48 +1,45 @@
1
+ from collections import OrderedDict
1
2
  import itertools
2
3
  import logging
3
4
  import platform
4
- from collections import OrderedDict
5
- import re
6
5
 
7
6
  from django import __version__ as DJANGO_VERSION, forms
8
7
  from django.apps import apps
9
8
  from django.conf import settings
10
9
  from django.core.exceptions import ObjectDoesNotExist, ValidationError
11
- from django.http.response import HttpResponseBadRequest
12
10
  from django.db import transaction
13
11
  from django.db.models import ProtectedError
12
+ from django.http.response import HttpResponseBadRequest
14
13
  from django.shortcuts import get_object_or_404, redirect
15
14
  from django.urls import NoReverseMatch, reverse as django_reverse
16
- from rest_framework import status
17
- from rest_framework.response import Response
18
- from rest_framework.reverse import reverse
19
- from rest_framework.views import APIView
20
- from rest_framework.viewsets import ModelViewSet as ModelViewSet_
21
- from rest_framework.viewsets import ReadOnlyModelViewSet as ReadOnlyModelViewSet_
22
- from rest_framework.permissions import AllowAny, IsAuthenticated
23
- from rest_framework.exceptions import PermissionDenied, ParseError
24
15
  from drf_spectacular.plumbing import get_relative_url, set_query_parameters
25
16
  from drf_spectacular.renderers import OpenApiJsonRenderer
26
17
  from drf_spectacular.utils import extend_schema
27
- from drf_spectacular.views import SpectacularSwaggerView, SpectacularRedocView
28
-
18
+ from drf_spectacular.views import SpectacularRedocView, SpectacularSwaggerView
19
+ from graphene_django.settings import graphene_settings
20
+ from graphene_django.views import GraphQLView, HttpError, instantiate_middleware
29
21
  from graphql import get_default_backend
30
22
  from graphql.execution import ExecutionResult
31
- from graphql.type.schema import GraphQLSchema
32
23
  from graphql.execution.middleware import MiddlewareManager
33
- from graphene_django.settings import graphene_settings
34
- from graphene_django.views import GraphQLView, instantiate_middleware, HttpError
24
+ from graphql.type.schema import GraphQLSchema
25
+ from rest_framework import status
26
+ from rest_framework.exceptions import ParseError, PermissionDenied
27
+ from rest_framework.permissions import AllowAny, IsAuthenticated
28
+ from rest_framework.response import Response
29
+ from rest_framework.reverse import reverse
30
+ from rest_framework.views import APIView
31
+ from rest_framework.viewsets import ModelViewSet as ModelViewSet_, ReadOnlyModelViewSet as ReadOnlyModelViewSet_
35
32
 
36
33
  from nautobot.core.api import BulkOperationSerializer
37
34
  from nautobot.core.celery import app as celery_app
38
35
  from nautobot.core.exceptions import FilterSetFieldNotFound
39
- from nautobot.core.utils.config import get_settings_or_config
40
36
  from nautobot.core.utils.data import is_uuid
41
37
  from nautobot.core.utils.filtering import get_all_lookup_expr_for_field, get_filterset_parameter_form_field
42
38
  from nautobot.core.utils.lookup import get_form_for_model, get_route_for_model
43
39
  from nautobot.core.utils.permissions import get_permission_for_model
44
40
  from nautobot.core.utils.requests import ensure_content_type_and_field_name_in_query_params
45
41
  from nautobot.extras.registry import registry
42
+
46
43
  from . import serializers
47
44
 
48
45
  HTTP_ACTIONS = {
@@ -179,10 +176,11 @@ class ModelViewSetMixin:
179
176
  queryset = self.filter_queryset(self.get_queryset())
180
177
  lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
181
178
 
182
- assert lookup_url_kwarg in self.kwargs, (
183
- f"Expected view {self.__class__.__name__} to be called with a URL keyword argument named "
184
- f'"{lookup_url_kwarg}". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.'
185
- )
179
+ if lookup_url_kwarg not in self.kwargs:
180
+ raise RuntimeError(
181
+ f"Expected view {self.__class__.__name__} to be called with a URL keyword argument named "
182
+ f'"{lookup_url_kwarg}". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.'
183
+ )
186
184
 
187
185
  if lookup_url_kwarg == "pk" and hasattr(queryset.model, "composite_key"):
188
186
  # Support lookup by either PK (UUID) or composite_key
@@ -487,7 +485,7 @@ class NautobotSpectacularSwaggerView(APIVersioningGetSchemaURLMixin, Spectacular
487
485
 
488
486
  format = "openapi"
489
487
 
490
- renderer_classes = SpectacularSwaggerView.renderer_classes + [FakeOpenAPIRenderer]
488
+ renderer_classes = [*SpectacularSwaggerView.renderer_classes, FakeOpenAPIRenderer]
491
489
 
492
490
  template_name = "swagger_ui.html"
493
491
 
@@ -602,7 +600,8 @@ class GraphQLDRFAPIView(NautobotAPIVersionMixin, APIView):
602
600
  self.executor = self.executor
603
601
  self.root_value = self.root_value
604
602
 
605
- assert isinstance(self.graphql_schema, GraphQLSchema), "A Schema is required to be provided to GraphQLAPIView."
603
+ if not isinstance(self.graphql_schema, GraphQLSchema):
604
+ raise ValueError("A Schema is required to be provided to GraphQLAPIView.")
606
605
 
607
606
  def get_response(self, request, data):
608
607
  """Extract the information from the request, execute the GraphQL query and form the response.
@@ -863,42 +862,6 @@ class GetObjectCountsView(NautobotAPIVersionMixin, APIView):
863
862
  return Response(object_counts)
864
863
 
865
864
 
866
- class GetSettingsView(NautobotAPIVersionMixin, APIView):
867
- """
868
- This view exposes Nautobot settings.
869
-
870
- Get settings by providing one or more `name` in the query parameters.
871
-
872
- Example:
873
-
874
- - /api/settings/?name=FOO # Returns the setting with name 'FOO'
875
- - /api/settings/?name=FOO&name=BAR # Returns the setting with these names 'FOO' and 'BAR
876
- """
877
-
878
- permission_classes = [IsAuthenticated]
879
-
880
- @extend_schema(exclude=True)
881
- def get(self, request):
882
- # As of now, we just have `allowed_settings` settings. Because the purpose of this API is limited for the time being,
883
- # we may need more access to serializable and non-serializable settings data as the new UI expands. As a result,
884
- # exposing all settings data would be desirable in the future.
885
- # NOTE: When exposing all settings, include a way to limit settings which can be exposed for security concerns
886
- # e.g `SECRET_KEY`, `NAPALM_PASSWORD` e.t.c. also `allowed_settings` can be moved into settings.py
887
- allowed_settings = ["FEEDBACK_BUTTON_ENABLED"]
888
- # Filter out settings_names not allowed to be exposed to the API
889
- valid_settings = [name for name in request.GET.getlist("name") if name in allowed_settings]
890
-
891
- invalid_settings = [name for name in request.GET.getlist("name") if name not in allowed_settings]
892
- if invalid_settings:
893
- return Response(
894
- {"error": f"Invalid settings names specified: {', '.join(invalid_settings)}."},
895
- status=status.HTTP_400_BAD_REQUEST,
896
- )
897
-
898
- res = {settings_name: get_settings_or_config(settings_name) for settings_name in valid_settings}
899
- return Response(res)
900
-
901
-
902
865
  #
903
866
  # Lookup Expr
904
867
  #
@@ -977,35 +940,3 @@ class GetFilterSetFieldDOMElementAPIView(NautobotAPIVersionMixin, APIView):
977
940
  else:
978
941
  data = bound_field.as_widget()
979
942
  return Response(data)
980
-
981
-
982
- class NewUIReadyRoutesAPIView(NautobotAPIVersionMixin, APIView):
983
- """API View that returns a list of new UI-ready routes."""
984
-
985
- permission_classes = [IsAuthenticated]
986
-
987
- def to_javascript_regex(self, regex_pattern):
988
- """
989
- Convert a Python regex pattern into JavaScript regex format.
990
-
991
- Args:
992
- regex_pattern (str): The Python regex pattern to convert.
993
-
994
- Returns:
995
- str: The JavaScript-compatible regex pattern.
996
- """
997
- # Remove named groups (?P<...>)
998
- pattern = re.sub(r"\?P<[a-z]+>", "", regex_pattern)
999
-
1000
- # Escape `/` with `\`
1001
- pattern = pattern.replace("/", "\\/")
1002
-
1003
- # Replace `/Z` with `$`
1004
- pattern = pattern.replace(r"\Z", "$")
1005
-
1006
- return pattern
1007
-
1008
- @extend_schema(exclude=True)
1009
- def get(self, request):
1010
- url_regex_patterns = registry["new_ui_ready_routes"]
1011
- return Response([self.to_javascript_regex(pattern) for pattern in url_regex_patterns])
@@ -1,18 +1,16 @@
1
- import logging
2
- import os
3
-
4
1
  from abc import ABC, abstractmethod
5
2
  from collections import OrderedDict
3
+ import logging
4
+ import os
6
5
 
6
+ from constance.apps import ConstanceConfig
7
7
  from django.apps import AppConfig, apps as global_apps
8
8
  from django.contrib.admin.sites import NotRegistered
9
- from django.db.models import JSONField, BigIntegerField, BinaryField
9
+ from django.db.models import BigIntegerField, BinaryField, JSONField
10
10
  from django.db.models.signals import post_migrate
11
11
  from django.urls import reverse
12
12
  from django.urls.exceptions import NoReverseMatch
13
13
  from django.utils.module_loading import import_string
14
-
15
- from constance.apps import ConstanceConfig
16
14
  from graphene.types import generic, String
17
15
 
18
16
  from nautobot.core.choices import ButtonActionColorChoices, ButtonActionIconChoices
@@ -20,7 +18,6 @@ from nautobot.core.signals import nautobot_database_ready
20
18
  from nautobot.core.utils.navigation import get_all_new_ui_ready_routes
21
19
  from nautobot.extras.registry import registry
22
20
 
23
-
24
21
  logger = logging.getLogger(__name__)
25
22
  registry["nav_menu"] = {"tabs": {}}
26
23
  registry["new_ui_nav_menu"] = {}
@@ -816,6 +813,7 @@ class CoreConfig(NautobotConfig):
816
813
  library.filter(name=name, fn=func)
817
814
 
818
815
  from graphene_django.converter import convert_django_field
816
+
819
817
  from nautobot.core.graphql import BigInteger
820
818
 
821
819
  @convert_django_field.register(JSONField)
@@ -1,5 +1,5 @@
1
- import logging
2
1
  from collections import defaultdict
2
+ import logging
3
3
 
4
4
  from django.conf import settings
5
5
  from django.contrib.auth.backends import (
@@ -17,11 +17,10 @@ from django.utils.module_loading import import_string
17
17
  from kombu.serialization import register
18
18
  from prometheus_client import CollectorRegistry, multiprocess, start_http_server
19
19
 
20
- from nautobot.core.celery.control import discard_git_repository, refresh_git_repository # noqa: F401
20
+ from nautobot.core.celery.control import discard_git_repository, refresh_git_repository # noqa: F401 # unused-import
21
21
  from nautobot.core.celery.encoders import NautobotKombuJSONEncoder
22
22
  from nautobot.core.celery.log import NautobotDatabaseHandler
23
23
 
24
-
25
24
  logger = logging.getLogger(__name__)
26
25
  # The Celery documentation tells us to call setup on the app to initialize
27
26
  # settings, but we will NOT be doing that because of a chicken-and-egg problem
@@ -3,10 +3,8 @@ import os
3
3
  import shutil
4
4
 
5
5
  from celery.worker.control import control_command
6
-
7
6
  from django.conf import settings
8
7
 
9
-
10
8
  logger = logging.getLogger(__name__)
11
9
 
12
10
 
@@ -2,7 +2,6 @@ import logging
2
2
 
3
3
  from rest_framework.utils.encoders import JSONEncoder
4
4
 
5
-
6
5
  logger = logging.getLogger(__name__)
7
6
 
8
7
 
@@ -2,12 +2,11 @@ from collections.abc import Mapping
2
2
  import logging
3
3
 
4
4
  from celery import current_app
5
- from django_celery_beat.schedulers import ModelEntry, DatabaseScheduler
5
+ from django_celery_beat.schedulers import DatabaseScheduler, ModelEntry
6
6
  from kombu.utils.json import loads
7
7
 
8
8
  from nautobot.extras.models import ScheduledJob, ScheduledJobs
9
9
 
10
-
11
10
  logger = logging.getLogger(__name__)
12
11
 
13
12
 
@@ -9,4 +9,4 @@ class NautobotTask(Task):
9
9
  """Nautobot extensions to tasks for integrating with Job machinery."""
10
10
 
11
11
 
12
- Task = NautobotTask # noqa: So that the class path resolves.
12
+ Task = NautobotTask # So that the class path resolves.
nautobot/core/checks.py CHANGED
@@ -1,12 +1,11 @@
1
1
  import re
2
2
 
3
3
  from django.conf import settings
4
- from django.core.checks import register, Error, Tags, Warning # pylint: disable=redefined-builtin
4
+ from django.core.checks import Error, register, Tags, Warning # pylint: disable=redefined-builtin
5
5
  from django.core.exceptions import ValidationError
6
6
  from django.core.validators import URLValidator
7
7
  from django.db import connections
8
8
 
9
-
10
9
  E002 = Error(
11
10
  "'nautobot.core.authentication.ObjectPermissionBackend' must be included in AUTHENTICATION_BACKENDS",
12
11
  id="nautobot.core.E002",
nautobot/core/choices.py CHANGED
@@ -43,8 +43,8 @@ class ChoiceSet(metaclass=ChoiceSetMeta):
43
43
  Example:
44
44
  ```python
45
45
  class GreekCapitalLetterChoices(ChoiceSet):
46
- ALPHA = "Α"
47
- BETA = "Β"
46
+ ALPHA = "A"
47
+ BETA = "B"
48
48
  GAMMA = "Γ"
49
49
 
50
50
  CHOICES = (
@@ -11,7 +11,6 @@ from jinja2 import BaseLoader, Environment
11
11
  from nautobot.core.runner import run_app
12
12
  from nautobot.extras.plugins.utils import load_plugins
13
13
 
14
-
15
14
  # Default file location for the generated config emitted by `init`
16
15
  NAUTOBOT_ROOT = os.getenv("NAUTOBOT_ROOT", os.path.expanduser("~/.nautobot"))
17
16
  DEFAULT_CONFIG_PATH = os.path.join(NAUTOBOT_ROOT, "nautobot_config.py")
@@ -73,7 +72,8 @@ def generate_settings(config_template=CONFIG_TEMPLATE, **kwargs):
73
72
  }
74
73
 
75
74
  with open(config_template) as fh:
76
- environment = Environment(loader=BaseLoader, keep_trailing_newline=True)
75
+ # We don't need autoescape=True since we control the template file
76
+ environment = Environment(loader=BaseLoader, keep_trailing_newline=True) # noqa: S701 # jinja2-autoescape-false
77
77
  config = environment.from_string(fh.read())
78
78
 
79
79
  return config.render(**template_vars)
@@ -115,7 +115,6 @@ def _configure_settings(config):
115
115
  os.makedirs(settings.MEDIA_ROOT, exist_ok=True)
116
116
  os.makedirs(os.path.join(settings.MEDIA_ROOT, "devicetype-images"), exist_ok=True)
117
117
  os.makedirs(os.path.join(settings.MEDIA_ROOT, "image-attachments"), exist_ok=True)
118
- os.makedirs(os.path.join(settings.NAUTOBOT_UI_DIR, "build", "static"), exist_ok=True)
119
118
  os.makedirs(settings.STATIC_ROOT, exist_ok=True)
120
119
 
121
120
  #
@@ -1,7 +1,6 @@
1
1
  from django.conf import settings as django_settings
2
2
 
3
3
  from nautobot.core.settings_funcs import sso_auth_enabled
4
- from nautobot.core.utils.navigation import is_route_new_ui_ready
5
4
 
6
5
 
7
6
  def get_saml_idp():
@@ -21,7 +20,7 @@ def get_saml_idp():
21
20
  value = ""
22
21
  if idp_map is not None:
23
22
  try:
24
- idp = list(idp_map.keys())[0]
23
+ idp = next(iter(idp_map.keys()))
25
24
  except IndexError:
26
25
  pass
27
26
  else:
@@ -35,9 +34,6 @@ def settings(request):
35
34
  Expose Django settings in the template context. Example: {{ settings.DEBUG }}
36
35
  """
37
36
  root_template = "base_django.html"
38
- if django_settings.ENABLE_ALPHA_UI:
39
- use_new_ui = request.COOKIES.get("newui", False) and is_route_new_ui_ready(request.path)
40
- root_template = "base_react.html" if use_new_ui else "base_django.html"
41
37
  return {
42
38
  "settings": django_settings,
43
39
  "root_template": root_template,
nautobot/core/factory.py CHANGED
@@ -1,11 +1,11 @@
1
1
  from ipaddress import IPv6Address, IPV6LENGTH, IPv6Network
2
+ import itertools
2
3
 
3
4
  from django.db.models import Model
4
5
  import factory
5
6
  from factory.django import DjangoModelFactory
6
- from faker.providers import BaseProvider
7
7
  import factory.random
8
- import itertools
8
+ from faker.providers import BaseProvider
9
9
 
10
10
  from nautobot.core import constants
11
11
  from nautobot.extras.models import Tag
nautobot/core/filters.py CHANGED
@@ -634,7 +634,7 @@ class BaseFilterSet(django_filters.FilterSet):
634
634
  if getattr(field, "null", None):
635
635
  # Use this method vs extend as the `lookup_map` variable is generally one of
636
636
  # the constants which we do not want to update
637
- lookup_map = dict(lookup_map, **{"isnull": "isnull"})
637
+ lookup_map = dict(lookup_map, isnull="isnull")
638
638
 
639
639
  # Create new filters for each lookup expression in the map
640
640
  for lookup_name, lookup_expr in lookup_map.items():
@@ -8,15 +8,13 @@ from django.contrib.contenttypes.models import ContentType
8
8
  from django.contrib.postgres.forms import SimpleArrayField
9
9
  from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist, ValidationError
10
10
  from django.db.models import Q
11
- from django.forms.fields import BoundField, InvalidJSONInput
12
- from django.forms.fields import JSONField as _JSONField
11
+ from django.forms.fields import BoundField, InvalidJSONInput, JSONField as _JSONField
13
12
  from django.urls import reverse
14
13
  import django_filters
15
14
  from netaddr import EUI
16
15
  from netaddr.core import AddrFormatError
17
16
 
18
- from nautobot.core import choices as core_choices
19
- from nautobot.core import forms
17
+ from nautobot.core import choices as core_choices, forms
20
18
  from nautobot.core.forms import widgets
21
19
  from nautobot.core.models import validators
22
20
  from nautobot.core.utils import data as data_utils, lookup
@@ -7,7 +7,7 @@ from django.forms import formset_factory
7
7
  from django.urls import reverse
8
8
  import yaml
9
9
 
10
- from nautobot.core.utils.filtering import build_lookup_label, get_filterset_parameter_form_field, get_filter_field_label
10
+ from nautobot.core.utils.filtering import build_lookup_label, get_filter_field_label, get_filterset_parameter_form_field
11
11
  from nautobot.ipam import formfields
12
12
 
13
13
  __all__ = (
@@ -1,5 +1,5 @@
1
- from django.apps import apps
2
1
  from django import forms
2
+ from django.apps import apps
3
3
 
4
4
  from nautobot.core.forms import BootstrapMixin
5
5
 
@@ -113,7 +113,7 @@ def add_blank_choice(choices):
113
113
  """
114
114
  Add a blank choice to the beginning of a choices list.
115
115
  """
116
- return ((None, "---------"),) + tuple(choices)
116
+ return ((None, "---------"), *tuple(choices))
117
117
 
118
118
 
119
119
  def form_from_model(model, fields):
@@ -1,12 +1,11 @@
1
1
  from django.test.client import RequestFactory
2
-
3
- from nautobot.extras.models import GraphQLQuery
4
-
5
2
  from graphene.types import Scalar
6
3
  from graphene_django.settings import graphene_settings
7
4
  from graphql import get_default_backend
8
5
  from graphql.language import ast
9
6
 
7
+ from nautobot.extras.models import GraphQLQuery
8
+
10
9
 
11
10
  def execute_query(query, variables=None, request=None, user=None):
12
11
  """Execute a query from the ORM.
@@ -7,7 +7,7 @@ import graphene_django_optimizer as gql_optimizer
7
7
  from graphql import GraphQLError
8
8
 
9
9
  from nautobot.core.graphql.types import OptimizedNautobotObjectType
10
- from nautobot.core.graphql.utils import str_to_var_name, get_filtering_args_from_filterset
10
+ from nautobot.core.graphql.utils import get_filtering_args_from_filterset, str_to_var_name
11
11
  from nautobot.core.utils.lookup import get_filterset_for_model
12
12
  from nautobot.extras.choices import RelationshipSideChoices
13
13
  from nautobot.extras.models import RelationshipAssociation