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
@@ -1,13 +1,15 @@
1
1
  # Generated by Django 3.2.22 on 2023-11-01 21:29
2
2
 
3
+ import uuid
4
+
3
5
  import django.core.serializers.json
4
6
  import django.core.validators
5
7
  from django.db import migrations, models
6
8
  import django.db.models.deletion
9
+
7
10
  import nautobot.core.models.fields
8
11
  import nautobot.core.models.validators
9
12
  import nautobot.extras.models.mixins
10
- import uuid
11
13
 
12
14
 
13
15
  class Migration(migrations.Migration):
@@ -1,6 +1,4 @@
1
1
  from .change_logging import ChangeLoggedModel, ObjectChange
2
- from .roles import Role, RoleField
3
- from .statuses import Status, StatusField, StatusModel
4
2
  from .customfields import ComputedField, CustomField, CustomFieldChoice, CustomFieldModel
5
3
  from .datasources import GitRepository
6
4
  from .groups import DynamicGroup, DynamicGroupMembership
@@ -29,10 +27,11 @@ from .models import (
29
27
  Webhook,
30
28
  )
31
29
  from .relationships import Relationship, RelationshipAssociation, RelationshipModel
30
+ from .roles import Role, RoleField
32
31
  from .secrets import Secret, SecretsGroup, SecretsGroupAssociation
32
+ from .statuses import Status, StatusField, StatusModel
33
33
  from .tags import Tag, TaggedItem
34
34
 
