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
@@ -6,27 +6,26 @@ from django.conf import settings
6
6
  from django.contrib.contenttypes.models import ContentType
7
7
  from django.core.validators import ValidationError
8
8
  from django.db.models.fields.reverse_related import ManyToOneRel, OneToOneRel
9
-
10
9
  import graphene
11
10
  from graphene.types import generic
12
11
 
13
12
  from nautobot.circuits.graphql.types import CircuitTerminationType
14
- from nautobot.core.graphql.utils import str_to_var_name
15
13
  from nautobot.core.graphql.generators import (
16
14
  generate_attrs_for_schema_type,
17
15
  generate_computed_field_resolver,
18
16
  generate_custom_field_resolver,
19
17
  generate_filter_resolver,
20
18
  generate_list_search_parameters,
19
+ generate_null_choices_resolver,
21
20
  generate_relationship_resolver,
22
21
  generate_restricted_queryset,
23
22
  generate_schema_type,
24
- generate_null_choices_resolver,
25
23
  )
26
24
  from nautobot.core.graphql.types import ContentTypeType, JSON
25
+ from nautobot.core.graphql.utils import str_to_var_name
27
26
  from nautobot.dcim.graphql.types import (
28
- CableType,
29
27
  CablePathType,
28
+ CableType,
30
29
  ConsolePortType,
31
30
  ConsoleServerPortType,
32
31
  DeviceType,
@@ -40,10 +39,10 @@ from nautobot.dcim.graphql.types import (
40
39
  RackType,
41
40
  RearPortType,
42
41
  )
43
- from nautobot.extras.registry import registry
44
- from nautobot.extras.models import ComputedField, CustomField, Relationship
45
42
  from nautobot.extras.choices import CustomFieldTypeChoices, RelationshipSideChoices
46
- from nautobot.extras.graphql.types import TagType, DynamicGroupType
43
+ from nautobot.extras.graphql.types import DynamicGroupType, TagType
44
+ from nautobot.extras.models import ComputedField, CustomField, Relationship
45
+ from nautobot.extras.registry import registry
47
46
  from nautobot.extras.utils import check_if_key_is_graphql_safe
48
47
  from nautobot.ipam.graphql.types import IPAddressType, PrefixType
49
48
  from nautobot.virtualization.graphql.types import VirtualMachineType, VMInterfaceType
@@ -3,7 +3,6 @@ from graphene_django.types import ObjectType
3
3
 
4
4
  from .schema import generate_query_mixin
5
5
 
6
-
7
6
  DynamicGraphQL = generate_query_mixin()
8
7
 
9
8
 
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
 
3
- from django_filters.filters import BooleanFilter, NumberFilter, MultipleChoiceFilter
3
+ from django_filters.filters import BooleanFilter, MultipleChoiceFilter, NumberFilter
4
4
  import graphene
5
5
 
6
6
  from nautobot.core.filters import (
@@ -12,7 +12,6 @@ from nautobot.core.filters import (
12
12
  from nautobot.core.graphql import BigInteger
13
13
  from nautobot.core.models.fields import slugify_dashes_to_underscores
14
14
 
15
-
16
15
  logger = logging.getLogger(__name__)
17
16
 
18
17
 
@@ -5,7 +5,7 @@ import os
5
5
  from django.core.management import call_command
6
6
  from django.core.management.base import BaseCommand, CommandError
7
7
  from django.core.serializers.json import DjangoJSONEncoder
8
- from django.db import DEFAULT_DB_ALIAS, connections
8
+ from django.db import connections, DEFAULT_DB_ALIAS
9
9
  from django.utils.crypto import get_random_string
10
10
 
11
11
  from nautobot.core.settings_funcs import is_truthy
@@ -61,15 +61,13 @@ class Command(BaseCommand):
61
61
  DeviceFactory,
62
62
  DeviceRedundancyGroupFactory,
63
63
  DeviceTypeFactory,
64
+ LocationFactory,
65
+ LocationTypeFactory,
64
66
  ManufacturerFactory,
65
67
  PlatformFactory,
66
68
  )
67
69
  from nautobot.extras.factory import ExternalIntegrationFactory, RoleFactory, StatusFactory, TagFactory
68
70
  from nautobot.extras.management import populate_status_choices
69
- from nautobot.dcim.factory import (
70
- LocationTypeFactory,
71
- LocationFactory,
72
- )
73
71
  from nautobot.extras.utils import TaggableClassesQuery
74
72
  from nautobot.ipam.choices import PrefixTypeChoices
75
73
  from nautobot.ipam.factory import (
@@ -78,8 +76,8 @@ class Command(BaseCommand):
78
76
  PrefixFactory,
79
77
  RIRFactory,
80
78
  RouteTargetFactory,
81
- VLANGroupFactory,
82
79
  VLANFactory,
80
+ VLANGroupFactory,
83
81
  VRFFactory,
84
82
  )
85
83
  from nautobot.tenancy.factory import TenantFactory, TenantGroupFactory
@@ -1,5 +1,5 @@
1
1
  # noinspection PyUnresolvedReferences
2
- from django.core.management.commands.makemigrations import Command # noqa: F401
2
+ from django.core.management.commands.makemigrations import Command # noqa: F401 # unused-import
3
3
  from django.db import models
4
4
 
5
5
  from nautobot.core.management import commands
@@ -1,5 +1,5 @@
1
1
  # noinspection PyUnresolvedReferences
2
- from django.core.management.commands.migrate import Command # noqa: F401
2
+ from django.core.management.commands.migrate import Command # noqa: F401 # unused-import
3
3
  from django.db import models
4
4
 
5
5
  from nautobot.core.management import commands
@@ -3,7 +3,6 @@ import argparse
3
3
  from django.core.management import call_command
4
4
  from django.core.management.base import BaseCommand
5
5
 
6
-
7
6
  HELP_TEXT = """
8
7
  Performs Nautobot common server upgrade operations using a single entrypoint.
9
8
 
@@ -11,7 +10,6 @@ This will run the following management commands with default settings, in order:
11
10
 
12
11
  - migrate
13
12
  - trace_paths
14
- - build_ui --npm-install
15
13
  - collectstatic
16
14
  - remove_stale_contenttypes
17
15
  - clearsessions
@@ -29,13 +27,6 @@ class Command(BaseCommand):
29
27
  return parser
30
28
 
31
29
  def add_arguments(self, parser):
32
- parser.add_argument(
33
- "--build-ui",
34
- action="store_true",
35
- dest="build_ui",
36
- default=False,
37
- help="Build the user interface.",
38
- )
39
30
  parser.add_argument(
40
31
  "--no-clearsessions",
41
32
  action="store_false",
@@ -112,12 +103,6 @@ class Command(BaseCommand):
112
103
  call_command("trace_paths", no_input=True)
113
104
  self.stdout.write()
114
105
 
115
- # Run build
116
- if options.get("build_ui"):
117
- self.stdout.write("Building user interface...")
118
- call_command("build_ui", npm_install=True)
119
- self.stdout.write()
120
-
121
106
  # Run collectstatic
122
107
  if options.get("collectstatic"):
123
108
  self.stdout.write("Collecting static files...")
@@ -1,9 +1,8 @@
1
1
  from django.conf import settings
2
+ from django.contrib.contenttypes.models import ContentType
2
3
  from django.core.cache import cache
3
4
  from django.core.management.base import BaseCommand
4
5
 
5
- from django.contrib.contenttypes.models import ContentType
6
-
7
6
 
8
7
  class Command(BaseCommand):
9
8
  help = "Update the cached content type for all model classes."
@@ -1,18 +1,17 @@
1
1
  import hashlib
2
2
  import json
3
3
  import platform
4
- import requests
5
- import requests.exceptions
6
4
  import uuid
7
5
 
8
6
  from constance import config
9
7
  from django.apps import apps
10
8
  from django.conf import settings
11
9
  from django.core.management.base import BaseCommand
10
+ import requests
11
+ import requests.exceptions
12
12
 
13
13
  from nautobot.core.utils.config import get_settings_or_config
14
14
 
15
-
16
15
  METRICS_ENDPOINT = "https://nautobot.cloud/api/nautobot/installation-metric/"
17
16
 
18
17
 
@@ -1,7 +1,7 @@
1
1
  from django.apps import apps
2
2
  from django.contrib.auth import get_user_model
3
- from django.core.management.base import BaseCommand, CommandError
4
3
  from django.core.exceptions import ValidationError
4
+ from django.core.management.base import BaseCommand, CommandError
5
5
 
6
6
 
7
7
  class Command(BaseCommand):
@@ -12,9 +12,9 @@ from nautobot.core.authentication import (
12
12
  assign_permissions_to_user,
13
13
  )
14
14
  from nautobot.core.settings_funcs import (
15
- sso_auth_enabled,
16
- remote_auth_enabled,
17
15
  ldap_auth_enabled,
16
+ remote_auth_enabled,
17
+ sso_auth_enabled,
18
18
  )
19
19
  from nautobot.core.views import server_error
20
20
  from nautobot.extras.choices import ObjectChangeEventContextChoices
@@ -1,12 +1,12 @@
1
1
  import uuid
2
2
 
3
+ from django.conf import settings
4
+ from django.contrib.contenttypes.models import ContentType
5
+ from django.core.cache import cache
3
6
  from django.core.exceptions import FieldDoesNotExist
4
7
  from django.db import models
5
8
  from django.urls import NoReverseMatch, reverse
6
9
  from django.utils.encoding import is_protected_type
7
- from django.conf import settings
8
- from django.contrib.contenttypes.models import ContentType
9
- from django.core.cache import cache
10
10
  from django.utils.functional import classproperty
11
11
 
12
12
  from nautobot.core.models.managers import BaseManager
@@ -47,12 +47,8 @@ class BaseModel(models.Model):
47
47
 
48
48
  objects = BaseManager.from_queryset(RestrictedQuerySet)()
49
49
 
50
- @property
51
- def present_in_database(self):
52
- """
53
- True if the record exists in the database, False if it does not.
54
- """
55
- return not self._state.adding
50
+ class Meta:
51
+ abstract = True
56
52
 
57
53
  def get_absolute_url(self, api=False):
58
54
  """
@@ -77,6 +73,13 @@ class BaseModel(models.Model):
77
73
 
78
74
  raise AttributeError(f"Cannot find a URL for {self} ({self._meta.app_label}.{self._meta.model_name})")
79
75
 
76
+ @property
77
+ def present_in_database(self):
78
+ """
79
+ True if the record exists in the database, False if it does not.
80
+ """
81
+ return not self._state.adding
82
+
80
83
  @classproperty # https://github.com/PyCQA/pylint-django/issues/240
81
84
  def _content_type(cls): # pylint: disable=no-self-argument
82
85
  """
@@ -101,9 +104,6 @@ class BaseModel(models.Model):
101
104
 
102
105
  return cache.get_or_set(cls._content_type_cache_key, cls._content_type, settings.CONTENT_TYPE_CACHE_TIMEOUT)
103
106
 
104
- class Meta:
105
- abstract = True
106
-
107
107
  def validated_save(self, *args, **kwargs):
108
108
  """
109
109
  Perform model validation during instance save.
@@ -2,7 +2,7 @@ import json
2
2
  import re
3
3
 
4
4
  from django.core import exceptions
5
- from django.core.validators import RegexValidator, MaxLengthValidator
5
+ from django.core.validators import MaxLengthValidator, RegexValidator
6
6
  from django.db import models
7
7
  from django.utils.text import slugify
8
8
  from django_extensions.db.fields import AutoSlugField as _AutoSlugField
@@ -1,12 +1,11 @@
1
1
  import logging
2
2
 
3
+ from nautobot.core.models import BaseModel
4
+ from nautobot.core.models.fields import TagsField
3
5
  from nautobot.extras.models.change_logging import ChangeLoggedModel
4
6
  from nautobot.extras.models.customfields import CustomFieldModel
5
7
  from nautobot.extras.models.mixins import DynamicGroupMixin, NotesMixin
6
8
  from nautobot.extras.models.relationships import RelationshipModel
7
- from nautobot.core.models import BaseModel
8
- from nautobot.core.models.fields import TagsField
9
-
10
9
 
11
10
  logger = logging.getLogger(__name__)
12
11
 
@@ -3,7 +3,6 @@ import logging
3
3
  from django.db.models import Manager
4
4
  from taggit.managers import _TaggableManager
5
5
 
6
-
7
6
  logger = logging.getLogger(__name__)
8
7
 
9
8
 
@@ -6,13 +6,13 @@ from nautobot.core.choices import ColorChoices
6
6
  from nautobot.core.models import BaseManager, BaseModel
7
7
  from nautobot.core.models.fields import ColorField
8
8
  from nautobot.core.models.querysets import RestrictedQuerySet
9
+ from nautobot.extras.models.change_logging import ChangeLoggedModel
9
10
 
10
11
  # Importing CustomFieldModel, ChangeLoggedModel, RelationshipModel from nautobot.extras.models
11
12
  # caused circular import error
12
13
  from nautobot.extras.models.customfields import CustomFieldModel
13
- from nautobot.extras.models.change_logging import ChangeLoggedModel
14
- from nautobot.extras.models.relationships import RelationshipModel
15
14
  from nautobot.extras.models.mixins import DynamicGroupMixin, NotesMixin
15
+ from nautobot.extras.models.relationships import RelationshipModel
16
16
 
17
17
 
18
18
  class ContentTypeRelatedQuerySet(RestrictedQuerySet):
@@ -1,10 +1,8 @@
1
1
  from django.core.cache import cache
2
-
3
2
  from tree_queries.models import TreeNode
4
- from tree_queries.query import TreeManager as TreeManager_
5
- from tree_queries.query import TreeQuerySet as TreeQuerySet_
3
+ from tree_queries.query import TreeManager as TreeManager_, TreeQuerySet as TreeQuerySet_
6
4
 
7
- from nautobot.core.models import querysets, BaseManager
5
+ from nautobot.core.models import BaseManager, querysets
8
6
 
9
7
 
10
8
  class TreeQuerySet(TreeQuerySet_, querysets.RestrictedQuerySet):
@@ -2,7 +2,7 @@ import re
2
2
 
3
3
  from django.conf import settings
4
4
  from django.core.exceptions import ValidationError
5
- from django.core.validators import BaseValidator, RegexValidator, URLValidator, _lazy_re_compile
5
+ from django.core.validators import _lazy_re_compile, BaseValidator, RegexValidator, URLValidator
6
6
 
7
7
 
8
8
  class EnhancedURLValidator(URLValidator):
nautobot/core/releases.py CHANGED
@@ -2,8 +2,8 @@ import logging
2
2
 
3
3
  from django.core.cache import cache
4
4
 
5
- from nautobot.core.utils.config import get_settings_or_config
6
5
  from nautobot.core.tasks import get_releases
6
+ from nautobot.core.utils.config import get_settings_or_config
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
@@ -6,16 +6,10 @@ logan.importer
6
6
  :license: Apache License 2.0, see LICENSE for more details.
7
7
  """
8
8
 
9
- import sys
10
-
11
9
  from importlib import import_module
12
- from .settings import load_settings, create_module
13
-
14
-
15
- def execfile(afile, globalz=None, localz=None):
16
- with open(afile, "r") as fh:
17
- exec(fh.read(), globalz, localz)
10
+ import sys
18
11
 
12
+ from .settings import create_module, load_settings
19
13
 
20
14
  installed = False
21
15
 
@@ -60,20 +54,10 @@ class LoganImporter:
60
54
  self.default_settings = default_settings
61
55
  self.allow_extras = allow_extras
62
56
  self.callback = callback
63
- self.validate()
64
57
 
65
58
  def __repr__(self):
66
59
  return f"<{type(self)} for '{self.name}' ({self.config_path})>"
67
60
 
68
- def validate(self):
69
- # TODO(dcramer): is there a better way to handle validation so it
70
- # is lazy and actually happens in LoganLoader?
71
- try:
72
- execfile(self.config_path, {"__file__": self.config_path})
73
- except Exception as e:
74
- exc_info = sys.exc_info()
75
- raise ConfigurationError(str(e), exc_info[2])
76
-
77
61
  def find_module(self, fullname, path=None):
78
62
  """Meta path finder API function implementation.
79
63
 
@@ -109,13 +93,6 @@ class LoganLoader:
109
93
 
110
94
  FIXME(jathan): load_module() API is deprecated, convert this to create_module()/exec_module() instead.
111
95
  """
112
- try:
113
- return self._load_module(fullname)
114
- except Exception as e:
115
- exc_info = sys.exc_info()
116
- raise ConfigurationError(str(e), exc_info[2])
117
-
118
- def _load_module(self, fullname):
119
96
  # FIXME(jathan): is this needed?
120
97
  if fullname in sys.modules:
121
98
  return sys.modules[fullname] # pragma: no cover
@@ -15,10 +15,10 @@ from django.core import management
15
15
 
16
16
  from nautobot import __version__
17
17
  from nautobot.core.settings_funcs import is_truthy
18
+
18
19
  from . import importer
19
20
  from .settings import create_default_settings
20
21
 
21
-
22
22
  __configured = False
23
23
 
24
24
 
@@ -294,7 +294,7 @@ def run_app(**kwargs):
294
294
  parser.exit(status=2, message=str(err) + "\n")
295
295
 
296
296
  # Call Django management command
297
- management.execute_from_command_line([runner_name, command] + command_args)
297
+ management.execute_from_command_line([runner_name, command, *command_args])
298
298
 
299
299
  # Exit cleanly
300
300
  sys.exit(0)
@@ -10,8 +10,8 @@ import importlib.machinery
10
10
  import importlib.util
11
11
  import os
12
12
  import sys
13
- from django.conf import settings as django_settings
14
13
 
14
+ from django.conf import settings as django_settings
15
15
 
16
16
  __all__ = ("create_default_settings", "load_settings")
17
17
 
nautobot/core/settings.py CHANGED
@@ -8,7 +8,7 @@ import django.forms
8
8
  from django.utils.safestring import mark_safe
9
9
 
10
10
  from nautobot import __version__
11
- from nautobot.core.settings_funcs import is_truthy, parse_redis_connection, ConstanceConfigItem # noqa: F401
11
+ from nautobot.core.settings_funcs import ConstanceConfigItem, is_truthy, parse_redis_connection
12
12
 
13
13
  #
14
14
  # Environment setup
@@ -29,7 +29,7 @@ AUTH_USER_MODEL = "users.User"
29
29
 
30
30
  # Set the default AutoField for 3rd party apps
31
31
  # N.B. Ideally this would be a `UUIDField`, but due to Django restrictions
32
- # we cant do that yet
32
+ # we can't do that yet
33
33
  DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
34
34
 
35
35
 
@@ -60,9 +60,6 @@ ALLOWED_URL_SCHEMES = (
60
60
  # Base directory wherein all created files (jobs, git repositories, file uploads, static files) will be stored)
61
61
  NAUTOBOT_ROOT = os.getenv("NAUTOBOT_ROOT", os.path.expanduser("~/.nautobot"))
62
62
 
63
- # The directory where the Nautobot UI packaging is stored.
64
- NAUTOBOT_UI_DIR = os.path.join(NAUTOBOT_ROOT, "ui")
65
-
66
63
  # Disable linking of Config Context objects via Dynamic Groups by default. This could cause performance impacts
67
64
  # when a large number of dynamic groups are present
68
65
  CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED = is_truthy(os.getenv("NAUTOBOT_CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED", "False"))
@@ -181,7 +178,8 @@ REST_FRAMEWORK_VERSION = VERSION.rsplit(".", 1)[0] # Use major.minor as API ver
181
178
  VERSION_MAJOR, VERSION_MINOR = [int(v) for v in REST_FRAMEWORK_VERSION.split(".")]
182
179
  # We support all major.minor API versions from 2.0 to the present latest version.
183
180
  # Similar logic exists in tasks.py, please keep them in sync!
184
- assert VERSION_MAJOR == 2, f"REST_FRAMEWORK_ALLOWED_VERSIONS needs to be updated to handle version {VERSION_MAJOR}"
181
+ if VERSION_MAJOR != 2:
182
+ raise RuntimeError(f"REST_FRAMEWORK_ALLOWED_VERSIONS needs to be updated to handle version {VERSION_MAJOR}")
185
183
  REST_FRAMEWORK_ALLOWED_VERSIONS = [f"{VERSION_MAJOR}.{minor}" for minor in range(0, VERSION_MINOR + 1)]
186
184
 
187
185
  REST_FRAMEWORK = {
@@ -510,10 +508,7 @@ X_FRAME_OPTIONS = "DENY"
510
508
  # Static files (CSS, JavaScript, Images)
511
509
  STATIC_ROOT = os.path.join(NAUTOBOT_ROOT, "static")
512
510
  STATIC_URL = "static/"
513
- STATICFILES_DIRS = (
514
- os.path.join(BASE_DIR, "project-static"),
515
- os.path.join(NAUTOBOT_UI_DIR, "build", "static"),
516
- )
511
+ STATICFILES_DIRS = (os.path.join(BASE_DIR, "project-static"),)
517
512
 
518
513
  # Media
519
514
  MEDIA_URL = "media/"
@@ -609,14 +604,9 @@ CONSTANCE_CONFIG = {
609
604
  "member list. This cache is invalidated when a Dynamic Group is saved. Set to 0 to disable caching.",
610
605
  field_type=int,
611
606
  ),
612
- "FEEDBACK_BUTTON_ENABLED": ConstanceConfigItem(
613
- default=True,
614
- help_text="Whether to show the Feedback button in the new UI sidebar.",
615
- field_type=bool,
616
- ),
617
607
  "JOB_CREATE_FILE_MAX_SIZE": ConstanceConfigItem(
618
608
  default=10 << 20,
619
- help_text=mark_safe( # noqa: S308
609
+ help_text=mark_safe( # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
620
610
  "Maximum size (in bytes) of any single file generated by a <code>Job.create_file()</code> call."
621
611
  ),
622
612
  field_type=int,
@@ -649,7 +639,7 @@ CONSTANCE_CONFIG = {
649
639
  ),
650
640
  "NETWORK_DRIVERS": ConstanceConfigItem(
651
641
  default={},
652
- help_text=mark_safe( # noqa: S308
642
+ help_text=mark_safe( # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
653
643
  "Extend or override default Platform.network_driver translations provided by "
654
644
  '<a href="https://netutils.readthedocs.io/en/latest/user/lib_use_cases_lib_mapper/">netutils</a>. '
655
645
  "Enter a dictionary in JSON format, for example:\n"
@@ -704,7 +694,7 @@ CONSTANCE_CONFIG_FIELDSETS = {
704
694
  "Performance": ["DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT", "JOB_CREATE_FILE_MAX_SIZE"],
705
695
  "Rack Elevation Rendering": ["RACK_ELEVATION_DEFAULT_UNIT_HEIGHT", "RACK_ELEVATION_DEFAULT_UNIT_WIDTH"],
706
696
  "Release Checking": ["RELEASE_CHECK_URL", "RELEASE_CHECK_TIMEOUT"],
707
- "User Interface": ["FEEDBACK_BUTTON_ENABLED", "SUPPORT_MESSAGE"],
697
+ "User Interface": ["SUPPORT_MESSAGE"],
708
698
  }
709
699
 
710
700
  #
@@ -779,7 +769,7 @@ CELERY_RESULT_EXPIRES = None
779
769
  # Instruct celery to report the started status of a job, instead of just `pending`, `finished`, or `failed`
780
770
  CELERY_TASK_TRACK_STARTED = True
781
771
 
782
- # If enabled, a `task-sent` event will be sent for every task so tasks can be tracked before theyre consumed by a worker.
772
+ # If enabled, a `task-sent` event will be sent for every task so tasks can be tracked before they're consumed by a worker.
783
773
  CELERY_TASK_SEND_SENT_EVENT = True
784
774
 
785
775
  # If enabled stdout and stderr of running jobs will be redirected to the task logger.
@@ -920,6 +910,3 @@ DRF_REACT_TEMPLATE_TYPE_MAP = {
920
910
  "TimeZoneSerializerField": {"type": "string"},
921
911
  "UUIDField": {"type": "string", "format": "uuid"},
922
912
  }
923
-
924
- # Turn on or off new ui feature
925
- ENABLE_ALPHA_UI = is_truthy(os.getenv("NAUTOBOT_ENABLE_ALPHA_UI", "False"))
@@ -1,11 +1,10 @@
1
1
  """Helper functions to detect settings after app initialization (AKA 'dynamic settings')."""
2
2
 
3
3
  from collections import namedtuple
4
-
5
- from django.conf import settings
6
4
  from functools import lru_cache
7
5
  import os
8
6
 
7
+ from django.conf import settings
9
8
 
10
9
  ConstanceConfigItem = namedtuple("ConstanceConfigItem", ["default", "help_text", "field_type"], defaults=[str])
11
10
 
nautobot/core/signals.py CHANGED
@@ -6,7 +6,6 @@ import logging
6
6
  from django.contrib.auth.signals import user_logged_in, user_logged_out
7
7
  from django.dispatch import receiver, Signal
8
8
 
9
-
10
9
  nautobot_database_ready = Signal()
11
10
  """
12
11
  Signal sent to all installed apps and plugins after the database is ready.
nautobot/core/tables.py CHANGED
@@ -162,7 +162,7 @@ class ToggleColumn(django_tables2.CheckBoxColumn):
162
162
 
163
163
  @property
164
164
  def header(self):
165
- return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />') # noqa: S308
165
+ return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />') # noqa: S308 # suspicious-mark-safe-usage, but this is a static string so it's safe
166
166
 
167
167
 
168
168
  class BooleanColumn(django_tables2.Column):
@@ -53,6 +53,10 @@ add "&raw" to the end of the URL within a browser.
53
53
  margin: 0;
54
54
  width: 100%;
55
55
  }
56
+ .toolbar .dropdown-menu > li > a {
57
+ clear: left;
58
+ margin-right: 120px; /* leave room for the "Save Changes" button if present */
59
+ }
56
60
  </style>
57
61
  <!-- As Nautobot may be run without internet access, we source these files locally rather than from an online CDN -->
58
62
  <link rel="stylesheet"
@@ -163,7 +167,6 @@ add "&raw" to the end of the URL within a browser.
163
167
  }
