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
@@ -16,7 +16,7 @@ def render_with_template_if_exist(context, template, fallback): # pylint: disab
16
16
  text = fallback
17
17
  try:
18
18
  text = render_to_string(template, context)
19
- except Exception:
19
+ except Exception: # noqa: S110 # try-except-pass -- generally an antipattern, but it's intentional here
20
20
  pass
21
21
  return text
22
22
 
@@ -36,7 +36,7 @@ def language_selector(context):
36
36
  context["i18n_is_set"] = True
37
37
  try:
38
38
  output = render_to_string(template_, context)
39
- except Exception:
39
+ except Exception: # noqa: S110 # try-except-pass -- generally an antipattern, but it's intentional here
40
40
  pass
41
41
  return output
42
42
 
@@ -96,7 +96,10 @@ def render_app_label(context, app, fallback=""):
96
96
 
97
97
  @register.simple_tag(takes_context=True)
98
98
  def render_app_description(
99
- context, app, fallback="", template="/admin_app_description.html" # pylint: disable=redefined-outer-name
99
+ context,
100
+ app,
101
+ fallback="",
102
+ template="/admin_app_description.html", # pylint: disable=redefined-outer-name
100
103
  ):
101
104
  """Render the application description using the default template name. If it cannot find a
102
105
  template matching the given path, fallback to the fallback argument.
@@ -1,8 +1,8 @@
1
1
  from django import template
2
2
  from django.urls import NoReverseMatch, reverse
3
3
 
4
- from nautobot.core.views import utils as views_utils
5
4
  from nautobot.core.utils import lookup
5
+ from nautobot.core.views import utils as views_utils
6
6
  from nautobot.extras import models
7
7
 
8
8
  register = template.Library()
@@ -6,11 +6,11 @@ import re
6
6
  from django import template
7
7
  from django.conf import settings
8
8
  from django.contrib.staticfiles.finders import find
9
- from django.templatetags.static import StaticNode, static
9
+ from django.templatetags.static import static, StaticNode
10
10
  from django.urls import NoReverseMatch, reverse
11
11
  from django.utils.html import format_html, strip_tags
12
- from django.utils.text import slugify as django_slugify
13
12
  from django.utils.safestring import mark_safe
13
+ from django.utils.text import slugify as django_slugify
14
14
  from django_jinja import library
15
15
  from markdown import markdown
16
16
  import yaml
@@ -18,9 +18,9 @@ import yaml
18
18
  from nautobot.apps.config import get_app_settings_or_config
19
19
  from nautobot.core import forms
20
20
  from nautobot.core.utils import color, config, data, lookup
21
- from nautobot.core.utils.navigation import is_route_new_ui_ready
22
21
  from nautobot.core.utils.requests import add_nautobot_version_query_param_to_url
23
22
 
23
+ # S308 is suspicious-mark-safe-usage, but these are all using static strings that we know to be safe
24
24
  HTML_TRUE = mark_safe('<span class="text-success"><i class="mdi mdi-check-bold" title="Yes"></i></span>') # noqa: S308
25
25
  HTML_FALSE = mark_safe('<span class="text-danger"><i class="mdi mdi-close-thick" title="No"></i></span>') # noqa: S308
26
26
  HTML_NONE = mark_safe('<span class="text-muted">&mdash;</span>') # noqa: S308
@@ -124,7 +124,7 @@ def add_html_id(element_str, id_str):
124
124
  match = re.match(r"^(.*?<\w+) ?(.*)$", element_str, flags=re.DOTALL)
125
125
  if not match:
126
126
  return element_str
127
- return mark_safe(match.group(1) + format_html(' id="{}" ', id_str) + match.group(2)) # noqa: S308
127
+ return mark_safe(match.group(1) + format_html(' id="{}" ', id_str) + match.group(2)) # noqa: S308 # suspicious-mark-safe-usage
128
128
 
129
129
 
130
130
  @library.filter()
@@ -181,7 +181,7 @@ def render_markdown(value):
181
181
  # Render Markdown
182
182
  html = markdown(value, extensions=["fenced_code", "tables"])
183
183
 
184
- return mark_safe(html) # noqa: S308
184
+ return mark_safe(html) # noqa: S308 # suspicious-mark-safe-usage, OK here since we sanitized the string earlier
185
185
 
186
186
 
187
187
  @library.filter()
@@ -779,14 +779,3 @@ def queryset_to_pks(obj):
779
779
  result = list(obj.values_list("pk", flat=True)) if obj else []
780
780
  result = [str(entry) for entry in result]
781
781
  return ",".join(result)
782
-
783
-
784
- #
785
- # Navigation
786
- #
787
-
788
-
789
- @register.filter()
790
- def is_new_ui_ready(url_path):
791
- """Return True if url_path is NewUI Ready else False"""
792
- return is_route_new_ui_ready(url_path)
@@ -1,8 +1,7 @@
1
1
  import collections
2
2
 
3
3
  from django.contrib.auth import get_user_model
4
- from django.test import TransactionTestCase as _TransactionTestCase
5
- from django.test import tag
4
+ from django.test import tag, TransactionTestCase as _TransactionTestCase
6
5
 
7
6
  from nautobot.core.testing.api import APITestCase, APIViewTestCases
8
7
  from nautobot.core.testing.filters import FilterTestCases
@@ -10,8 +10,8 @@ from django.test import override_settings, tag
10
10
  from django.urls import reverse
11
11
  from django.utils.text import slugify
12
12
  from rest_framework import status
13
- from rest_framework.test import APITransactionTestCase as _APITransactionTestCase
14
13
  from rest_framework.relations import ManyRelatedField
14
+ from rest_framework.test import APITransactionTestCase as _APITransactionTestCase
15
15
 
16
16
  from nautobot.core import testing
17
17
  from nautobot.core.api.utils import get_serializer_for_model
@@ -21,9 +21,7 @@ from nautobot.core.templatetags.helpers import bettertitle
21
21
  from nautobot.core.testing import mixins, views
22
22
  from nautobot.core.utils import lookup
23
23
  from nautobot.core.utils.data import is_uuid
24
- from nautobot.extras import choices as extras_choices
25
- from nautobot.extras import models as extras_models
26
- from nautobot.extras import registry
24
+ from nautobot.extras import choices as extras_choices, models as extras_models, registry
27
25
  from nautobot.users import models as users_models
28
26
 
29
27
  __all__ = (
@@ -39,7 +39,7 @@ class FilterTestCases:
39
39
  values_with_count = queryset.values(field_name).annotate(count=Count(field_name)).order_by("count")
40
40
  for value in values_with_count:
41
41
  # randomly break out of loop after 2 values have been selected
42
- if len(test_values) > 1 and random.choice([True, False]):
42
+ if len(test_values) > 1 and random.choice([True, False]): # noqa: S311 # suspicious-non-cryptographic-random-usage
43
43
  break
44
44
  if value[field_name] and value["count"] < qs_count:
45
45
  qs_count -= value["count"]
@@ -67,7 +67,7 @@ class SeleniumTestCase(StaticLiveServerTestCase, testing.NautobotTestCaseMixin):
67
67
  so there is no need to run `collectstatic` prior to running tests.
68
68
  """