35
-
36
35
  __all__ = (
37
36
  "ChangeLoggedModel",
38
37
  "ComputedField",
@@ -14,7 +14,6 @@ from nautobot.extras.choices import ObjectChangeActionChoices, ObjectChangeEvent
14
14
  from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL, CHANGELOG_MAX_OBJECT_REPR
15
15
  from nautobot.extras.utils import extras_features
16
16
 
17
-
18
17
  #
19
18
  # Change logging
20
19
  #
@@ -1,14 +1,14 @@
1
+ from collections import OrderedDict
2
+ from datetime import date, datetime
1
3
  import logging
2
4
  import re
3
- from collections import OrderedDict
4
- from datetime import datetime, date
5
5
 
6
6
  from django import forms
7
- from django.db import models, transaction
8
7
  from django.contrib.contenttypes.models import ContentType
9
8
  from django.core.exceptions import ObjectDoesNotExist
10
9
  from django.core.serializers.json import DjangoJSONEncoder
11
10
  from django.core.validators import RegexValidator, ValidationError
11
+ from django.db import models, transaction
12
12
  from django.forms.widgets import TextInput
13
13
  from django.utils.html import format_html
14
14
 
@@ -37,7 +37,7 @@ from nautobot.extras.choices import CustomFieldFilterLogicChoices, CustomFieldTy
37
37
  from nautobot.extras.models import ChangeLoggedModel
38
38
  from nautobot.extras.models.mixins import NotesMixin
39
39
  from nautobot.extras.tasks import delete_custom_field_data, update_custom_field_choice_data
40
- from nautobot.extras.utils import check_if_key_is_graphql_safe, FeatureQuery, extras_features
40
+ from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features, FeatureQuery
41
41
 
42
42
  logger = logging.getLogger(__name__)
43
43
 
@@ -10,7 +10,7 @@ from django.db import models
10
10
 
11
11
  from nautobot.core.models.fields import AutoSlugField, slugify_dashes_to_underscores
12
12
  from nautobot.core.models.generics import PrimaryModel
13
- from nautobot.extras.utils import extras_features, check_if_key_is_graphql_safe
13
+ from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features
14
14
 
15
15
 
16
16
  @extras_features(
@@ -152,8 +152,8 @@ class GitRepository(PrimaryModel):
152
152
  JobResult
153
153
  """
154
154
  from nautobot.extras.datasources import (
155
- enqueue_pull_git_repository_and_refresh_data,
156
155
  enqueue_git_repository_diff_origin_and_local,
156
+ enqueue_pull_git_repository_and_refresh_data,
157
157
  )
158
158
 
159
159
  if dry_run:
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  import pickle
5
5
 
6
- import django_filters
7
6
  from django import forms
8
7
  from django.contrib.contenttypes.models import ContentType
9
8
  from django.core.cache import cache
@@ -11,6 +10,7 @@ from django.core.exceptions import ValidationError
11
10
  from django.core.serializers.json import DjangoJSONEncoder
12
11
  from django.db import models
13
12
  from django.utils.functional import cached_property
13
+ import django_filters
14
14
 
15
15
  from nautobot.core.forms.constants import BOOLEAN_WITH_BLANK_CHOICES
16
16
  from nautobot.core.forms.fields import DynamicModelChoiceField
@@ -20,10 +20,9 @@ from nautobot.core.models.generics import OrganizationalModel
20
20
  from nautobot.core.utils.config import get_settings_or_config
21
21
  from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
22
22
  from nautobot.extras.choices import DynamicGroupOperatorChoices
23
- from nautobot.extras.querysets import DynamicGroupQuerySet, DynamicGroupMembershipQuerySet
23
+ from nautobot.extras.querysets import DynamicGroupMembershipQuerySet, DynamicGroupQuerySet
24
24
  from nautobot.extras.utils import extras_features
25
25
 
26
-
27
26
  logger = logging.getLogger(__name__)
28
27
 
29
28
 
@@ -336,7 +335,7 @@ class DynamicGroup(OrganizationalModel):
336
335
  try:
337
336
  cached_query = cache.get(self.members_cache_key)
338
337
  if cached_query is not None:
339
- unpickled_query = pickle.loads(cached_query)
338
+ unpickled_query = pickle.loads(cached_query) # noqa: S301 # suspicious-pickle-usage -- we know, but we control what's in the DB
340
339
  except pickle.UnpicklingError:
341
340
  logger.warning("Failed to unpickle cached members for %s", self)
342
341
  finally:
@@ -41,9 +41,9 @@ from nautobot.extras.constants import (
41
41
  JOB_MAX_NAME_LENGTH,
42
42
  JOB_OVERRIDABLE_FIELDS,
43
43
  )
44
+ from nautobot.extras.managers import JobResultManager, ScheduledJobsManager
44
45
  from nautobot.extras.models import ChangeLoggedModel, GitRepository
45
46
  from nautobot.extras.models.mixins import NotesMixin
46
- from nautobot.extras.managers import JobResultManager, ScheduledJobsManager
47
47
  from nautobot.extras.querysets import JobQuerySet, ScheduledJobExtendedQuerySet
48
48
  from nautobot.extras.utils import (
49
49
  ChangeLoggedModelsQuery,
@@ -52,7 +52,6 @@ from nautobot.extras.utils import (
52
52
 
53
53
  from .customfields import CustomFieldModel
54
54
 
55
-
56
55
  logger = logging.getLogger(__name__)
57
56
 
58
57
 
@@ -453,9 +452,9 @@ class JobResult(BaseModel, CustomFieldModel):
453
452
  to="extras.Job", null=True, blank=True, on_delete=models.SET_NULL, related_name="job_results"
454
453
  )
455
454
  name = models.CharField(max_length=255, db_index=True)
456
- task_name = models.CharField(
455
+ task_name = models.CharField( # noqa: DJ001 # django-nullable-model-string-field
457
456
  max_length=255,
458
- null=True,
457
+ null=True, # TODO: should this be blank=True instead?
459
458
  db_index=True,
460
459
  help_text="Registered name of the Celery task for this job. Internal use only.",
461
460
  )
@@ -479,11 +478,15 @@ class JobResult(BaseModel, CustomFieldModel):
479
478
  verbose_name="Result Data",
480
479
  help_text="The data returned by the task",
481
480
  )
482
- worker = models.CharField(max_length=100, default=None, null=True)
481
+ worker = models.CharField( # noqa: DJ001 # django-nullable-model-string-field
482
+ max_length=100,
483
+ default=None,
484
+ null=True, # TODO: should this be default="", blank=True instead?
485
+ )
483
486
  task_args = models.JSONField(blank=True, default=list, encoder=NautobotKombuJSONEncoder)
484
487
  task_kwargs = models.JSONField(blank=True, default=dict, encoder=NautobotKombuJSONEncoder)
485
488
  celery_kwargs = models.JSONField(blank=True, default=dict, encoder=NautobotKombuJSONEncoder)
486
- traceback = models.TextField(blank=True, null=True)
489
+ traceback = models.TextField(blank=True, null=True) # noqa: DJ001 # django-nullable-model-string-field -- TODO: can we remove null=True?
487
490
  meta = models.JSONField(null=True, default=None, editable=False)
488
491
  scheduled_job = models.ForeignKey(to="extras.ScheduledJob", on_delete=models.SET_NULL, null=True, blank=True)
489
492
 
@@ -797,6 +800,9 @@ class ScheduledJobs(models.Model):
797
800
 
798
801
  objects = ScheduledJobsManager()
799
802
 
803
+ def __str__(self):
804
+ return str(self.ident)
805
+
800
806
  @classmethod
801
807
  def changed(cls, instance, raw=False, **kwargs):
802
808
  """This function acts as a signal handler to track changes to the scheduled job that is triggered before a change"""
@@ -6,8 +6,8 @@ from db_file_storage.storage import DatabaseFileStorage
6
6
  from django.conf import settings
7
7
  from django.contrib.contenttypes.fields import GenericForeignKey
8
8
  from django.contrib.contenttypes.models import ContentType
9
- from django.core.files.storage import get_storage_class
10
9
  from django.core.exceptions import ValidationError
10
+ from django.core.files.storage import get_storage_class
11
11
  from django.core.serializers.json import DjangoJSONEncoder
12
12
  from django.core.validators import MinValueValidator
13
13
  from django.db import models
@@ -37,7 +37,7 @@ from nautobot.extras.querysets import ConfigContextQuerySet, NotesQuerySet
37
37
  from nautobot.extras.utils import extras_features, FeatureQuery, image_upload
38
38
 
39
39
  # Avoid breaking backward compatibility on anything that might expect these to still be defined here:
40
- from .jobs import JOB_LOGS, Job, JobLogEntry, JobResult, ScheduledJob, ScheduledJobs # noqa: F401
40
+ from .jobs import Job, JOB_LOGS, JobLogEntry, JobResult, ScheduledJob, ScheduledJobs # noqa: F401 # unused-import
41
41
 
42
42
  #
43
43
  # Config contexts
@@ -1,8 +1,8 @@
1
1
  import logging
2
2
 
3
3
  from django import forms
4
- from django.contrib.contenttypes.models import ContentType
5
4
  from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
5
+ from django.contrib.contenttypes.models import ContentType
6
6
  from django.core.exceptions import ValidationError
7
7
  from django.core.serializers.json import DjangoJSONEncoder
8
8
  from django.db import models
@@ -21,11 +21,10 @@ from nautobot.core.models.fields import AutoSlugField, slugify_dashes_to_undersc
21
21
  from nautobot.core.models.querysets import RestrictedQuerySet
22
22
  from nautobot.core.templatetags.helpers import bettertitle
23
23
  from nautobot.core.utils.lookup import get_filterset_for_model, get_route_for_model
24
- from nautobot.extras.choices import RelationshipTypeChoices, RelationshipRequiredSideChoices, RelationshipSideChoices
25
- from nautobot.extras.utils import FeatureQuery, check_if_key_is_graphql_safe, extras_features
24
+ from nautobot.extras.choices import RelationshipRequiredSideChoices, RelationshipSideChoices, RelationshipTypeChoices
26
25
  from nautobot.extras.models import ChangeLoggedModel
27
26
  from nautobot.extras.models.mixins import NotesMixin
28
-
27
+ from nautobot.extras.utils import check_if_key_is_graphql_safe, extras_features, FeatureQuery
29
28
 
30
29
  logger = logging.getLogger(__name__)
31
30
 
@@ -3,7 +3,7 @@ from django.db import models
3
3
 
4
4
  from nautobot.core.models.fields import ForeignKeyLimitedByContentTypes
5
5
  from nautobot.core.models.name_color_content_types import NameColorContentTypesModel
6
- from nautobot.extras.utils import RoleModelsQuery, extras_features
6
+ from nautobot.extras.utils import extras_features, RoleModelsQuery
7
7
 
8
8
 
9
9
  @extras_features(
@@ -3,8 +3,7 @@ import logging
3
3
  from django.core.exceptions import ValidationError
4
4
  from django.core.serializers.json import DjangoJSONEncoder
5
5
  from django.db import models
6
-
7
- from jinja2.exceptions import UndefinedError, TemplateSyntaxError
6
+ from jinja2.exceptions import TemplateSyntaxError, UndefinedError
8
7
 
9
8
  from nautobot.core.models import BaseModel
10
9
  from nautobot.core.models.generics import OrganizationalModel, PrimaryModel
@@ -14,7 +13,6 @@ from nautobot.extras.registry import registry
14
13
  from nautobot.extras.secrets.exceptions import SecretError, SecretParametersError, SecretProviderError
15
14
  from nautobot.extras.utils import extras_features
16
15
 
17
-
18
16
  logger = logging.getLogger(__name__)
19
17
 
20
18
 
@@ -11,7 +11,6 @@ from nautobot.extras.models.mixins import NotesMixin
11
11
  from nautobot.extras.models.relationships import RelationshipModel
12
12
  from nautobot.extras.utils import extras_features, TaggableClassesQuery
13
13
 
14
-
15
14
  #
16
15
  # Tags
17
16
  #
@@ -8,7 +8,6 @@ from nautobot.core.apps import (
8
8
  NavMenuTab,
9
9
  )
10
10
 
11
-
12
11
  menu_items = (
13
12
  NavMenuTab(
14
13
  name="Organization",
@@ -1,27 +1,26 @@
1
1
  import collections
2
- import inspect
3
2
  from functools import partial
4
3
  from importlib import import_module
4
+ import inspect
5
5
  from logging import getLogger
6
6
 
7
- from packaging import version
8
-
9
7
  from django.core.exceptions import ValidationError
10
8
  from django.template.loader import get_template
11
9
  from django.urls import get_resolver, URLPattern
10
+ from packaging import version
12
11
 
13
12
  from nautobot.core.apps import (
14
13
  NautobotConfig,
15
14
  NavMenuTab,
16
- register_menu_items,
17
15
  register_homepage_panels,
16
+ register_menu_items,
18
17
  )
19
- from nautobot.core.utils.deprecation import class_deprecated_in_favor_of
20
18
  from nautobot.core.signals import nautobot_database_ready
19
+ from nautobot.core.utils.deprecation import class_deprecated_in_favor_of
21
20
  from nautobot.extras.choices import BannerClassChoices
22
- from nautobot.extras.registry import registry, register_datasource_contents
23
21
  from nautobot.extras.plugins.exceptions import PluginImproperlyConfigured
24
22
  from nautobot.extras.plugins.utils import import_object
23
+ from nautobot.extras.registry import register_datasource_contents, registry
25
24
  from nautobot.extras.secrets import register_secrets_provider
26
25
 
27
26
  logger = getLogger(__name__)
@@ -462,8 +461,8 @@ def register_filter_extensions(filter_extensions, plugin_name):
462
461
  """
463
462
  Register a list of FilterExtension classes
464
463
  """
465
- from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
466
464
  from nautobot.core.forms.utils import add_field_to_filter_form_class
465
+ from nautobot.core.utils.lookup import get_filterset_for_model, get_form_for_model
467
466
 
468
467
  for filter_extension in filter_extensions:
469
468
  if not issubclass(filter_extension, FilterExtension):
@@ -1,7 +1,6 @@
1
1
  from django.contrib.auth.models import AnonymousUser
2
2
  from django.urls import reverse
3
3
  from django.utils.html import format_html
4
-
5
4
  import django_tables2 as tables
6
5
 
7
6
 
@@ -9,9 +9,9 @@ import sys
9
9
  from django.core.exceptions import ImproperlyConfigured
10
10
  from django.utils.module_loading import import_string
11
11
 
12
- from .exceptions import PluginNotFound, PluginImproperlyConfigured
13
12
  from nautobot.core.settings_funcs import ConstanceConfigItem
14
13
 
14
+ from .exceptions import PluginImproperlyConfigured, PluginNotFound
15
15
 
16
16
  # Logging object
17
17
  logger = logging.getLogger(__name__)
@@ -7,14 +7,13 @@ from django.http import Http404
7
7
  from django.shortcuts import render
8
8
  from django.urls.exceptions import NoReverseMatch
9
9
  from django.views.generic import View
10
+ from django_tables2 import RequestConfig
10
11
  from drf_spectacular.utils import extend_schema
11
12
  from rest_framework import permissions
12
13
  from rest_framework.response import Response
13
14
  from rest_framework.reverse import reverse
14
15
  from rest_framework.views import APIView
15
16
 
16
- from django_tables2 import RequestConfig
17
-
18
17
  from nautobot.core.api.views import NautobotAPIVersionMixin
19
18
  from nautobot.core.forms import TableConfigForm
20
19
  from nautobot.core.views.mixins import AdminRequiredMixin
@@ -1,12 +1,12 @@
1
- from django.core.cache import cache
2
1
  from django.conf import settings
3
2
  from django.contrib.contenttypes.models import ContentType
4
- from django.db.models import Model, OuterRef, Subquery, Q, F
3
+ from django.core.cache import cache
4
+ from django.db.models import F, Model, OuterRef, Q, Subquery
5
5
  from django.db.models.functions import JSONObject
6
6
  from django_celery_beat.managers import ExtendedQuerySet
7
7
 
8
- from nautobot.core.models.querysets import RestrictedQuerySet
9
8
  from nautobot.core.models.query_functions import EmptyGroupByJSONBAgg
9
+ from nautobot.core.models.querysets import RestrictedQuerySet
10
10
  from nautobot.core.utils.config import get_settings_or_config
11
11
  from nautobot.extras.models.tags import TaggedItem
12
12
 
@@ -1,9 +1,9 @@
1
1
  import contextvars
2
+ from datetime import timedelta
3
+ import logging
2
4
  import os
3
- import random
5
+ import secrets
4
6
  import shutil
5
- import logging
6
- from datetime import timedelta
7
7
 
8
8
  from db_file_storage.model_utils import delete_file
9
9
  from db_file_storage.storage import DatabaseFileStorage
@@ -13,15 +13,15 @@ from django.core.cache import cache
13
13
  from django.core.exceptions import ValidationError
14
14
  from django.core.files.storage import get_storage_class
15
15
  from django.db import transaction
16
- from django.db.models.signals import m2m_changed, pre_delete, post_save, pre_save, post_delete
16
+ from django.db.models.signals import m2m_changed, post_delete, post_save, pre_delete, pre_save
17
17
  from django.dispatch import receiver
18
18
  from django.utils import timezone
19
19
  from django_prometheus.models import model_deletes, model_inserts, model_updates
20
20
 
21
21
  from nautobot.core.celery import app, import_jobs_as_celery_tasks
22
22
  from nautobot.core.utils.config import get_settings_or_config
23
- from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL
24
23
  from nautobot.extras.choices import JobResultStatusChoices, ObjectChangeActionChoices
24
+ from nautobot.extras.constants import CHANGELOG_MAX_CHANGE_CONTEXT_DETAIL
25
25
  from nautobot.extras.models import (
26
26
  CustomField,
27
27
  DynamicGroup,
@@ -34,7 +34,6 @@ from nautobot.extras.querysets import NotesQuerySet
34
34
  from nautobot.extras.tasks import delete_custom_field_data, provision_field
35
35
  from nautobot.extras.utils import refresh_job_model_from_job_class
36
36
 
37
-
38
37
  # thread safe change context state variable
39
38
  change_context_state = contextvars.ContextVar("change_context_state", default=None)
40
39
  logger = logging.getLogger(__name__)
@@ -127,7 +126,7 @@ def _handle_changed_object(sender, instance, raw=False, **kwargs):
127
126
 
128
127
  # Housekeeping: 0.1% chance of clearing out expired ObjectChanges
129
128
  changelog_retention = get_settings_or_config("CHANGELOG_RETENTION")
130
- if changelog_retention and random.randint(1, 1000) == 1:
129
+ if changelog_retention and secrets.randbelow(1000) == 0:
131
130
  cutoff = timezone.now() - timedelta(days=changelog_retention)
132
131
  ObjectChange.objects.filter(time__lt=cutoff).delete()
133
132
 
nautobot/extras/tables.py CHANGED
@@ -1,10 +1,9 @@
1
- import django_tables2 as tables
2
1
  from django.conf import settings
3
2
  from django.utils.html import format_html
3
+ import django_tables2 as tables
4
4
  from django_tables2.utils import Accessor
5
5
  from jsonschema.exceptions import ValidationError as JSONSchemaValidationError
6
6
 
7
- from nautobot.core.templatetags.helpers import render_boolean, render_markdown
8
7
  from nautobot.core.tables import (
9
8
  BaseTable,
10
9
  BooleanColumn,
@@ -16,6 +15,8 @@ from nautobot.core.tables import (
16
15
  TagColumn,
17
16
  ToggleColumn,
18
17
  )
18
+ from nautobot.core.templatetags.helpers import render_boolean, render_markdown
19
+
19
20
  from .choices import LogLevelChoices
20
21
  from .models import (
21
22
  ComputedField,
@@ -32,8 +33,8 @@ from .models import (
32
33
  Job as JobModel,
33
34
  JobButton,
34
35
  JobHook,
35
- JobResult,
36
36
  JobLogEntry,
37
+ JobResult,
37
38
  Note,
38
39
  ObjectChange,
39
40
  Relationship,
@@ -49,7 +50,6 @@ from .models import (
49
50
  )
50
51
  from .registry import registry
51
52
 
52
-
53
53
  TAGGED_ITEM = """
54
54
  {% if value.get_absolute_url %}
55
55
  <a href="{{ value.get_absolute_url }}">{{ value }}</a>
nautobot/extras/tasks.py CHANGED
@@ -1,16 +1,15 @@
1
1
  from logging import getLogger
2
2
 
3
- import requests
4
3
  from django.conf import settings
5
4
  from django.contrib.contenttypes.models import ContentType
6
5
  from django.db import transaction
7
6
  from jinja2.exceptions import TemplateError
7
+ import requests
8
8
 
9
9
  from nautobot.core.celery import nautobot_task
10
10
  from nautobot.extras.choices import CustomFieldTypeChoices, ObjectChangeActionChoices
11
11
  from nautobot.extras.utils import generate_signature
12
12
 
13
-
14
13
  logger = getLogger("nautobot.extras.tasks")
15
14
 
16
15
 
@@ -8,7 +8,7 @@
8
8
  {% render_field form.name %}
9
9
  {% render_field form.weight %}
10
10
  {% render_field form.description %}
11
- {% render_field form.schema %}
11
+ {% render_field form.config_context_schema %}
12
12
  {% render_field form.is_active %}
13
13
  </div>
14
14
  </div>
@@ -37,9 +37,11 @@
37
37
  </tr>
38
38
  </table>
39
39
  {% endif %}
40
- <pre id="query_output">
40
+ <div class="panel-footer">
41
+ <pre id="query_output">
41
42
 
42
- </pre>
43
+ </pre>
44
+ </div>
43
45
  </div>
44
46
  {% endblock content_right_page %}
45
47
 
@@ -14,57 +14,52 @@
14
14
  <div class="panel-heading"><strong>Secret Assignment</strong></div>
15
15
  <div class="panel-body">
16
16
  {% if secrets.errors %}
17
- <div class="panel panel-danger">
18
- <div class="panel-heading"><strong>Errors</strong></div>
19
- <div class="panel-body">
20
- Please correct the error(s) below:
17
+ <div class="text-danger">
18
+ Please correct the error(s) below:
21
19
 
22
- {% for secret in secrets.forms %}
23
- {% if secret.errors %}
24
- {% for error in secret.errors.values %}{{ error }}{% endfor %}
25
- {% endif %}
26
- {% endfor %}
27
- </div>
20
+ {% for secret in secrets.forms %}
21
+ {% if secret.errors %}
22
+ {% for error in secret.errors.values %}{{ error }}{% endfor %}
23
+ {% endif %}
24
+ {% endfor %}
28
25
  </div>
29
26
  {% endif %}
30
27
  {{ secrets.non_field_errors }}
31
- <div class="form-group{% if secrets.errors %} has-error{% endif %}">
32
- <table class="table" id="secrets">
33
- {{ secrets.management_form }}
34
- {% for secret_form in secrets.forms %}
35
- {% if forloop.first %}
36
- <thead>
37
- <tr>
38
- {% for field in secret_form.visible_fields %}
39
- <th>{{ field.label|capfirst }}</th>
28
+ <table class="table" id="secrets">
29
+ {{ secrets.management_form }}
30
+ {% for secret_form in secrets.forms %}
31
+ {% if forloop.first %}
32
+ <thead>
33
+ <tr>
34
+ {% for field in secret_form.visible_fields %}
35
+ <th>{{ field.label|capfirst }}</th>
36
+ {% endfor %}
37
+ </tr>
38
+ </thead>
39
+ {% endif %}
40
+ <tr class="formset_row-{{ secrets.prefix }}">
41
+ {% for field in secret_form.visible_fields %}
42
+ <td>
43
+ {% if forloop.first %}
44
+ {% for hidden in secret_form.hidden_fields %}
45
+ {{ hidden }}
40
46
  {% endfor %}
41
- </tr>
42
- </thead>
43
- {% endif %}
44
- <tr class="formset_row-{{ secrets.prefix }}">
45
- {% for field in secret_form.visible_fields %}
46
- <td>
47
- {% if forloop.first %}
48
- {% for hidden in secret_form.hidden_fields %}
49
- {{ hidden }}
47
+ {% endif %}
48
+ {{ field }}
49
+ {% if field.errors %}
50
+ <ul>
51
+ {% for error in field.errors %}
52
+ {# Embed an HTML comment indicating the error for extraction by tests #}
53
+ <!-- FORM-ERROR {{ field.name }}: {{ error }} -->
54
+ <li clas="text-danger">{{ error }}</li>
50
55
  {% endfor %}
51
- {% endif %}
52
- {{ field }}
53
- {% if field.errors %}
54
- <ul>
55
- {% for error in field.errors %}
56
- {# Embed an HTML comment indicating the error for extraction by tests #}
57
- <!-- FORM-ERROR {{ field.name }}: {{ error }} -->
58
- <li clas="text-danger">{{ error }}</li>
59
- {% endfor %}
60
- </ul>
61
- {% endif %}
62
- </td>
63
- {% endfor %}
64
- </tr>
65
- {% endfor %}
66
- </table>
67
- </div>
56
+ </ul>
57
+ {% endif %}
58
+ </td>
59
+ {% endfor %}
60
+ </tr>
61
+ {% endfor %}
62
+ </table>
68
63
  </div>
69
64
  </div>
70
65
  {% include "inc/extras_features_edit_form_fields.html" %}
@@ -8,7 +8,6 @@ from django.utils.safestring import mark_safe
8
8
  from nautobot.core.utils.data import render_jinja2
9
9
  from nautobot.extras.models import CustomLink
10
10
 
11
-
12
11
  register = template.Library()
13
12
 
14
13
  LINK_BUTTON = '<a href="{}"{} class="btn btn-sm btn-{}">{}</a>\n'
@@ -41,7 +40,7 @@ def custom_links(context, obj):
41
40
  "user": context["user"], # django.contrib.auth.context_processors.auth
42
41
  "perms": context["perms"], # django.contrib.auth.context_processors.auth
43
42
  }
44
- template_code = mark_safe("") # noqa: S308
43
+ template_code = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
45
44
  group_names = OrderedDict()
46
45
 
47
46
  for cl in links:
@@ -71,7 +70,7 @@ def custom_links(context, obj):
71
70
 
72
71
  # Add grouped links to template
73
72
  for group, links in group_names.items():
74
- links_rendered = mark_safe("") # noqa: S308
73
+ links_rendered = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
75
74
 
76
75
  for cl in links:
77
76
  try:
@@ -6,9 +6,8 @@ from django.urls import reverse
6
6
  from django.utils.html import format_html
7
7
  from django.utils.safestring import mark_safe
8
8
 
9
- from nautobot.extras.models import Job, JobButton
10
9
  from nautobot.core.utils.data import render_jinja2
11
-
10
+ from nautobot.extras.models import Job, JobButton
12
11
 
13
12
  register = template.Library()
14
13
 
@@ -70,7 +69,7 @@ CONFIRM_MODAL = """
70
69
  </div>
71
70
  """
72
71
 
73
- SAFE_EMPTY_STR = mark_safe("") # noqa: S308
72
+ SAFE_EMPTY_STR = mark_safe("") # noqa: S308 # suspicious-mark-safe-usage -- this one is safe
74
73
 
75
74
 
76
75
  def _render_job_button_for_obj(job_button, obj, context, content_type):