164
168
 
165
169
  function save() {
166
- graphql_data = getHashParams();
167
170
  var url = new URL(window.location.href);
168
171
  var id = url.searchParams.get("id");
169
172
  var result_window = $(".result-window").find(".CodeMirror-code");
@@ -179,10 +182,13 @@ add "&raw" to the end of the URL within a browser.
179
182
  return
180
183
  };
181
184
 
185
+ var graphql_data = JSON.stringify({"query": getHashParams().query});
186
+
182
187
  $.ajax({
183
188
  url: `{% url 'extras-api:graphqlquery-list' %}${id}/`,
184
189
  method: "PATCH",
185
190
  headers: {"X-CSRFTOKEN": "{{ csrf_token }}"},
191
+ contentType: "application/json",
186
192
  dataType: "json",
187
193
  data: graphql_data,
188
194
  success: function(data) {
@@ -19,13 +19,6 @@
19
19
  <div class="col-xs-4 text-right noprint">
20
20
  {% if request.user.is_authenticated %}
21
21
  <p class="text-muted">
22
- {% if "ENABLE_ALPHA_UI"|settings_or_config %}
23
- {% if request.path|is_new_ui_ready %}
24
- <i class="mdi mdi-new-box text-primary"></i> <a href="#" onclick="viewNewUI();">View in New UI</a> &middot;
25
- {% else %}
26
- <i class="mdi mdi-new-box"></i> <span style="cursor:not-allowed">View in New UI</span> &middot;
27
- {% endif %}
28
- {% endif %}
29
22
  <a href="#theme_modal" data-toggle="modal" data-target="#theme_modal" id="btn-theme-modal"><i class="mdi mdi-theme-light-dark text-primary"></i>Theme</a> &middot;
30
23
  <i class="mdi mdi-book-open-page-variant text-primary"></i>
31
24
  {% if settings.BRANDING_URLS.docs %}
@@ -328,10 +328,6 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
328
328
  # EXTERNAL_AUTH_DEFAULT_GROUPS = []
329
329
  # EXTERNAL_AUTH_DEFAULT_PERMISSIONS = {}
330
330
 
331
- # Show feedback button on NewUI sidebar menu (defualt: True)
332
- #
333
- # FEEDBACK_BUTTON_ENABLED = True
334
-
335
331
  # Directory where cloned Git repositories will be stored.
336
332
  #
337
333
  # GIT_ROOT = os.getenv("NAUTOBOT_GIT_ROOT", os.path.join(NAUTOBOT_ROOT, "git").rstrip("/"))