69
69
 
70
- host = "0.0.0.0" # Always listen publicly
70
+ host = "0.0.0.0" # noqa: S104 # hardcoded-bind-all-interfaces -- false positive
71
71
  selenium_host = SELENIUM_HOST # Docker: `nautobot`; else `host.docker.internal`
72
72
 
73
73
  @classmethod
@@ -86,7 +86,7 @@ class SeleniumTestCase(StaticLiveServerTestCase, testing.NautobotTestCaseMixin):
86
86
  def setUp(self):
87
87
  super().setUpNautobot(populate_status=True)
88
88
 
89
- self.password = "testpassword"
89
+ self.password = "testpassword" # noqa: S105 # hardcoded-password-string
90
90
  self.user.set_password(self.password)
91
91
  self.user.save()
92
92
 
@@ -1,4 +1,5 @@
1
1
  from unittest import skip
2
+
2
3
  from django.apps import apps
3
4
  from django.core.management import call_command
4
5
  from django.db import connection
@@ -13,8 +13,7 @@ from rest_framework.test import APIClient, APIRequestFactory
13
13
  from nautobot.core import testing
14
14
  from nautobot.core.models import fields as core_fields
15
15
  from nautobot.core.utils import permissions
16
- from nautobot.extras import management
17
- from nautobot.extras import models as extras_models
16
+ from nautobot.extras import management, models as extras_models
18
17
  from nautobot.users import models as users_models
19
18
 
20
19
  # Use the proper swappable User model
@@ -1,10 +1,10 @@
1
1
  from io import StringIO
2
- import yaml
3
2
 
4
3
  from django.conf import settings
5
4
  from django.core.management import call_command
6
5
  from django.test import tag
7
6
  from rest_framework.settings import api_settings
7
+ import yaml
8
8
 
9
9
  from nautobot.core.testing import views
10
10
 
@@ -99,7 +99,7 @@ def disable_warnings(logger_name):
99
99
 
100
100
  def get_deletable_objects(model, queryset):
101
101
  """
102
- Returns a queryset of objects in the supplied queryset that have no protected relationships that would prevent deletion.
102
+ Returns a subset of objects in the given queryset that have no protected relationships that would prevent deletion.
103
103
  """
104
104
  q = Q()
105
105
  for field in model._meta.get_fields(include_parents=True):
@@ -113,7 +113,7 @@ def get_deletable_objects(model, queryset):
113
113
 
114
114
  def generate_random_device_asset_tag_of_specified_size(size):
115
115
  """
116
- This function is for testing purposes only and it will return a random string of size 100 consists of letters and numbers.
116
+ For testing purposes only; it returns a random string of size 100 consisting of letters and numbers.
117
117
  """
118
- asset_tag = "".join(random.choices(string.ascii_letters + string.digits, k=size))
118
+ asset_tag = "".join(random.choices(string.ascii_letters + string.digits, k=size)) # noqa: S311 # suspicious-non-cryptographic-random-usage
119
119
  return asset_tag
@@ -9,11 +9,10 @@ from django.contrib.contenttypes.models import ContentType
9
9
  from django.core.exceptions import ObjectDoesNotExist, ValidationError
10
10
  from django.core.files.uploadedfile import SimpleUploadedFile
11
11
  from django.core.validators import URLValidator
12
- from django.test import TestCase as _TestCase
13
- from django.test import override_settings, tag
12
+ from django.test import override_settings, tag, TestCase as _TestCase
14
13
  from django.urls import NoReverseMatch, reverse
15
- from django.utils.http import urlencode
16
14
  from django.utils.html import escape
15
+ from django.utils.http import urlencode
17
16
  from django.utils.text import slugify
18
17
  from tree_queries.models import TreeNode
19
18
 
@@ -21,9 +20,7 @@ from nautobot.core import testing
21
20
  from nautobot.core.templatetags import helpers
22
21
  from nautobot.core.testing import mixins
23
22
  from nautobot.core.utils import lookup
24
- from nautobot.extras import choices as extras_choices
25
- from nautobot.extras import models as extras_models
26
- from nautobot.extras import querysets as extras_querysets
23
+ from nautobot.extras import choices as extras_choices, models as extras_models, querysets as extras_querysets
27
24
  from nautobot.users import models as users_models
28
25
 
29
26
  __all__ = (
@@ -1155,7 +1152,7 @@ class ViewTestCases:
1155
1152
  def test_bulk_edit_objects_with_constrained_permission(self):
1156
1153
  # Select some objects that are *not* already set to match the first value in self.bulk_edit_data or null.
1157
1154
  # We have to exclude null cases because Django filter()/exclude() doesn't like `__in=[None]` as a case.
1158
- attr_name = list(self.bulk_edit_data.keys())[0]
1155
+ attr_name = next(iter(self.bulk_edit_data.keys()))
1159
1156
  objects = (
1160
1157
  self._get_queryset()
1161
1158
  .exclude(**{attr_name: self.bulk_edit_data[attr_name]})
@@ -1,6 +1,7 @@
1
- from django.conf import settings
2
1
  from unittest import skipIf
3
2
 
3
+ from django.conf import settings
4
+
4
5
  from nautobot.circuits.models import Circuit, Provider
5
6
  from nautobot.core.testing.integration import SeleniumTestCase
6
7
  from nautobot.dcim.models import Location, PowerFeed, PowerPanel
@@ -1,8 +1,8 @@
1
1
  from unittest import skipIf
2
2
 
3
3
  from django.conf import settings
4
- from nautobot.core.choices import ButtonActionColorChoices, ButtonActionIconChoices
5
4
 
5
+ from nautobot.core.choices import ButtonActionColorChoices, ButtonActionIconChoices
6
6
  from nautobot.core.testing.integration import SeleniumTestCase
7
7
 
8
8
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  import os
7
7
 
8
- from nautobot.core.settings import * # noqa: F401,F403
8
+ from nautobot.core.settings import * # noqa: F403 # undefined-local-with-import-star
9
9
  from nautobot.core.settings_funcs import parse_redis_connection
10
10
 
11
11
  ALLOWED_HOSTS = ["nautobot.example.com"]
@@ -22,12 +22,12 @@ PLUGINS = [
22
22
  ]
23
23
 
24
24
  # Hard-code the SECRET_KEY for simplicity
25
- SECRET_KEY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
25
+ SECRET_KEY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" # noqa: S105 # hardcoded-password-string
26
26
 
27
27
  # Redis variables
28
28
 
29
29
  # Use *different* redis_databases than the ones (0 and 1) used during non-automated-testing operations.
30
- CACHES["default"]["LOCATION"] = parse_redis_connection(redis_database=2) # noqa: F405
30
+ CACHES["default"]["LOCATION"] = parse_redis_connection(redis_database=2) # noqa: F405 # undefined-local-with-import-star-usage
31
31
 
32
32
  # Testing storages within cli.py
33
33
  STORAGE_CONFIG = {
@@ -1,8 +1,7 @@
1
- import yaml
2
-
3
- from django.core.management import call_command
4
1
  from django.conf import settings
2
+ from django.core.management import call_command
5
3
  from django.test.runner import DiscoverRunner
4
+ import yaml
6
5
 
7
6
  from nautobot.core.celery import app, setup_nautobot_job_logging
8
7
 
@@ -67,7 +66,7 @@ class NautobotTestRunner(DiscoverRunner):
67
66
  for connection in result:
68
67
  db_name = connection[0].alias
69
68
  print(f'Pre-populating test database "{db_name}" with factory data...')
70
- db_command = command + ["--database", db_name]
69
+ db_command = [*command, "--database", db_name]
71
70
  call_command(*db_command)
72
71
 
73
72
  return result
@@ -3,14 +3,13 @@ from io import BytesIO, StringIO
3
3
  import json
4
4
  from unittest import skip
5
5
 
6
- from django.contrib.contenttypes.models import ContentType
6
+ from constance import config
7
+ from constance.test import override_config
7
8
  from django.conf import settings
8
9
  from django.contrib.auth import get_user_model
9
- from django.test import RequestFactory, override_settings, TestCase
10
+ from django.contrib.contenttypes.models import ContentType
11
+ from django.test import override_settings, RequestFactory, TestCase
10
12
  from django.urls import reverse
11
-
12
- from constance import config
13
- from constance.test import override_config
14
13
  from rest_framework import status
15
14
  from rest_framework.exceptions import ParseError
16
15
  from rest_framework.settings import api_settings
@@ -23,12 +22,10 @@ from nautobot.core.api.versioning import NautobotAPIVersioning
23
22
  from nautobot.core.constants import COMPOSITE_KEY_SEPARATOR
24
23
  from nautobot.dcim import models as dcim_models
25
24
  from nautobot.dcim.api import serializers as dcim_serializers
26
- from nautobot.extras import choices
27
- from nautobot.extras import models as extras_models
25
+ from nautobot.extras import choices, models as extras_models
28
26
  from nautobot.ipam import models as ipam_models
29
27
  from nautobot.ipam.api import serializers as ipam_serializers
30
28
 
31
-
32
29
  User = get_user_model()
33
30
 
34
31
 
@@ -495,7 +492,7 @@ class NautobotCSVRendererTest(TestCase):
495
492
 
496
493
  # Make sure a) it's well-constructed parsable CSV and b) it contains what we expect it to, within reason
497
494
  reader = csv.DictReader(StringIO(csv_text))
498
- read_data = list(reader)[0]
495
+ read_data = next(iter(reader))
499
496
  self.assertIn("id", read_data)
500
497
  self.assertEqual(read_data["id"], str(location_type.id))
501
498
  self.assertIn("display", read_data)
@@ -925,45 +922,3 @@ class NewUIGetMenuAPIViewTestCase(testing.APITestCase):
925
922
 
926
923
  self.assertEqual(response.status_code, 200)
927
924
  self.assertEqual(response.data, expected_response)
928
-
929
-
930
- class GetSettingsAPIViewTestCase(testing.APITestCase):
931
- def test_get_settings(self):
932
- """Assert get settings value"""
933
- url = reverse("ui-api:settings")
934
-
935
- with self.subTest("Test get allowed settings"):
936
- url_with_filters = f"{url}?name=FEEDBACK_BUTTON_ENABLED"
937
- response = self.client.get(url_with_filters, **self.header)
938
- self.assertEqual(response.status_code, 200)
939
- expected_response = {"FEEDBACK_BUTTON_ENABLED": True}
940
- self.assertEqual(response.data, expected_response)
941
- with self.subTest("Test get not-allowed settings"):
942
- url_with_filters = f"{url}?name=NAPALM_PASSWORD"
943
- response = self.client.get(url_with_filters, **self.header)
944
- self.assertEqual(response.status_code, 400)
945
- expected_response = {"error": "Invalid settings names specified: NAPALM_PASSWORD."}
946
- self.assertEqual(response.data, expected_response)
947
-
948
-
949
- class NewUIReadyRoutesAPIViewTestCase(testing.APITestCase):
950
- def test_new_ui_ready_routes(self):
951
- """Assert get settings value"""
952
- url = reverse("ui-api:new-ui-ready-routes")
953
- response = self.client.get(url, **self.header)
954
- self.assertEqual(response.status_code, 200)
955
- expected_response = [
956
- "^$",
957
- "^login\\/$",
958
- "^dcim\\/device\\-types\\/$",
959
- "^dcim\\/device\\-types\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
960
- "^dcim\\/devices\\/$",
961
- "^dcim\\/devices\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
962
- "^dcim\\/locations\\/$",
963
- "^dcim\\/locations\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
964
- "^ipam\\/ip\\-addresses\\/$",
965
- "^ipam\\/ip\\-addresses\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
966
- "^ipam\\/prefixes\\/$",
967
- "^ipam\\/prefixes\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\\/$",
968
- ]
969
- self.assertEqual(sorted(response.data), sorted(expected_response))
@@ -12,10 +12,9 @@ from nautobot.core.settings_funcs import sso_auth_enabled
12
12
  from nautobot.core.testing import NautobotTestClient, TestCase
13
13
  from nautobot.dcim.models import Location, LocationType
14
14
  from nautobot.extras.models import Status
15
- from nautobot.ipam.models import Prefix, Namespace
15
+ from nautobot.ipam.models import Namespace, Prefix
16
16
  from nautobot.users.models import ObjectPermission, Token
17
17
 
18
-
19
18
  # Use the proper swappable User model
20
19
  User = get_user_model()
21
20
 
@@ -51,7 +50,7 @@ class ExternalAuthenticationTestCase(TestCase):
51
50
  self.assertEqual(settings.REMOTE_AUTH_HEADER, "HTTP_REMOTE_USER")
52
51
 
53
52
  # Client should not be authenticated
54
- self.client.get(reverse("home"), follow=True, **headers) # noqa
53
+ self.client.get(reverse("home"), follow=True, **headers)
55
54
  self.assertNotIn("_auth_user_id", self.client.session)
56
55
 
57
56
  @override_settings(AUTHENTICATION_BACKENDS=TEST_AUTHENTICATION_BACKENDS)
@@ -1,5 +1,4 @@
1
- from django.test import TestCase
2
- from django.test import override_settings
1
+ from django.test import override_settings, TestCase
3
2
 
4
3
  from nautobot.core import checks
5
4
 
@@ -1,7 +1,7 @@
1
1
  """Test cases for nautobot.core.config module."""
2
2
 
3
3
  from constance.test import override_config
4
- from django.test import TestCase, override_settings
4
+ from django.test import override_settings, TestCase
5
5
 
6
6
  from nautobot.apps import config as app_config
7
7
  from nautobot.core.utils import config
@@ -1,8 +1,8 @@
1
- from django.test import RequestFactory, TestCase, override_settings
2
- from django.urls import reverse
3
- from nautobot.core.constants import CSV_NULL_TYPE, CSV_NO_OBJECT, VARBINARY_IP_FIELD_REPR_OF_CSV_NO_OBJECT
4
1
  from django.contrib.contenttypes.models import ContentType
2
+ from django.test import override_settings, RequestFactory, TestCase
3
+ from django.urls import reverse
5
4
 
5
+ from nautobot.core.constants import CSV_NO_OBJECT, CSV_NULL_TYPE, VARBINARY_IP_FIELD_REPR_OF_CSV_NO_OBJECT
6
6
  from nautobot.dcim.api.serializers import DeviceSerializer
7
7
  from nautobot.dcim.models.devices import Device, DeviceType
8
8
  from nautobot.dcim.models.locations import Location
@@ -2,9 +2,7 @@ import itertools
2
2
 
3
3
  import factory as factoryboy
4
4
 
5
- from nautobot.core import constants
6
- from nautobot.core import factory
7
- from nautobot.core import testing
5
+ from nautobot.core import constants, factory, testing
8
6
 
9
7
 
10
8
  class FactoryTestCase(testing.TestCase):
@@ -7,7 +7,6 @@ from django.db import models as django_models
7
7
  from django.shortcuts import reverse
8
8
  from django.test import TestCase
9
9
  from django.test.utils import isolate_apps
10
-
11
10
  import django_filters
12
11
  from tree_queries.models import TreeNodeForeignKey
13
12
 
@@ -16,14 +15,11 @@ from nautobot.circuits.models import Circuit, CircuitType, Provider
16
15
  from nautobot.core import filters, testing
17
16
  from nautobot.core.models import fields as core_fields
18
17
  from nautobot.core.utils import lookup
19
- from nautobot.dcim import choices as dcim_choices
20
- from nautobot.dcim import filters as dcim_filters
21
- from nautobot.dcim import models as dcim_models
18
+ from nautobot.dcim import choices as dcim_choices, filters as dcim_filters, models as dcim_models
22
19
  from nautobot.dcim.models import Device
23
20
  from nautobot.extras import models as extras_models
24
21
  from nautobot.extras.utils import FeatureQuery
25
- from nautobot.ipam import factory as ipam_factory
26
- from nautobot.ipam import models as ipam_models
22
+ from nautobot.ipam import factory as ipam_factory, models as ipam_models
27
23
 
28
24
 
29
25
  class TreeNodeMultipleChoiceFilterTest(TestCase):
@@ -416,7 +412,7 @@ class BaseFilterSetTest(TestCase):
416
412
  class TestFilterSet(filters.BaseFilterSet):
417
413
  """Filterset for testing various fields."""
418
414
 
419
- class TestModel(django_models.Model):
415
+ class TestModel(django_models.Model): # noqa: DJ008 # django-model-without-dunder-str -- fine since this isn't a "real" model
420
416
  """
421
417
  Test model used by BaseFilterSetTest for filter validation. Should never appear in a schema migration.
422
418
  """
@@ -9,13 +9,10 @@ from netaddr import IPNetwork
9
9
 
10
10
  from nautobot.core import filters, forms, testing
11
11
  from nautobot.core.utils import requests
12
- from nautobot.dcim import filters as dcim_filters, forms as dcim_forms
13
- from nautobot.dcim import models as dcim_models
12
+ from nautobot.dcim import filters as dcim_filters, forms as dcim_forms, models as dcim_models
14
13
  from nautobot.dcim.tests import test_views
15
- from nautobot.extras import filters as extras_filters
16
- from nautobot.extras import models as extras_models
17
- from nautobot.ipam import forms as ipam_forms
18
- from nautobot.ipam import models as ipam_models
14
+ from nautobot.extras import filters as extras_filters, models as extras_models
15
+ from nautobot.ipam import forms as ipam_forms, models as ipam_models
19
16
 
20
17
 
21
18
  class SearchFormTestCase(TestCase):
@@ -8,18 +8,17 @@ from django.contrib.auth import get_user_model
8
8
  from django.contrib.auth.models import Group
9
9
  from django.contrib.contenttypes.models import ContentType
10
10
  from django.db.models import Q
11
- from django.test import TestCase, override_settings
11
+ from django.test import override_settings, TestCase
12
12
  from django.test.client import RequestFactory
13
13
  from django.urls import reverse
14
- from graphql import GraphQLError
15
14
  import graphene.types
16
- from graphene_django.settings import graphene_settings
17
15
  from graphene_django.registry import get_global_registry
16
+ from graphene_django.settings import graphene_settings
17
+ from graphql import get_default_backend, GraphQLError
18
18
  from graphql.error.located_error import GraphQLLocatedError
19
- from graphql import get_default_backend
20
19
  from rest_framework import status
21
20
 
22
- from nautobot.circuits.models import Provider, CircuitTermination
21
+ from nautobot.circuits.models import CircuitTermination, Provider
23
22
  from nautobot.core.graphql import execute_query, execute_saved_query
24
23
  from nautobot.core.graphql.generators import (
25
24
  generate_list_search_parameters,
@@ -27,16 +26,16 @@ from nautobot.core.graphql.generators import (
27
26
  )
28
27
  from nautobot.core.graphql.schema import (
29
28
  extend_schema_type,
30
- extend_schema_type_custom_field,
31
- extend_schema_type_tags,
32
29
  extend_schema_type_config_context,
33
- extend_schema_type_relationships,
30
+ extend_schema_type_custom_field,
34
31
  extend_schema_type_null_field_choice,
32
+ extend_schema_type_relationships,
33
+ extend_schema_type_tags,
35
34
  )
36
35
  from nautobot.core.graphql.types import OptimizedNautobotObjectType
37
36
  from nautobot.core.graphql.utils import str_to_var_name
38
- from nautobot.core.testing import NautobotTestClient, create_test_user
39
- from nautobot.dcim.choices import InterfaceTypeChoices, InterfaceModeChoices, PortTypeChoices, ConsolePortTypeChoices
37
+ from nautobot.core.testing import create_test_user, NautobotTestClient
38
+ from nautobot.dcim.choices import ConsolePortTypeChoices, InterfaceModeChoices, InterfaceTypeChoices, PortTypeChoices
40
39
  from nautobot.dcim.filters import DeviceFilterSet, LocationFilterSet
41
40
  from nautobot.dcim.graphql.types import DeviceType as DeviceTypeGraphQL
42
41
  from nautobot.dcim.models import (
@@ -52,17 +51,17 @@ from nautobot.dcim.models import (
52
51
  Location,
53
52
  LocationType,
54
53
  PowerFeed,
55
- PowerPort,
56
54
  PowerOutlet,
57
55
  PowerPanel,
56
+ PowerPort,
58
57
  Rack,
59
58
  RearPort,
60
59
  )
61
60
  from nautobot.extras.choices import CustomFieldTypeChoices
62
61
  from nautobot.extras.models import (
63
62
  ChangeLoggedModel,
64
- CustomField,
65
63
  ConfigContext,
64
+ CustomField,
66
65
  GraphQLQuery,
67
66
  Relationship,
68
67
  RelationshipAssociation,
@@ -82,8 +81,8 @@ from nautobot.ipam.models import (
82
81
  VRFDeviceAssignment,
83
82
  VRFPrefixAssignment,
84
83
  )
85
- from nautobot.users.models import ObjectPermission, Token
86
84
  from nautobot.tenancy.models import Tenant
85
+ from nautobot.users.models import ObjectPermission, Token
87
86
  from nautobot.virtualization.factory import ClusterTypeFactory
88
87
  from nautobot.virtualization.models import Cluster, VirtualMachine, VMInterface
89
88
 
@@ -708,7 +707,7 @@ class GraphQLQueryTest(TestCase):
708
707
  roles = Role.objects.get_for_model(Device)
709
708
  cls.device_role1 = roles[0]
710
709
  cls.device_role2 = roles[1]
711
- cls.device_role3 = random.choice(roles)
710
+ cls.device_role3 = random.choice(roles) # noqa: S311 # suspicious-non-cryptographic-random-usage
712
711
  cls.location_statuses = list(Status.objects.get_for_model(Location))[:2]
713
712
  cls.location_type = LocationType.objects.get(name="Campus")
714
713
  cls.location1 = Location.objects.filter(location_type=cls.location_type).first()
@@ -47,17 +47,17 @@ class NautobotJinjaFilterTest(TestCase):
47
47
  "slugify",
48
48
  ]
49
49
 
50
- # For each helper, try to render a jinja template with render_jinja2 and fail if TemplateAssertionError is raised
50
+ # For each helper, try to render jinja template with render_jinja2 and fail if TemplateAssertionError is raised
51
51
  for helper in helpers_to_validate:
52
52
  try:
53
53
  data.render_jinja2("{{ data | " + helper + " }}", {"data": None})
54
54
  except TemplateAssertionError:
55
55
  raise
56
- except Exception:
56
+ except Exception: # noqa: S110 # try-except-pass -- an antipattern in general, but OK here
57
57
  pass
58
58
 
59
59
  def test_netutils_filters_in_jinja(self):
60
- """Import the list of all Jinja filters from Netutils and validate that all of them have been properly loaded in Django Jinja"""
60
+ """Import all Jinja filters from Netutils and validate that all have been properly loaded in Django Jinja."""
61
61
  filters = jinja2_convenience_function()
62
62
 
63
63
  for filter_ in filters.keys():
@@ -65,7 +65,7 @@ class NautobotJinjaFilterTest(TestCase):
65
65
  data.render_jinja2("{{ data | " + filter_ + " }}", {"data": None})
66
66
  except TemplateAssertionError:
67
67
  raise
68
- except Exception:
68
+ except Exception: # noqa: S110 # try-except-pass -- an antipattern in general, but OK here
69
69
  pass
70
70
 
71
71
  def test_sandboxed_render(self):
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
  from django.contrib.contenttypes.models import ContentType
4
4
  import yaml
5
5
 
6
- from nautobot.core.testing import TransactionTestCase, create_job_result_and_run_job
6
+ from nautobot.core.testing import create_job_result_and_run_job, TransactionTestCase
7
7
  from nautobot.dcim.models import DeviceType, Manufacturer
8
8
  from nautobot.extras.choices import JobResultStatusChoices, LogLevelChoices
9
9
  from nautobot.extras.models import ExportTemplate, JobLogEntry, Status
@@ -1,8 +1,7 @@
1
1
  import time
2
- import uuid
3
-
4
2
  from unittest import skip
5
3
  from unittest.mock import patch
4
+ import uuid
6
5
 
7
6
  from django.core.cache import cache
8
7
  from django.core.exceptions import ValidationError