nautobot 2.1.0b1__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 (1002) 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 -3
  7. nautobot/apps/datasources.py +2 -2
  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 +2 -1
  14. nautobot/apps/models.py +4 -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 +1 -10
  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 +14 -15
  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 +31 -2
  71. nautobot/core/choices.py +2 -2
  72. nautobot/core/cli/__init__.py +8 -17
  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 +2 -2
  82. nautobot/core/graphql/schema.py +21 -8
  83. nautobot/core/graphql/schema_init.py +0 -1
  84. nautobot/core/graphql/types.py +10 -0
  85. nautobot/core/graphql/utils.py +1 -2
  86. nautobot/core/management/commands/generate_test_data.py +7 -6
  87. nautobot/core/management/commands/makemigrations.py +1 -1
  88. nautobot/core/management/commands/migrate.py +1 -1
  89. nautobot/core/management/commands/post_upgrade.py +1 -15
  90. nautobot/core/management/commands/refresh_content_type_cache.py +1 -2
  91. nautobot/core/management/commands/send_installation_metrics.py +2 -3
  92. nautobot/core/management/commands/validate_models.py +1 -1
  93. nautobot/core/middleware.py +2 -2
  94. nautobot/core/models/__init__.py +12 -12
  95. nautobot/core/models/fields.py +1 -1
  96. nautobot/core/models/generics.py +2 -3
  97. nautobot/core/models/managers.py +0 -1
  98. nautobot/core/models/name_color_content_types.py +2 -2
  99. nautobot/core/models/tree_queries.py +2 -4
  100. nautobot/core/models/validators.py +1 -1
  101. nautobot/core/releases.py +1 -1
  102. nautobot/core/runner/importer.py +2 -25
  103. nautobot/core/runner/runner.py +2 -2
  104. nautobot/core/runner/settings.py +1 -1
  105. nautobot/core/settings.py +15 -21
  106. nautobot/core/settings_funcs.py +1 -2
  107. nautobot/core/signals.py +0 -1
  108. nautobot/core/tables.py +1 -1
  109. nautobot/core/templates/admin/base.html +9 -9
  110. nautobot/core/templates/exceptions/programming_error.html +2 -2
  111. nautobot/core/templates/graphene/graphiql.html +9 -3
  112. nautobot/core/templates/home.html +26 -6
  113. nautobot/core/templates/inc/footer.html +0 -7
  114. nautobot/core/templates/inc/javascript.html +4 -2
  115. nautobot/core/templates/inc/media.html +2 -2
  116. nautobot/core/templates/inc/nav_menu.html +27 -25
  117. nautobot/core/templates/inc/object_details_advanced_panel.html +12 -0
  118. nautobot/core/templates/nautobot_config.py.j2 +4 -4
  119. nautobot/core/templates/utilities/theme_preview.html +883 -0
  120. nautobot/core/templatetags/bootstrapped_goodies_tags.py +6 -3
  121. nautobot/core/templatetags/buttons.py +2 -1
  122. nautobot/core/templatetags/helpers.py +45 -18
  123. nautobot/core/testing/__init__.py +1 -2
  124. nautobot/core/testing/api.py +2 -4
  125. nautobot/core/testing/filters.py +1 -1
  126. nautobot/core/testing/integration.py +2 -2
  127. nautobot/core/testing/migrations.py +1 -0
  128. nautobot/core/testing/mixins.py +1 -2
  129. nautobot/core/testing/schema.py +1 -1
  130. nautobot/core/testing/utils.py +3 -3
  131. nautobot/core/testing/views.py +8 -8
  132. nautobot/core/tests/integration/test_home.py +1 -1
  133. nautobot/core/tests/integration/test_navbar.py +2 -2
  134. nautobot/core/tests/integration/test_plugin_home.py +2 -1
  135. nautobot/core/tests/integration/test_plugin_navbar.py +6 -6
  136. nautobot/core/tests/nautobot_config.py +3 -3
  137. nautobot/core/tests/runner.py +3 -4
  138. nautobot/core/tests/test_api.py +6 -51
  139. nautobot/core/tests/test_authentication.py +2 -3
  140. nautobot/core/tests/test_checks.py +1 -2
  141. nautobot/core/tests/test_config.py +1 -1
  142. nautobot/core/tests/test_csv.py +4 -4
  143. nautobot/core/tests/test_factory.py +1 -3
  144. nautobot/core/tests/test_filters.py +4 -7
  145. nautobot/core/tests/test_forms.py +3 -6
  146. nautobot/core/tests/test_graphql.py +33 -17
  147. nautobot/core/tests/test_jinja_filters.py +5 -4
  148. nautobot/core/tests/test_jobs.py +1 -1
  149. nautobot/core/tests/test_models.py +28 -3
  150. nautobot/core/tests/test_navigations.py +2 -1
  151. nautobot/core/tests/test_openapi.py +0 -1
  152. nautobot/core/tests/test_paginator.py +2 -2
  153. nautobot/core/tests/test_releases.py +2 -2
  154. nautobot/core/tests/test_tables.py +1 -1
  155. nautobot/core/tests/test_templatetags_helpers.py +17 -2
  156. nautobot/core/tests/test_templatetags_netutils.py +1 -2
  157. nautobot/core/tests/test_utils.py +4 -8
  158. nautobot/core/tests/test_views.py +95 -1
  159. nautobot/core/tests/test_views_utils.py +0 -1
  160. nautobot/core/urls.py +24 -4
  161. nautobot/core/utils/color.py +1 -1
  162. nautobot/core/utils/data.py +1 -2
  163. nautobot/core/utils/filtering.py +4 -5
  164. nautobot/core/utils/git.py +6 -2
  165. nautobot/core/utils/logging.py +2 -1
  166. nautobot/core/utils/lookup.py +4 -6
  167. nautobot/core/utils/migrations.py +1 -0
  168. nautobot/core/utils/permissions.py +2 -4
  169. nautobot/core/utils/requests.py +10 -0
  170. nautobot/core/views/__init__.py +32 -8
  171. nautobot/core/views/generic.py +14 -13
  172. nautobot/core/views/mixins.py +24 -22
  173. nautobot/core/views/renderers.py +1 -1
  174. nautobot/core/views/routers.py +6 -0
  175. nautobot/core/views/utils.py +2 -1
  176. nautobot/dcim/api/urls.py +1 -1
  177. nautobot/dcim/api/views.py +6 -5
  178. nautobot/dcim/apps.py +1 -1
  179. nautobot/dcim/choices.py +4 -1
  180. nautobot/dcim/constants.py +0 -1
  181. nautobot/dcim/elevations.py +1 -2
  182. nautobot/dcim/factory.py +125 -13
  183. nautobot/dcim/fields.py +1 -0
  184. nautobot/dcim/filters/__init__.py +2 -3
  185. nautobot/dcim/filters/mixins.py +1 -1
  186. nautobot/dcim/forms.py +37 -44
  187. nautobot/dcim/graphql/types.py +16 -17
  188. nautobot/dcim/migrations/0001_initial_part_1.py +4 -2
  189. nautobot/dcim/migrations/0002_initial_part_2.py +2 -1
  190. nautobot/dcim/migrations/0003_initial_part_3.py +2 -1
  191. nautobot/dcim/migrations/0004_initial_part_4.py +2 -1
  192. nautobot/dcim/migrations/0006_auto_slug.py +1 -0
  193. nautobot/dcim/migrations/0009_add_natural_indexing.py +1 -0
  194. nautobot/dcim/migrations/0010_interface_status.py +1 -0
  195. nautobot/dcim/migrations/0011_interface_status_data_migration.py +1 -0
  196. nautobot/dcim/migrations/0013_location_location_type.py +4 -2
  197. nautobot/dcim/migrations/0014_location_status_data_migration.py +1 -0
  198. nautobot/dcim/migrations/0016_device_components__timestamp_data_migration.py +0 -1
  199. nautobot/dcim/migrations/0018_device_redundancy_group.py +4 -2
  200. nautobot/dcim/migrations/0019_device_redundancy_group_data_migration.py +1 -0
  201. nautobot/dcim/migrations/0022_interface_redundancy_group.py +3 -1
  202. nautobot/dcim/migrations/0023_interface_redundancy_group_data_migration.py +1 -0
  203. nautobot/dcim/migrations/0024_move_site_fields_to_location_model.py +2 -1
  204. nautobot/dcim/migrations/0027_alter_interface_mac_address.py +1 -0
  205. nautobot/dcim/migrations/0028_alter_device_and_rack_role_add_new_role.py +1 -0
  206. nautobot/dcim/migrations/0029_device_and_rack_roles_data_migrations.py +1 -0
  207. nautobot/dcim/migrations/0033_add_tree_managers_and_foreign_keys_pre_data_migration.py +1 -0
  208. nautobot/dcim/migrations/0034_migrate_region_and_site_data_to_locations.py +1 -2
  209. nautobot/dcim/migrations/0038_fixup_fks_and_related_names.py +1 -0
  210. nautobot/dcim/migrations/0039_related_name_changes.py +1 -0
  211. nautobot/dcim/migrations/0042_alter_location_managers.py +1 -0
  212. nautobot/dcim/migrations/0044_tagsfield.py +1 -0
  213. nautobot/dcim/migrations/0047_status_nonnullable.py +1 -0
  214. nautobot/dcim/migrations/0051_interface_redundancy_group_nullable_status.py +1 -0
  215. nautobot/dcim/models/cables.py +3 -3
  216. nautobot/dcim/models/device_component_templates.py +6 -6
  217. nautobot/dcim/models/devices.py +9 -4
  218. nautobot/dcim/models/locations.py +6 -1
  219. nautobot/dcim/models/power.py +1 -1
  220. nautobot/dcim/models/racks.py +5 -4
  221. nautobot/dcim/navigation.py +0 -1
  222. nautobot/dcim/signals.py +3 -2
  223. nautobot/dcim/tables/__init__.py +5 -4
  224. nautobot/dcim/tables/cables.py +1 -0
  225. nautobot/dcim/tables/devices.py +1 -0
  226. nautobot/dcim/tables/locations.py +1 -1
  227. nautobot/dcim/tables/power.py +1 -0
  228. nautobot/dcim/tables/racks.py +2 -1
  229. nautobot/dcim/templates/dcim/device/consoleports.html +2 -2
  230. nautobot/dcim/templates/dcim/device/consoleserverports.html +2 -2
  231. nautobot/dcim/templates/dcim/device/devicebays.html +1 -1
  232. nautobot/dcim/templates/dcim/device/frontports.html +2 -2
  233. nautobot/dcim/templates/dcim/device/interfaces.html +4 -4
  234. nautobot/dcim/templates/dcim/device/inventory.html +1 -1
  235. nautobot/dcim/templates/dcim/device/poweroutlets.html +2 -2
  236. nautobot/dcim/templates/dcim/device/powerports.html +2 -2
  237. nautobot/dcim/templates/dcim/device/rearports.html +2 -2
  238. nautobot/dcim/templates/dcim/inc/location_hierarchy.html +4 -2
  239. nautobot/dcim/templates/dcim/rack.html +1 -1
  240. nautobot/dcim/templates/dcim/rack_elevation_list.html +1 -1
  241. nautobot/dcim/templates/dcim/rackreservation.html +1 -1
  242. nautobot/dcim/tests/test_api.py +7 -7
  243. nautobot/dcim/tests/test_cablepaths.py +0 -1
  244. nautobot/dcim/tests/test_filters.py +16 -13
  245. nautobot/dcim/tests/test_forms.py +2 -3
  246. nautobot/dcim/tests/test_graphql.py +1 -0
  247. nautobot/dcim/tests/test_migrations.py +2 -2
  248. nautobot/dcim/tests/test_models.py +2 -2
  249. nautobot/dcim/tests/test_views.py +77 -14
  250. nautobot/dcim/urls.py +3 -2
  251. nautobot/dcim/utils.py +1 -1
  252. nautobot/dcim/views.py +4 -3
  253. nautobot/extras/admin.py +2 -1
  254. nautobot/extras/api/customfields.py +0 -2
  255. nautobot/extras/api/mixins.py +0 -1
  256. nautobot/extras/api/serializers.py +4 -4
  257. nautobot/extras/api/urls.py +1 -1
  258. nautobot/extras/api/views.py +1 -1
  259. nautobot/extras/apps.py +3 -4
  260. nautobot/extras/choices.py +3 -18
  261. nautobot/extras/context_managers.py +1 -1
  262. nautobot/extras/datasources/__init__.py +3 -1
  263. nautobot/extras/datasources/git.py +33 -12
  264. nautobot/extras/datasources/utils.py +0 -1
  265. nautobot/extras/factory.py +20 -0
  266. nautobot/extras/filters/__init__.py +2 -3
  267. nautobot/extras/filters/customfields.py +0 -1
  268. nautobot/extras/filters/mixins.py +1 -1
  269. nautobot/extras/forms/__init__.py +3 -4
  270. nautobot/extras/forms/base.py +1 -1
  271. nautobot/extras/forms/forms.py +29 -11
  272. nautobot/extras/forms/mixins.py +1 -1
  273. nautobot/extras/graphql/types.py +2 -2
  274. nautobot/extras/health_checks.py +1 -1
  275. nautobot/extras/jobs.py +43 -25
  276. nautobot/extras/management/__init__.py +0 -1
  277. nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -1
  278. nautobot/extras/management/commands/runjob.py +3 -3
  279. nautobot/extras/management/commands/webhook_receiver.py +1 -2
  280. nautobot/extras/migrations/0001_initial_part_1.py +2 -1
  281. nautobot/extras/migrations/0002_initial_part_2.py +2 -1
  282. nautobot/extras/migrations/0003_initial_part_3.py +1 -0
  283. nautobot/extras/migrations/0006_graphqlquery.py +2 -1
  284. nautobot/extras/migrations/0007_configcontextschema.py +3 -1
  285. nautobot/extras/migrations/0009_computedfield.py +3 -1
  286. nautobot/extras/migrations/0011_fileattachment_fileproxy.py +3 -1
  287. nautobot/extras/migrations/0012_healthchecktestmodel.py +2 -1
  288. nautobot/extras/migrations/0014_auto_slug.py +1 -0
  289. nautobot/extras/migrations/0015_scheduled_job.py +3 -1
  290. nautobot/extras/migrations/0016_secret.py +4 -2
  291. nautobot/extras/migrations/0017_joblogentry.py +2 -1
  292. nautobot/extras/migrations/0018_joblog_data_migration.py +2 -1
  293. nautobot/extras/migrations/0021_customfield_changelog_data.py +3 -2
  294. nautobot/extras/migrations/0022_objectchange_object_datav2.py +1 -0
  295. nautobot/extras/migrations/0023_job_model.py +4 -2
  296. nautobot/extras/migrations/0026_job_add_gitrepository_fk.py +1 -0
  297. nautobot/extras/migrations/0029_dynamicgroup.py +3 -1
  298. nautobot/extras/migrations/0031_tag_content_types.py +1 -0
  299. nautobot/extras/migrations/0032_tag_content_types_data_migration.py +1 -0
  300. nautobot/extras/migrations/0040_dynamicgroup__dynamicgroupmembership.py +2 -1
  301. nautobot/extras/migrations/0041_jobresult_job_kwargs.py +1 -0
  302. nautobot/extras/migrations/0043_note.py +3 -1
  303. nautobot/extras/migrations/0044_add_job_hook.py +3 -1
  304. nautobot/extras/migrations/0046_populate_custom_field_slug_label.py +1 -0
  305. nautobot/extras/migrations/0047_enforce_custom_field_slug.py +1 -0
  306. nautobot/extras/migrations/0051_add_job_task_queues.py +1 -0
  307. nautobot/extras/migrations/0055_configcontext_dynamic_groups.py +1 -0
  308. nautobot/extras/migrations/0057_jobbutton.py +3 -1
  309. nautobot/extras/migrations/0065_configcontext_data_migrations.py +1 -0
  310. nautobot/extras/migrations/0067_migrate_job_result_status.py +0 -1
  311. nautobot/extras/migrations/0068_jobresult__add_celery_fields.py +1 -0
  312. nautobot/extras/migrations/0071_replace_related_names.py +1 -0
  313. nautobot/extras/migrations/0077_migrate_custom_field_data.py +1 -0
  314. nautobot/extras/migrations/0078_remove_name_field_and_make_label_field_non_nullable.py +1 -0
  315. nautobot/extras/migrations/0080_tagsfield.py +1 -0
  316. nautobot/extras/migrations/0082_rename_relationship_name_to_label.py +1 -0
  317. nautobot/extras/migrations/0083_ensure_relationship_keys_are_unique.py +1 -0
  318. nautobot/extras/migrations/0090_joblogentry__log_level_data_migration.py +0 -1
  319. nautobot/extras/migrations/0095_ensure_note_timestamps_are_unique.py +4 -5
  320. nautobot/extras/migrations/0097_alter_job_result_remove_result.py +1 -0
  321. nautobot/extras/migrations/0100_fileproxy_job_result.py +1 -0
  322. nautobot/extras/migrations/0101_externalintegration.py +9 -1
  323. nautobot/extras/models/__init__.py +2 -3
  324. nautobot/extras/models/change_logging.py +0 -1
  325. nautobot/extras/models/customfields.py +13 -4
  326. nautobot/extras/models/datasources.py +2 -2
  327. nautobot/extras/models/groups.py +3 -4
  328. nautobot/extras/models/jobs.py +13 -7
  329. nautobot/extras/models/models.py +61 -24
  330. nautobot/extras/models/relationships.py +8 -4
  331. nautobot/extras/models/roles.py +1 -1
  332. nautobot/extras/models/secrets.py +1 -3
  333. nautobot/extras/models/tags.py +0 -1
  334. nautobot/extras/navigation.py +0 -1
  335. nautobot/extras/plugins/__init__.py +6 -7
  336. nautobot/extras/plugins/tables.py +1 -2
  337. nautobot/extras/plugins/utils.py +1 -1
  338. nautobot/extras/plugins/views.py +21 -21
  339. nautobot/extras/querysets.py +30 -13
  340. nautobot/extras/signals.py +6 -7
  341. nautobot/extras/tables.py +13 -5
  342. nautobot/extras/tasks.py +1 -2
  343. nautobot/extras/templates/extras/configcontext_edit.html +1 -1
  344. nautobot/extras/templates/extras/customfield_edit.html +7 -12
  345. nautobot/extras/templates/extras/dynamicgroup_edit.html +42 -47
  346. nautobot/extras/templates/extras/externalintegration_retrieve.html +12 -0
  347. nautobot/extras/templates/extras/externalintegration_update.html +28 -0
  348. nautobot/extras/templates/extras/gitrepository_result.html +2 -2
  349. nautobot/extras/templates/extras/graphqlquery.html +4 -2
  350. nautobot/extras/templates/extras/inc/jobresult_js.html +1 -1
  351. nautobot/extras/templates/extras/job_list.html +1 -1
  352. nautobot/extras/templates/extras/jobresult.html +2 -2
  353. nautobot/extras/templates/extras/secretsgroup_edit.html +40 -45
  354. nautobot/extras/templatetags/custom_links.py +2 -3
  355. nautobot/extras/templatetags/job_buttons.py +76 -83
  356. nautobot/extras/templatetags/log_levels.py +0 -1
  357. nautobot/extras/templatetags/plugins.py +1 -1
  358. nautobot/extras/test_jobs/api_test_job.py +1 -2
  359. nautobot/extras/test_jobs/atomic_transaction.py +1 -2
  360. nautobot/extras/test_jobs/dry_run.py +1 -2
  361. nautobot/extras/test_jobs/fail.py +1 -2
  362. nautobot/extras/test_jobs/field_order.py +1 -1
  363. nautobot/extras/test_jobs/file_upload_fail.py +1 -2
  364. nautobot/extras/test_jobs/file_upload_pass.py +1 -2
  365. nautobot/extras/test_jobs/has_sensitive_variables.py +1 -2
  366. nautobot/extras/test_jobs/ipaddress_vars.py +1 -4
  367. nautobot/extras/test_jobs/job_button_receiver.py +1 -2
  368. nautobot/extras/test_jobs/job_hook_receiver.py +1 -2
  369. nautobot/extras/test_jobs/job_variables.py +7 -2
  370. nautobot/extras/test_jobs/location_with_custom_field.py +1 -2
  371. nautobot/extras/test_jobs/log_redaction.py +1 -2
  372. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -2
  373. nautobot/extras/test_jobs/modify_db.py +1 -2
  374. nautobot/extras/test_jobs/object_var_optional.py +1 -2
  375. nautobot/extras/test_jobs/object_var_required.py +1 -2
  376. nautobot/extras/test_jobs/object_vars.py +1 -2
  377. nautobot/extras/test_jobs/pass.py +1 -2
  378. nautobot/extras/test_jobs/profiling.py +1 -2
  379. nautobot/extras/tests/integration/__init__.py +1 -1
  380. nautobot/extras/tests/integration/test_computedfields.py +2 -2
  381. nautobot/extras/tests/integration/test_configcontextschema.py +5 -5
  382. nautobot/extras/tests/integration/test_plugins.py +5 -4
  383. nautobot/extras/tests/integration/test_tagfilter.py +1 -1
  384. nautobot/extras/tests/test_api.py +15 -9
  385. nautobot/extras/tests/test_changelog.py +3 -2
  386. nautobot/extras/tests/test_context_managers.py +6 -3
  387. nautobot/extras/tests/test_customfields.py +4 -4
  388. nautobot/extras/tests/test_datasources.py +1 -1
  389. nautobot/extras/tests/test_dynamicgroups.py +3 -3
  390. nautobot/extras/tests/test_filters.py +3 -2
  391. nautobot/extras/tests/test_forms.py +5 -6
  392. nautobot/extras/tests/test_git.py +1 -1
  393. nautobot/extras/tests/test_job_variables.py +20 -1
  394. nautobot/extras/tests/test_jobs.py +34 -5
  395. nautobot/extras/tests/test_models.py +156 -6
  396. nautobot/extras/tests/test_notes.py +0 -1
  397. nautobot/extras/tests/test_plugins.py +71 -9
  398. nautobot/extras/tests/test_relationships.py +3 -3
  399. nautobot/extras/tests/test_tags.py +1 -1
  400. nautobot/extras/tests/test_views.py +105 -25
  401. nautobot/extras/tests/test_webhooks.py +4 -5
  402. nautobot/extras/urls.py +0 -2
  403. nautobot/extras/utils.py +11 -9
  404. nautobot/extras/views.py +42 -44
  405. nautobot/generate_secret_key.py +10 -5
  406. nautobot/ipam/api/serializers.py +1 -2
  407. nautobot/ipam/api/urls.py +1 -1
  408. nautobot/ipam/api/views.py +1 -0
  409. nautobot/ipam/apps.py +2 -1
  410. nautobot/ipam/factory.py +6 -9
  411. nautobot/ipam/fields.py +1 -1
  412. nautobot/ipam/filters.py +42 -58
  413. nautobot/ipam/formfields.py +1 -2
  414. nautobot/ipam/forms.py +5 -4
  415. nautobot/ipam/graphql/types.py +1 -1
  416. nautobot/ipam/homepage.py +0 -1
  417. nautobot/ipam/lookups.py +2 -3
  418. nautobot/ipam/migrations/0002_initial_part_2.py +2 -1
  419. nautobot/ipam/migrations/0003_remove_max_length.py +1 -0
  420. nautobot/ipam/migrations/0004_fixup_p2p_broadcast.py +0 -1
  421. nautobot/ipam/migrations/0005_auto_slug.py +1 -0
  422. nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -0
  423. nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +1 -0
  424. nautobot/ipam/migrations/0020_related_name_changes.py +1 -0
  425. nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +1 -2
  426. nautobot/ipam/migrations/0024_interface_to_ipaddress_m2m.py +2 -1
  427. nautobot/ipam/migrations/0025_interface_ipaddress_m2m_data_migration.py +15 -13
  428. nautobot/ipam/migrations/0028_tagsfield.py +1 -0
  429. nautobot/ipam/migrations/0030_ipam__namespaces.py +3 -1
  430. nautobot/ipam/migrations/0034_status_nonnullable.py +1 -0
  431. nautobot/ipam/migrations/0037_data_migration_vlan_group_name_uniqueness.py +0 -1
  432. nautobot/ipam/migrations/0039_alter_ipaddresstointerface_ip_address.py +20 -0
  433. nautobot/ipam/models.py +11 -8
  434. nautobot/ipam/navigation.py +0 -1
  435. nautobot/ipam/querysets.py +48 -49
  436. nautobot/ipam/tables.py +11 -2
  437. nautobot/ipam/templates/ipam/ipaddress.html +30 -6
  438. nautobot/ipam/templates/ipam/ipaddress_interfaces.html +3 -3
  439. nautobot/ipam/templates/ipam/ipaddress_vm_interfaces.html +32 -0
  440. nautobot/ipam/tests/test_api.py +2 -2
  441. nautobot/ipam/tests/test_filters.py +13 -17
  442. nautobot/ipam/tests/test_migrations.py +1 -2
  443. nautobot/ipam/tests/test_models.py +17 -2
  444. nautobot/ipam/tests/test_ordering.py +1 -1
  445. nautobot/ipam/tests/test_querysets.py +2 -2
  446. nautobot/ipam/tests/test_views.py +6 -6
  447. nautobot/ipam/urls.py +6 -0
  448. nautobot/ipam/utils/migrations.py +0 -1
  449. nautobot/ipam/views.py +26 -6
  450. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +142 -142
  451. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  452. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css +1 -1
  453. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  454. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +307 -307
  455. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  456. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  457. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  458. nautobot/project-static/css/base.css +59 -30
  459. nautobot/project-static/css/dark.css +38 -31
  460. nautobot/project-static/docs/404.html +17 -87
  461. nautobot/project-static/docs/apps/index.html +17 -87
  462. nautobot/project-static/docs/apps/nautobot-apps.html +17 -87
  463. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +405 -475
  464. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +28 -98
  465. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2334 -2396
  466. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +17 -87
  467. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +132 -202
  468. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +17 -87
  469. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +155 -87
  470. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +17 -87
  471. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +17 -87
  472. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +42 -112
  473. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1028 -1098
  474. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +186 -256
  475. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +1454 -1156
  476. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +1443 -1507
  477. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +157 -203
  478. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +17 -87
  479. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +32 -102
  480. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3822 -3888
  481. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +990 -1060
  482. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +65 -123
  483. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +1431 -1495
  484. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +3618 -3640
  485. nautobot/project-static/docs/development/apps/api/configuration-view.html +17 -87
  486. nautobot/project-static/docs/development/apps/api/database-backend-config.html +19 -89
  487. nautobot/project-static/docs/development/apps/api/models/django-admin.html +17 -87
  488. nautobot/project-static/docs/development/apps/api/models/global-search.html +17 -87
  489. nautobot/project-static/docs/development/apps/api/models/graphql.html +17 -87
  490. nautobot/project-static/docs/development/apps/api/models/index.html +17 -87
  491. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +17 -87
  492. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +17 -87
  493. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +19 -89
  494. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +19 -89
  495. nautobot/project-static/docs/development/apps/api/platform-features/index.html +19 -89
  496. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +17 -87
  497. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +17 -87
  498. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +21 -87
  499. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +17 -87
  500. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +17 -87
  501. nautobot/project-static/docs/development/apps/api/prometheus.html +17 -87
  502. nautobot/project-static/docs/development/apps/api/setup.html +17 -87
  503. nautobot/project-static/docs/development/apps/api/testing.html +20 -90
  504. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +17 -87
  505. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +17 -87
  506. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +17 -87
  507. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +19 -89
  508. nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +209 -140
  509. nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +13 -5390
  510. nautobot/project-static/docs/development/apps/api/views/base-template.html +17 -87
  511. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +22 -92
  512. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +17 -87
  513. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +17 -87
  514. nautobot/project-static/docs/development/apps/api/views/index.html +17 -87
  515. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +17 -87
  516. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +17 -87
  517. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +17 -87
  518. nautobot/project-static/docs/development/apps/api/views/notes.html +19 -89
  519. nautobot/project-static/docs/development/apps/api/views/rest-api.html +17 -87
  520. nautobot/project-static/docs/development/apps/api/views/urls.html +17 -87
  521. nautobot/project-static/docs/development/apps/api/views/view-overrides.html +13 -5385
  522. nautobot/project-static/docs/development/apps/index.html +17 -87
  523. nautobot/project-static/docs/development/apps/migration/code-updates.html +17 -87
  524. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +17 -87
  525. nautobot/project-static/docs/development/apps/migration/from-v1.html +17 -88
  526. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +17 -87
  527. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +17 -87
  528. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +17 -87
  529. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +17 -87
  530. nautobot/project-static/docs/development/apps/porting-from-netbox.html +17 -87
  531. nautobot/project-static/docs/development/core/application-registry.html +20 -90
  532. nautobot/project-static/docs/development/core/best-practices.html +20 -90
  533. nautobot/project-static/docs/development/core/bootstrap-ui.html +5360 -0
  534. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +17 -87
  535. nautobot/project-static/docs/development/core/extending-models.html +21 -87
  536. nautobot/project-static/docs/development/core/generic-views.html +17 -87
  537. nautobot/project-static/docs/development/core/getting-started.html +124 -301
  538. nautobot/project-static/docs/development/core/homepage.html +17 -87
  539. nautobot/project-static/docs/development/core/index.html +17 -87
  540. nautobot/project-static/docs/development/core/model-features.html +17 -87
  541. nautobot/project-static/docs/development/core/natural-keys.html +17 -87
  542. nautobot/project-static/docs/development/core/navigation-menu.html +17 -87
  543. nautobot/project-static/docs/development/core/react-ui.html +13 -5668
  544. nautobot/project-static/docs/development/core/release-checklist.html +20 -96
  545. nautobot/project-static/docs/development/core/role-internals.html +20 -90
  546. nautobot/project-static/docs/development/core/style-guide.html +77 -146
  547. nautobot/project-static/docs/development/core/templates.html +20 -90
  548. nautobot/project-static/docs/development/core/testing.html +17 -87
  549. nautobot/project-static/docs/development/core/user-preferences.html +17 -87
  550. nautobot/project-static/docs/development/index.html +17 -87
  551. nautobot/project-static/docs/development/jobs/index.html +424 -425
  552. nautobot/project-static/docs/development/jobs/migration/from-v1.html +75 -98
  553. nautobot/project-static/docs/development/react-ui.html +3 -3
  554. nautobot/project-static/docs/img/relationship_w_json_filter.png +0 -0
  555. nautobot/project-static/docs/index.html +90 -93
  556. nautobot/project-static/docs/media/admin_ui_run_permission.png +0 -0
  557. nautobot/project-static/docs/media/development/homepage_changelog_panel.png +0 -0
  558. nautobot/project-static/docs/media/development/homepage_dcim_panel.png +0 -0
  559. nautobot/project-static/docs/media/installation/nautobot_ui_admin.png +0 -0
  560. nautobot/project-static/docs/media/installation/nautobot_ui_login.png +0 -0
  561. nautobot/project-static/docs/media/models/dynamicgroup_filtering_01.png +0 -0
  562. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_01.png +0 -0
  563. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_02.png +0 -0
  564. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_03.png +0 -0
  565. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_04.png +0 -0
  566. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_1_05.png +0 -0
  567. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_01.png +0 -0
  568. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_02.png +0 -0
  569. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_03.png +0 -0
  570. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_04.png +0 -0
  571. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_05.png +0 -0
  572. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_06.png +0 -0
  573. nautobot/project-static/docs/media/models/dynamicgroup_workflow_advanced_2_07.png +0 -0
  574. nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_01.png +0 -0
  575. nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_02.png +0 -0
  576. nautobot/project-static/docs/media/models/dynamicgroup_workflow_basic_03.png +0 -0
  577. nautobot/project-static/docs/media/models/jobbutton_form.png +0 -0
  578. nautobot/project-static/docs/media/models/site_jobbuttons.png +0 -0
  579. nautobot/project-static/docs/media/plugins/plugin_admin_config.png +0 -0
  580. nautobot/project-static/docs/media/plugins/plugin_admin_ui.png +0 -0
  581. nautobot/project-static/docs/media/ss_config_contexts.png +0 -0
  582. nautobot/project-static/docs/media/ss_graphiql.png +0 -0
  583. nautobot/project-static/docs/media/ss_main_page.png +0 -0
  584. nautobot/project-static/docs/media/ss_plugin_chatops.png +0 -0
  585. nautobot/project-static/docs/media/ss_plugin_golden_config.png +0 -0
  586. nautobot/project-static/docs/media/ss_prefix_hierarchy.png +0 -0
  587. nautobot/project-static/docs/objects.inv +0 -0
  588. nautobot/project-static/docs/release-notes/index.html +17 -87
  589. nautobot/project-static/docs/release-notes/version-1.0.html +17 -87
  590. nautobot/project-static/docs/release-notes/version-1.1.html +17 -87
  591. nautobot/project-static/docs/release-notes/version-1.2.html +17 -87
  592. nautobot/project-static/docs/release-notes/version-1.3.html +17 -87
  593. nautobot/project-static/docs/release-notes/version-1.4.html +18 -88
  594. nautobot/project-static/docs/release-notes/version-1.5.html +17 -87
  595. nautobot/project-static/docs/release-notes/version-1.6.html +17 -87
  596. nautobot/project-static/docs/release-notes/version-2.0.html +467 -336
  597. nautobot/project-static/docs/release-notes/version-2.1.html +470 -108
  598. nautobot/project-static/docs/search/search_index.json +1 -1
  599. nautobot/project-static/docs/sitemap.xml +240 -255
  600. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  601. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +17 -87
  602. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +20 -90
  603. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +17 -87
  604. nautobot/project-static/docs/user-guide/administration/configuration/index.html +17 -87
  605. nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +13 -5417
  606. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +47 -113
  607. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +17 -87
  608. nautobot/project-static/docs/user-guide/administration/guides/caching.html +17 -87
  609. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +17 -87
  610. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +17 -87
  611. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +17 -87
  612. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +17 -87
  613. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +17 -87
  614. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +17 -87
  615. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +17 -87
  616. nautobot/project-static/docs/user-guide/administration/installation/docker.html +17 -87
  617. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +17 -87
  618. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +17 -87
  619. nautobot/project-static/docs/user-guide/administration/installation/index.html +22 -109
  620. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +18 -101
  621. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +23 -140
  622. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +17 -87
  623. nautobot/project-static/docs/user-guide/administration/installation/services.html +17 -87
  624. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +17 -87
  625. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +17 -87
  626. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +92 -181
  627. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +17 -87
  628. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +17 -87
  629. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +17 -87
  630. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +17 -87
  631. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +17 -87
  632. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +17 -87
  633. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +18 -88
  634. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +17 -87
  635. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +17 -87
  636. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +23 -89
  637. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +17 -87
  638. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +17 -87
  639. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +17 -87
  640. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +17 -87
  641. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +17 -87
  642. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +17 -87
  643. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +17 -87
  644. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +17 -87
  645. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +17 -87
  646. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +17 -87
  647. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +17 -87
  648. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +17 -87
  649. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +17 -87
  650. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +18 -88
  651. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +17 -87
  652. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +17 -87
  653. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +17 -87
  654. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +17 -87
  655. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +17 -87
  656. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +17 -87
  657. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +17 -87
  658. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +17 -87
  659. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +17 -87
  660. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +17 -87
  661. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +17 -87
  662. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +17 -87
  663. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +17 -87
  664. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +17 -87
  665. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +17 -87
  666. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +17 -87
  667. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +17 -87
  668. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +17 -87
  669. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +17 -87
  670. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +17 -87
  671. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +17 -87
  672. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +17 -87
  673. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +17 -87
  674. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +17 -87
  675. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +17 -87
  676. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +17 -87
  677. nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio +259 -1
  678. nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio.png +0 -0
  679. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +18 -88
  680. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +17 -87
  681. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +17 -87
  682. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +17 -87
  683. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +17 -87
  684. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +17 -87
  685. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +17 -87
  686. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +17 -87
  687. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +17 -87
  688. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +17 -87
  689. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +17 -87
  690. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +17 -87
  691. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +17 -87
  692. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +17 -87
  693. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +17 -87
  694. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +17 -87
  695. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +23 -93
  696. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +17 -87
  697. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +17 -87
  698. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +26 -96
  699. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +35 -103
  700. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +19 -89
  701. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +19 -91
  702. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +19 -89
  703. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +24 -94
  704. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +39 -258
  705. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +45 -243
  706. nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_choices.png +0 -0
  707. nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_detail_grouped.png +0 -0
  708. nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_detail_label.png +0 -0
  709. nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_edit.png +0 -0
  710. nautobot/project-static/docs/user-guide/feature-guides/images/custom-fields/custom_field_select.png +0 -0
  711. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/1-create-location-type.png +0 -0
  712. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/10-add-platform.png +0 -0
  713. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/11-platforms-page.png +0 -0
  714. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/12-add-tenant.png +0 -0
  715. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/13-assign-tenant-to-device.png +0 -0
  716. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/14-assign-tenant-to-device-2.png +0 -0
  717. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/15-create-device-type.png +0 -0
  718. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/16-interface-templates.png +0 -0
  719. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/17-templated-interfaces.png +0 -0
  720. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/18-assign-device-type.png +0 -0
  721. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/19-edit-ints-for-lag.png +0 -0
  722. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/2-create-manufacturer.png +0 -0
  723. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/20-ints-int-lag.png +0 -0
  724. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/21-device-type.png +0 -0
  725. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/22-create-vlans.png +0 -0
  726. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/23-create-vlans-2.png +0 -0
  727. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/24-vlan-main-page.png +0 -0
  728. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/25-add-vlan-to-interface.png +0 -0
  729. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/26-add-vlan-to-interface-2.png +0 -0
  730. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/27-add-rir.png +0 -0
  731. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/3-create-role.png +0 -0
  732. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/30-add-prefix.png +0 -0
  733. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/32-add-ip-addr.png +0 -0
  734. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/33-assign-address.png +0 -0
  735. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/34-assign-address-2.png +0 -0
  736. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/35-assign-address-3.png +0 -0
  737. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/36-verify-address.png +0 -0
  738. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/37-verify-prefix.png +0 -0
  739. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/38-verify-prefix2.png +0 -0
  740. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/4-create-device-type.png +0 -0
  741. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/41-device-search-results.png +0 -0
  742. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/42-address-search-v2.png +0 -0
  743. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/43-get-to-device-main-page.png +0 -0
  744. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/44-add-platform.png +0 -0
  745. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/5-create-device.png +0 -0
  746. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/6-create-location.png +0 -0
  747. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/7-location-type-page.png +0 -0
  748. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/8-location-page.png +0 -0
  749. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/01-git-data-source.png +0 -0
  750. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/02-git-data-source.png +0 -0
  751. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/03-git-data-source.png +0 -0
  752. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/04-git-data-source.png +0 -0
  753. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/05-git-data-source.png +0 -0
  754. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/06-git-data-source.png +0 -0
  755. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/07-git-data-source.png +0 -0
  756. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/08-git-data-source.png +0 -0
  757. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/09-git-data-source.png +0 -0
  758. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/10-git-data-source.png +0 -0
  759. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/11-git-data-source.png +0 -0
  760. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/12-git-data-source.png +0 -0
  761. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/13-git-data-source.png +0 -0
  762. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/14-git-data-source.png +0 -0
  763. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/15-git-data-source.png +0 -0
  764. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/16-git-data-source.png +0 -0
  765. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/17-git-data-source.png +0 -0
  766. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/00-graphiql.png +0 -0
  767. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/01-graphiql-explorer.png +0 -0
  768. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/02-graphiql-explorer-device-query.png +0 -0
  769. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/03-graphiql-explorer-device-attributes.png +0 -0
  770. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/04-graphql-query-01.png +0 -0
  771. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/05-graphiql-autocomplete.png +0 -0
  772. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/06-graphql-query-02.png +0 -0
  773. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/07-graphql-query-03.png +0 -0
  774. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/08-graphql-query-04.png +0 -0
  775. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/09-graphql-query-05.png +0 -0
  776. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/10-graphql-swagger.png +0 -0
  777. nautobot/project-static/docs/user-guide/feature-guides/images/graphql/11-graphql-query-06.png +0 -0
  778. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/ip_merge_button.png +0 -0
  779. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/merge_button.png +0 -0
  780. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/merge_view.png +0 -0
  781. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/no_more_dup_ips.png +0 -0
  782. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/skip_button.png +0 -0
  783. nautobot/project-static/docs/user-guide/feature-guides/images/ip-address-merge-tool/unselect_ips.png +0 -0
  784. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/01-relationships.png +0 -0
  785. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/02-relationships.png +0 -0
  786. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/03-relationships.png +0 -0
  787. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/04-relationships.png +0 -0
  788. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/05-relationships.png +0 -0
  789. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/06-relationships.png +0 -0
  790. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/07-relationships.png +0 -0
  791. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/08-relationships.png +0 -0
  792. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/09-relationships.png +0 -0
  793. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/10-relationships.png +0 -0
  794. nautobot/project-static/docs/user-guide/feature-guides/images/relationships/11-relationships.png +0 -0
  795. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +20 -90
  796. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +22 -92
  797. nautobot/project-static/docs/user-guide/index.html +17 -87
  798. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +17 -87
  799. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +17 -87
  800. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +17 -87
  801. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +17 -87
  802. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +22 -88
  803. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +17 -87
  804. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +68 -87
  805. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +18 -88
  806. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +17 -87
  807. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +17 -87
  808. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +17 -87
  809. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +17 -87
  810. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +17 -87
  811. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +22 -88
  812. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +17 -87
  813. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +17 -87
  814. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +17 -87
  815. nautobot/project-static/docs/user-guide/platform-functionality/note.html +17 -87
  816. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +18 -88
  817. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +17 -87
  818. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +17 -87
  819. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +17 -87
  820. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +17 -87
  821. nautobot/project-static/docs/user-guide/platform-functionality/role.html +17 -87
  822. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +17 -87
  823. nautobot/project-static/docs/user-guide/platform-functionality/status.html +17 -87
  824. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +17 -87
  825. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +43 -91
  826. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +21 -87
  827. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +17 -87
  828. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +17 -87
  829. nautobot/project-static/js/homepage_layout.js +170 -0
  830. nautobot/project-static/js/theme.js +0 -5
  831. nautobot/tenancy/api/urls.py +1 -1
  832. nautobot/tenancy/api/views.py +1 -0
  833. nautobot/tenancy/factory.py +2 -2
  834. nautobot/tenancy/filters/__init__.py +1 -2
  835. nautobot/tenancy/forms.py +2 -2
  836. nautobot/tenancy/homepage.py +0 -1
  837. nautobot/tenancy/migrations/0001_initial.py +2 -1
  838. nautobot/tenancy/migrations/0002_auto_slug.py +1 -0
  839. nautobot/tenancy/migrations/0004_change_tree_manager_on_tree_models.py +1 -0
  840. nautobot/tenancy/migrations/0008_tagsfield.py +1 -0
  841. nautobot/tenancy/models.py +0 -1
  842. nautobot/tenancy/navigation.py +0 -1
  843. nautobot/tenancy/tables.py +1 -0
  844. nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
  845. nautobot/tenancy/tests/test_filters.py +5 -5
  846. nautobot/tenancy/urls.py +1 -0
  847. nautobot/tenancy/views.py +2 -2
  848. nautobot/users/admin.py +1 -2
  849. nautobot/users/api/urls.py +1 -1
  850. nautobot/users/api/views.py +6 -4
  851. nautobot/users/factory.py +8 -24
  852. nautobot/users/filters.py +4 -4
  853. nautobot/users/forms.py +1 -0
  854. nautobot/users/migrations/0004_alter_user_managers.py +1 -0
  855. nautobot/users/migrations/0008_make_object_permission_a_changelogged_model.py +22 -0
  856. nautobot/users/models.py +2 -2
  857. nautobot/users/tests/test_api.py +7 -6
  858. nautobot/users/tests/test_filters.py +0 -1
  859. nautobot/users/tests/test_models.py +0 -1
  860. nautobot/users/tests/test_password_ui.py +1 -1
  861. nautobot/users/views.py +5 -4
  862. nautobot/virtualization/api/urls.py +1 -1
  863. nautobot/virtualization/api/views.py +2 -1
  864. nautobot/virtualization/apps.py +1 -1
  865. nautobot/virtualization/choices.py +0 -1
  866. nautobot/virtualization/factory.py +1 -1
  867. nautobot/virtualization/filters.py +1 -1
  868. nautobot/virtualization/forms.py +6 -6
  869. nautobot/virtualization/homepage.py +0 -1
  870. nautobot/virtualization/migrations/0003_vminterface_verbose_name.py +1 -0
  871. nautobot/virtualization/migrations/0004_auto_slug.py +1 -0
  872. nautobot/virtualization/migrations/0005_add_natural_indexing.py +1 -0
  873. nautobot/virtualization/migrations/0006_vminterface_status.py +1 -0
  874. nautobot/virtualization/migrations/0007_vminterface_status_data_migration.py +1 -0
  875. nautobot/virtualization/migrations/0011_alter_vminterface_mac_address.py +1 -0
  876. nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -0
  877. nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +1 -0
  878. nautobot/virtualization/migrations/0018_related_name_changes.py +1 -0
  879. nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +1 -0
  880. nautobot/virtualization/migrations/0025_status_nonnullable.py +1 -0
  881. nautobot/virtualization/models.py +1 -2
  882. nautobot/virtualization/navigation.py +0 -1
  883. nautobot/virtualization/signals.py +0 -1
  884. nautobot/virtualization/tables.py +1 -0
  885. nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -2
  886. nautobot/virtualization/tests/test_filters.py +3 -3
  887. nautobot/virtualization/tests/test_models.py +1 -1
  888. nautobot/virtualization/tests/test_views.py +2 -2
  889. nautobot/virtualization/urls.py +1 -0
  890. nautobot/virtualization/views.py +1 -1
  891. {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/METADATA +10 -2
  892. {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/RECORD +895 -993
  893. nautobot/core/management/commands/build_ui.py +0 -281
  894. nautobot/core/templates/base_react.html +0 -55
  895. nautobot/core/tests/test_cli.py +0 -25
  896. nautobot/project-static/docs/media/installation/nautobot_ui_guest.png +0 -0
  897. nautobot/project-static/docs/user-guide/core-data-model/ipam/media/ipam_namespace_documentation.drawio.svg +0 -4
  898. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/39-address-search.png +0 -0
  899. nautobot/project-static/docs/user-guide/feature-guides/images/getting-started-nautobot-ui/40-addr-main-page.png +0 -0
  900. nautobot/project-static/docs/user-guide/feature-guides/images/git-as-data-source/18-git-data-source.png +0 -0
  901. nautobot/ui/.eslintignore +0 -3
  902. nautobot/ui/.gitignore +0 -7
  903. nautobot/ui/.prettierignore +0 -6
  904. nautobot/ui/.prettierrc +0 -4
  905. nautobot/ui/README.md +0 -27
  906. nautobot/ui/config/env.js +0 -102
  907. nautobot/ui/config/getHttpsConfig.js +0 -68
  908. nautobot/ui/config/jest/babelTransform.js +0 -14
  909. nautobot/ui/config/jest/cssTransform.js +0 -12
  910. nautobot/ui/config/jest/fileTransform.js +0 -38
  911. nautobot/ui/config/modules.js +0 -151
  912. nautobot/ui/config/paths.js +0 -67
  913. nautobot/ui/config/webpack/persistentCache/createEnvironmentHash.js +0 -8
  914. nautobot/ui/config/webpack.config.js +0 -674
  915. nautobot/ui/config/webpackDevServer.config.js +0 -127
  916. nautobot/ui/jest.config.js +0 -35
  917. nautobot/ui/jsconfig.json +0 -4
  918. nautobot/ui/package-lock.json +0 -22947
  919. nautobot/ui/package.json +0 -119
  920. nautobot/ui/public/index.html +0 -47
  921. nautobot/ui/public/logo192.png +0 -0
  922. nautobot/ui/public/logo512.png +0 -0
  923. nautobot/ui/public/manifest.json +0 -25
  924. nautobot/ui/public/nautobot_logo.svg +0 -131
  925. nautobot/ui/public/robots.txt +0 -3
  926. nautobot/ui/scripts/build.js +0 -224
  927. nautobot/ui/scripts/start.js +0 -140
  928. nautobot/ui/scripts/test.js +0 -40
  929. nautobot/ui/src/App.js +0 -79
  930. nautobot/ui/src/components/AppFullWidthComponents.js +0 -8
  931. nautobot/ui/src/components/AppTab.js +0 -40
  932. nautobot/ui/src/components/Apps.js +0 -60
  933. nautobot/ui/src/components/FeedbackModal.js +0 -123
  934. nautobot/ui/src/components/FiltersPanel.js +0 -693
  935. nautobot/ui/src/components/HomeChangelogPanel.js +0 -98
  936. nautobot/ui/src/components/HomePanel.js +0 -58
  937. nautobot/ui/src/components/JobHistoryTable.js +0 -78
  938. nautobot/ui/src/components/Layout.js +0 -76
  939. nautobot/ui/src/components/LoadingWidget.js +0 -14
  940. nautobot/ui/src/components/Navbar.js +0 -204
  941. nautobot/ui/src/components/NotificationPopover.js +0 -27
  942. nautobot/ui/src/components/ObjectTable/ObjectListTable.js +0 -300
  943. nautobot/ui/src/components/ObjectTable/ObjectTable.js +0 -96
  944. nautobot/ui/src/components/ObjectTable/ObjectTableItem.js +0 -70
  945. nautobot/ui/src/components/ObjectTable/index.js +0 -3
  946. nautobot/ui/src/components/Pagination/PageNumberForm.js +0 -228
  947. nautobot/ui/src/components/Pagination/PageSizeForm.js +0 -65
  948. nautobot/ui/src/components/Pagination/Pagination.js +0 -67
  949. nautobot/ui/src/components/Pagination/index.js +0 -3
  950. nautobot/ui/src/components/ReferenceDataTag.js +0 -35
  951. nautobot/ui/src/components/Retrieve/RenderChangeLogsTab.js +0 -58
  952. nautobot/ui/src/components/Retrieve/RenderColumn.js +0 -30
  953. nautobot/ui/src/components/Retrieve/RenderGroup.js +0 -24
  954. nautobot/ui/src/components/Retrieve/RenderHeader.js +0 -125
  955. nautobot/ui/src/components/Retrieve/RenderNotesTab.js +0 -60
  956. nautobot/ui/src/components/Retrieve/RenderTable.js +0 -33
  957. nautobot/ui/src/components/Retrieve/RenderTabs.js +0 -56
  958. nautobot/ui/src/components/Retrieve/index.js +0 -7
  959. nautobot/ui/src/components/RouterButton.js +0 -10
  960. nautobot/ui/src/components/RouterLink.js +0 -10
  961. nautobot/ui/src/components/SidebarNav.js +0 -156
  962. nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +0 -16
  963. nautobot/ui/src/components/__tests__/AppTab.test.js +0 -21
  964. nautobot/ui/src/components/__tests__/Apps.test.js +0 -14
  965. nautobot/ui/src/components/__tests__/Layout.test.js +0 -33
  966. nautobot/ui/src/components/__tests__/PageSizeForm.test.js +0 -13
  967. nautobot/ui/src/components/__tests__/Pagination.test.js +0 -43
  968. nautobot/ui/src/components/__tests__/Table.test.js +0 -39
  969. nautobot/ui/src/components/__tests__/TableItem.test.js +0 -39
  970. nautobot/ui/src/components/index.js +0 -4
  971. nautobot/ui/src/constants/apiPath.js +0 -13
  972. nautobot/ui/src/constants/icons.js +0 -15
  973. nautobot/ui/src/constants/size.js +0 -15
  974. nautobot/ui/src/file_templates/app_imports.js.j2 +0 -7
  975. nautobot/ui/src/file_templates/jsconfig-base.json +0 -12
  976. nautobot/ui/src/index.js +0 -65
  977. nautobot/ui/src/reportWebVitals.js +0 -15
  978. nautobot/ui/src/router.js +0 -77
  979. nautobot/ui/src/utils/api.js +0 -160
  980. nautobot/ui/src/utils/app-import.js +0 -15
  981. nautobot/ui/src/utils/color.js +0 -15
  982. nautobot/ui/src/utils/date.js +0 -14
  983. nautobot/ui/src/utils/index.js +0 -15
  984. nautobot/ui/src/utils/navigation.js +0 -48
  985. nautobot/ui/src/utils/session.js +0 -64
  986. nautobot/ui/src/utils/store.js +0 -242
  987. nautobot/ui/src/utils/string.js +0 -6
  988. nautobot/ui/src/utils/url.js +0 -4
  989. nautobot/ui/src/views/Home.js +0 -142
  990. nautobot/ui/src/views/InstalledApps.js +0 -80
  991. nautobot/ui/src/views/Login.js +0 -48
  992. nautobot/ui/src/views/Logout.js +0 -20
  993. nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +0 -11
  994. nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +0 -107
  995. nautobot/ui/src/views/__tests__/Login.test.js +0 -15
  996. nautobot/ui/src/views/generic/GenericView.js +0 -191
  997. nautobot/ui/src/views/generic/ObjectCreate.js +0 -96
  998. nautobot/ui/src/views/generic/ObjectList.js +0 -137
  999. nautobot/ui/src/views/generic/ObjectRetrieve.js +0 -87
  1000. {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/LICENSE.txt +0 -0
  1001. {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/WHEEL +0 -0
  1002. {nautobot-2.1.0b1.dist-info → nautobot-2.1.1.dist-info}/entry_points.txt +0 -0
@@ -977,20 +977,6 @@
977
977
 
978
978
 
979
979
 
980
-
981
-
982
-
983
-
984
-
985
- <li class="md-nav__item">
986
- <a href="../../../user-guide/administration/configuration/node-configuration.html" class="md-nav__link">
987
- Node.js Configuration
988
- </a>
989
- </li>
990
-
991
-
992
-
993
-
994
980
  </ul>
995
981
  </nav>
996
982
  </li>
@@ -1439,34 +1425,6 @@
1439
1425
 
1440
1426
 
1441
1427
 
1442
- <li class="md-nav__item">
1443
- <a href="../../../user-guide/feature-guides/git-data-source.html" class="md-nav__link">
1444
- Git as a Data Source
1445
- </a>
1446
- </li>
1447
-
1448
-
1449
-
1450
-
1451
-
1452
-
1453
-
1454
-
1455
-
1456
- <li class="md-nav__item">
1457
- <a href="../../../user-guide/feature-guides/graphql.html" class="md-nav__link">
1458
- GraphQL
1459
- </a>
1460
- </li>
1461
-
1462
-
1463
-
1464
-
1465
-
1466
-
1467
-
1468
-
1469
-
1470
1428
  <li class="md-nav__item">
1471
1429
  <a href="../../../user-guide/feature-guides/relationships.html" class="md-nav__link">
1472
1430
  Relationships
@@ -3556,23 +3514,9 @@
3556
3514
 
3557
3515
 
3558
3516
 
3559
- <li class="md-nav__item">
3560
- <a href="../../../development/apps/api/views/view-overrides.html" class="md-nav__link">
3561
- View Overrides
3562
- </a>
3563
- </li>
3564
-
3565
-
3566
-
3567
-
3568
-
3569
-
3570
-
3571
-
3572
-
3573
3517
  <li class="md-nav__item">
3574
3518
  <a href="../../../development/apps/api/views/core-view-overrides.html" class="md-nav__link">
3575
- Legacy View Overrides
3519
+ View Overrides
3576
3520
  </a>
3577
3521
  </li>
3578
3522
 
@@ -3661,7 +3605,7 @@
3661
3605
 
3662
3606
  <li class="md-nav__item">
3663
3607
  <a href="../../../development/apps/api/platform-features/filter-extensions.html" class="md-nav__link">
3664
- Filter Extentions
3608
+ Filter Extensions
3665
3609
  </a>
3666
3610
  </li>
3667
3611
 
@@ -3869,21 +3813,7 @@
3869
3813
 
3870
3814
  <li class="md-nav__item">
3871
3815
  <a href="../../../development/apps/api/ui-extensions/object-detail-views.html" class="md-nav__link">
3872
- Object Detail Views
3873
- </a>
3874
- </li>
3875
-
3876
-
3877
-
3878
-
3879
-
3880
-
3881
-
3882
-
3883
-
3884
- <li class="md-nav__item">
3885
- <a href="../../../development/apps/api/ui-extensions/tabs.html" class="md-nav__link">
3886
- Tabs
3816
+ Object Detail Views and Tabs
3887
3817
  </a>
3888
3818
  </li>
3889
3819
 
@@ -4639,6 +4569,20 @@
4639
4569
 
4640
4570
 
4641
4571
 
4572
+ <li class="md-nav__item">
4573
+ <a href="../../../development/core/bootstrap-ui.html" class="md-nav__link">
4574
+ Bootstrap UI
4575
+ </a>
4576
+ </li>
4577
+
4578
+
4579
+
4580
+
4581
+
4582
+
4583
+
4584
+
4585
+
4642
4586
  <li class="md-nav__item">
4643
4587
  <a href="../../../development/core/best-practices.html" class="md-nav__link">
4644
4588
  Best Practices
@@ -4751,20 +4695,6 @@
4751
4695
 
4752
4696
 
4753
4697
 
4754
- <li class="md-nav__item">
4755
- <a href="../../../development/core/react-ui.html" class="md-nav__link">
4756
- React UI
4757
- </a>
4758
- </li>
4759
-
4760
-
4761
-
4762
-
4763
-
4764
-
4765
-
4766
-
4767
-
4768
4698
  <li class="md-nav__item">
4769
4699
  <a href="../../../development/core/role-internals.html" class="md-nav__link">
4770
4700
  Role Internals
@@ -5380,7 +5310,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5380
5310
 
5381
5311
  <details class="quote">
5382
5312
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5383
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
5313
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-57">57</a></span>
5314
+ <span class="normal"><a href="#__codelineno-0-58">58</a></span>
5384
5315
  <span class="normal"><a href="#__codelineno-0-59">59</a></span>
5385
5316
  <span class="normal"><a href="#__codelineno-0-60">60</a></span>
5386
5317
  <span class="normal"><a href="#__codelineno-0-61">61</a></span>
@@ -5393,22 +5324,21 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5393
5324
  <span class="normal"><a href="#__codelineno-0-68">68</a></span>
5394
5325
  <span class="normal"><a href="#__codelineno-0-69">69</a></span>
5395
5326
  <span class="normal"><a href="#__codelineno-0-70">70</a></span>
5396
- <span class="normal"><a href="#__codelineno-0-71">71</a></span>
5397
- <span class="normal"><a href="#__codelineno-0-72">72</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">class</span> <span class="nc">BigInteger</span><span class="p">(</span><span class="n">Scalar</span><span class="p">):</span>
5398
- <a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer which, unlike GraphQL&#39;s native Int type, doesn&#39;t reject values outside (-2^31, 2^31-1).</span>
5399
- <a id="__codelineno-0-60" name="__codelineno-0-60"></a>
5400
- <a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Currently only used for ASNField, which goes up to 2^32-1 (i.e., unsigned 32-bit int); it&#39;s possible</span>
5401
- <a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> that this approach may fail for values in excess of 2^53-1 (the largest integer value supported in JavaScript).</span>
5402
- <a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &quot;&quot;&quot;</span>
5403
- <a id="__codelineno-0-64" name="__codelineno-0-64"></a>
5404
- <a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">serialize</span> <span class="o">=</span> <span class="nb">int</span>
5405
- <a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">parse_value</span> <span class="o">=</span> <span class="nb">int</span>
5406
- <a id="__codelineno-0-67" name="__codelineno-0-67"></a>
5407
- <a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="nd">@staticmethod</span>
5408
- <a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">def</span> <span class="nf">parse_literal</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
5409
- <a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">ast</span><span class="o">.</span><span class="n">IntValue</span><span class="p">):</span>
5410
- <a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
5411
- <a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">return</span> <span class="kc">None</span>
5327
+ <span class="normal"><a href="#__codelineno-0-71">71</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="k">class</span> <span class="nc">BigInteger</span><span class="p">(</span><span class="n">Scalar</span><span class="p">):</span>
5328
+ <a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;An integer which, unlike GraphQL&#39;s native Int type, doesn&#39;t reject values outside (-2^31, 2^31-1).</span>
5329
+ <a id="__codelineno-0-59" name="__codelineno-0-59"></a>
5330
+ <a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Currently only used for ASNField, which goes up to 2^32-1 (i.e., unsigned 32-bit int); it&#39;s possible</span>
5331
+ <a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> that this approach may fail for values in excess of 2^53-1 (the largest integer value supported in JavaScript).</span>
5332
+ <a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
5333
+ <a id="__codelineno-0-63" name="__codelineno-0-63"></a>
5334
+ <a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">serialize</span> <span class="o">=</span> <span class="nb">int</span>
5335
+ <a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">parse_value</span> <span class="o">=</span> <span class="nb">int</span>
5336
+ <a id="__codelineno-0-66" name="__codelineno-0-66"></a>
5337
+ <a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="nd">@staticmethod</span>
5338
+ <a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">def</span> <span class="nf">parse_literal</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
5339
+ <a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">ast</span><span class="o">.</span><span class="n">IntValue</span><span class="p">):</span>
5340
+ <a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
5341
+ <a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="kc">None</span>
5412
5342
  </code></pre></div></td></tr></table></div>
5413
5343
  </details>
5414
5344
 
@@ -5555,7 +5485,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5555
5485
 
5556
5486
  <details class="quote">
5557
5487
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
5558
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
5488
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
5489
+ <span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
5559
5490
  <span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
5560
5491
  <span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
5561
5492
  <span class="normal"><a href="#__codelineno-0-100">100</a></span>
@@ -5581,35 +5512,34 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5581
5512
  <span class="normal"><a href="#__codelineno-0-120">120</a></span>
5582
5513
  <span class="normal"><a href="#__codelineno-0-121">121</a></span>
5583
5514
  <span class="normal"><a href="#__codelineno-0-122">122</a></span>
5584
- <span class="normal"><a href="#__codelineno-0-123">123</a></span>
5585
- <span class="normal"><a href="#__codelineno-0-124">124</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="k">def</span> <span class="nf">construct_resolver</span><span class="p">(</span><span class="n">model_name</span><span class="p">,</span> <span class="n">resolver_type</span><span class="p">):</span>
5586
- <a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Constructs a resolve_[cable_peer|connected_endpoint]_&lt;endpoint&gt; function for a given model type.</span>
5587
- <a id="__codelineno-0-99" name="__codelineno-0-99"></a>
5588
- <a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Args:</span>
5589
- <a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> model_name (str): Name of the model to construct a resolver function for (e.g. CircuitTermination).</span>
5590
- <a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> resolver_type (str): One of [&#39;connected_endpoint&#39;, &#39;cable_peer&#39;]</span>
5591
- <a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> &quot;&quot;&quot;</span>
5592
- <a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">if</span> <span class="n">resolver_type</span> <span class="o">==</span> <span class="s2">&quot;cable_peer&quot;</span><span class="p">:</span>
5593
- <a id="__codelineno-0-105" name="__codelineno-0-105"></a>
5594
- <a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">def</span> <span class="nf">resolve_cable_peer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
5595
- <a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="n">peer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cable_peer</span><span class="p">()</span>
5596
- <a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="n">model_name</span><span class="p">:</span>
5597
- <a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="n">peer</span>
5598
- <a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="k">return</span> <span class="kc">None</span>
5599
- <a id="__codelineno-0-111" name="__codelineno-0-111"></a>
5600
- <a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">return</span> <span class="n">resolve_cable_peer</span>
5601
- <a id="__codelineno-0-113" name="__codelineno-0-113"></a>
5602
- <a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="k">if</span> <span class="n">resolver_type</span> <span class="o">==</span> <span class="s2">&quot;connected_endpoint&quot;</span><span class="p">:</span>
5603
- <a id="__codelineno-0-115" name="__codelineno-0-115"></a>
5604
- <a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">def</span> <span class="nf">resolve_connected_endpoint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
5605
- <a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">peer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected_endpoint</span>
5606
- <a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="n">model_name</span><span class="p">:</span>
5607
- <a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="k">return</span> <span class="n">peer</span>
5608
- <a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">return</span> <span class="kc">None</span>
5609
- <a id="__codelineno-0-121" name="__codelineno-0-121"></a>
5610
- <a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">return</span> <span class="n">resolve_connected_endpoint</span>
5611
- <a id="__codelineno-0-123" name="__codelineno-0-123"></a>
5612
- <a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;resolver_type must be &#39;cable_peer&#39; or &#39;connected_endpoint&#39;, not &#39;</span><span class="si">{</span><span class="n">resolver_type</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
5515
+ <span class="normal"><a href="#__codelineno-0-123">123</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">construct_resolver</span><span class="p">(</span><span class="n">model_name</span><span class="p">,</span> <span class="n">resolver_type</span><span class="p">):</span>
5516
+ <a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Constructs a resolve_[cable_peer|connected_endpoint]_&lt;endpoint&gt; function for a given model type.</span>
5517
+ <a id="__codelineno-0-98" name="__codelineno-0-98"></a>
5518
+ <a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> Args:</span>
5519
+ <a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> model_name (str): Name of the model to construct a resolver function for (e.g. CircuitTermination).</span>
5520
+ <a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> resolver_type (str): One of [&#39;connected_endpoint&#39;, &#39;cable_peer&#39;]</span>
5521
+ <a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> &quot;&quot;&quot;</span>
5522
+ <a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="k">if</span> <span class="n">resolver_type</span> <span class="o">==</span> <span class="s2">&quot;cable_peer&quot;</span><span class="p">:</span>
5523
+ <a id="__codelineno-0-104" name="__codelineno-0-104"></a>
5524
+ <a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">def</span> <span class="nf">resolve_cable_peer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
5525
+ <a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="n">peer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cable_peer</span><span class="p">()</span>
5526
+ <a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="n">model_name</span><span class="p">:</span>
5527
+ <a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="n">peer</span>
5528
+ <a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="kc">None</span>
5529
+ <a id="__codelineno-0-110" name="__codelineno-0-110"></a>
5530
+ <a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">return</span> <span class="n">resolve_cable_peer</span>
5531
+ <a id="__codelineno-0-112" name="__codelineno-0-112"></a>
5532
+ <a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">if</span> <span class="n">resolver_type</span> <span class="o">==</span> <span class="s2">&quot;connected_endpoint&quot;</span><span class="p">:</span>
5533
+ <a id="__codelineno-0-114" name="__codelineno-0-114"></a>
5534
+ <a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">def</span> <span class="nf">resolve_connected_endpoint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
5535
+ <a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="n">peer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected_endpoint</span>
5536
+ <a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="n">model_name</span><span class="p">:</span>
5537
+ <a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">return</span> <span class="n">peer</span>
5538
+ <a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="k">return</span> <span class="kc">None</span>
5539
+ <a id="__codelineno-0-120" name="__codelineno-0-120"></a>
5540
+ <a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">return</span> <span class="n">resolve_connected_endpoint</span>
5541
+ <a id="__codelineno-0-122" name="__codelineno-0-122"></a>
5542
+ <a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;resolver_type must be &#39;cable_peer&#39; or &#39;connected_endpoint&#39;, not &#39;</span><span class="si">{</span><span class="n">resolver_type</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
5613
5543
  </code></pre></div></td></tr></table></div>
5614
5544
  </details>
5615
5545
  </div>
@@ -5729,7 +5659,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5729
5659
 
5730
5660
  <details class="quote">
5731
5661
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5732
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-11">11</a></span>
5662
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10">10</a></span>
5663
+ <span class="normal"><a href="#__codelineno-0-11">11</a></span>
5733
5664
  <span class="normal"><a href="#__codelineno-0-12">12</a></span>
5734
5665
  <span class="normal"><a href="#__codelineno-0-13">13</a></span>
5735
5666
  <span class="normal"><a href="#__codelineno-0-14">14</a></span>
@@ -5751,31 +5682,30 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5751
5682
  <span class="normal"><a href="#__codelineno-0-30">30</a></span>
5752
5683
  <span class="normal"><a href="#__codelineno-0-31">31</a></span>
5753
5684
  <span class="normal"><a href="#__codelineno-0-32">32</a></span>
5754
- <span class="normal"><a href="#__codelineno-0-33">33</a></span>
5755
- <span class="normal"><a href="#__codelineno-0-34">34</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="k">def</span> <span class="nf">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">variables</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
5756
- <a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute a query from the ORM.</span>
5757
- <a id="__codelineno-0-13" name="__codelineno-0-13"></a>
5758
- <a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> Args:</span>
5759
- <a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> query (str): String with GraphQL query.</span>
5760
- <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> variables (dict, optional): If the query has variables they need to be passed in as a dictionary.</span>
5761
- <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> request (django.test.client.RequestFactory, optional): Used to authenticate.</span>
5762
- <a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> user (django.contrib.auth.models.User, optional): Used to authenticate.</span>
5763
- <a id="__codelineno-0-19" name="__codelineno-0-19"></a>
5764
- <a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Returns:</span>
5765
- <a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5766
- <a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> &quot;&quot;&quot;</span>
5767
- <a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">user</span><span class="p">:</span>
5768
- <a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Either request or username should be provided&quot;</span><span class="p">)</span>
5769
- <a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="p">:</span>
5770
- <a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RequestFactory</span><span class="p">()</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/graphql/&quot;</span><span class="p">)</span>
5771
- <a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">request</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">user</span>
5772
- <a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">backend</span> <span class="o">=</span> <span class="n">get_default_backend</span><span class="p">()</span>
5773
- <a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">graphene_settings</span><span class="o">.</span><span class="n">SCHEMA</span>
5774
- <a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">document</span> <span class="o">=</span> <span class="n">backend</span><span class="o">.</span><span class="n">document_from_string</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
5775
- <a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">if</span> <span class="n">variables</span><span class="p">:</span>
5776
- <a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">return</span> <span class="n">document</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">context_value</span><span class="o">=</span><span class="n">request</span><span class="p">,</span> <span class="n">variable_values</span><span class="o">=</span><span class="n">variables</span><span class="p">)</span>
5777
- <a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">else</span><span class="p">:</span>
5778
- <a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">return</span> <span class="n">document</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">context_value</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
5685
+ <span class="normal"><a href="#__codelineno-0-33">33</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">variables</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
5686
+ <a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute a query from the ORM.</span>
5687
+ <a id="__codelineno-0-12" name="__codelineno-0-12"></a>
5688
+ <a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Args:</span>
5689
+ <a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> query (str): String with GraphQL query.</span>
5690
+ <a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> variables (dict, optional): If the query has variables they need to be passed in as a dictionary.</span>
5691
+ <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> request (django.test.client.RequestFactory, optional): Used to authenticate.</span>
5692
+ <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> user (django.contrib.auth.models.User, optional): Used to authenticate.</span>
5693
+ <a id="__codelineno-0-18" name="__codelineno-0-18"></a>
5694
+ <a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> Returns:</span>
5695
+ <a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5696
+ <a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
5697
+ <a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">user</span><span class="p">:</span>
5698
+ <a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Either request or username should be provided&quot;</span><span class="p">)</span>
5699
+ <a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="p">:</span>
5700
+ <a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RequestFactory</span><span class="p">()</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/graphql/&quot;</span><span class="p">)</span>
5701
+ <a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">request</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">user</span>
5702
+ <a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">backend</span> <span class="o">=</span> <span class="n">get_default_backend</span><span class="p">()</span>
5703
+ <a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">graphene_settings</span><span class="o">.</span><span class="n">SCHEMA</span>
5704
+ <a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">document</span> <span class="o">=</span> <span class="n">backend</span><span class="o">.</span><span class="n">document_from_string</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
5705
+ <a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">if</span> <span class="n">variables</span><span class="p">:</span>
5706
+ <a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">return</span> <span class="n">document</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">context_value</span><span class="o">=</span><span class="n">request</span><span class="p">,</span> <span class="n">variable_values</span><span class="o">=</span><span class="n">variables</span><span class="p">)</span>
5707
+ <a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
5708
+ <a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">return</span> <span class="n">document</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">context_value</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
5779
5709
  </code></pre></div></td></tr></table></div>
5780
5710
  </details>
5781
5711
  </div>
@@ -5901,7 +5831,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5901
5831
 
5902
5832
  <details class="quote">
5903
5833
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5904
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-37">37</a></span>
5834
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-36">36</a></span>
5835
+ <span class="normal"><a href="#__codelineno-0-37">37</a></span>
5905
5836
  <span class="normal"><a href="#__codelineno-0-38">38</a></span>
5906
5837
  <span class="normal"><a href="#__codelineno-0-39">39</a></span>
5907
5838
  <span class="normal"><a href="#__codelineno-0-40">40</a></span>
@@ -5915,23 +5846,22 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5915
5846
  <span class="normal"><a href="#__codelineno-0-48">48</a></span>
5916
5847
  <span class="normal"><a href="#__codelineno-0-49">49</a></span>
5917
5848
  <span class="normal"><a href="#__codelineno-0-50">50</a></span>
5918
- <span class="normal"><a href="#__codelineno-0-51">51</a></span>
5919
- <span class="normal"><a href="#__codelineno-0-52">52</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="k">def</span> <span class="nf">execute_saved_query</span><span class="p">(</span><span class="n">saved_query_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
5920
- <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute saved query from the ORM.</span>
5921
- <a id="__codelineno-0-39" name="__codelineno-0-39"></a>
5922
- <a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
5923
- <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> saved_query_name (str): Name of a saved GraphQL query.</span>
5924
- <a id="__codelineno-0-42" name="__codelineno-0-42"></a>
5925
- <a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Keyword Args:</span>
5926
- <a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> variables (Optional[dict]): If the query has variables they need to be passed in as a dictionary.</span>
5927
- <a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> request (Optional[django.test.client.RequestFactory]): Used to authenticate.</span>
5928
- <a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> user (Optional[django.contrib.auth.models.User]): Used to authenticate.</span>
5929
- <a id="__codelineno-0-47" name="__codelineno-0-47"></a>
5930
- <a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
5931
- <a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5932
- <a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
5933
- <a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">query</span> <span class="o">=</span> <span class="n">GraphQLQuery</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">saved_query_name</span><span class="p">)</span>
5934
- <a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="o">.</span><span class="n">query</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
5849
+ <span class="normal"><a href="#__codelineno-0-51">51</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="k">def</span> <span class="nf">execute_saved_query</span><span class="p">(</span><span class="n">saved_query_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
5850
+ <a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Execute saved query from the ORM.</span>
5851
+ <a id="__codelineno-0-38" name="__codelineno-0-38"></a>
5852
+ <a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Args:</span>
5853
+ <a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> saved_query_name (str): Name of a saved GraphQL query.</span>
5854
+ <a id="__codelineno-0-41" name="__codelineno-0-41"></a>
5855
+ <a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Keyword Args:</span>
5856
+ <a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> variables (Optional[dict]): If the query has variables they need to be passed in as a dictionary.</span>
5857
+ <a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> request (Optional[django.test.client.RequestFactory]): Used to authenticate.</span>
5858
+ <a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> user (Optional[django.contrib.auth.models.User]): Used to authenticate.</span>
5859
+ <a id="__codelineno-0-46" name="__codelineno-0-46"></a>
5860
+ <a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Returns:</span>
5861
+ <a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5862
+ <a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> &quot;&quot;&quot;</span>
5863
+ <a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">query</span> <span class="o">=</span> <span class="n">GraphQLQuery</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">saved_query_name</span><span class="p">)</span>
5864
+ <a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="o">.</span><span class="n">query</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
5935
5865
  </code></pre></div></td></tr></table></div>
5936
5866
  </details>
5937
5867
  </div>
@@ -6014,7 +5944,8 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
6014
5944
 
6015
5945
  <details class="quote">
6016
5946
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
6017
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-28">28</a></span>
5947
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-27">27</a></span>
5948
+ <span class="normal"><a href="#__codelineno-0-28">28</a></span>
6018
5949
  <span class="normal"><a href="#__codelineno-0-29">29</a></span>
6019
5950
  <span class="normal"><a href="#__codelineno-0-30">30</a></span>
6020
5951
  <span class="normal"><a href="#__codelineno-0-31">31</a></span>
@@ -6079,74 +6010,73 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
6079
6010
  <span class="normal"><a href="#__codelineno-0-90">90</a></span>
6080
6011
  <span class="normal"><a href="#__codelineno-0-91">91</a></span>
6081
6012
  <span class="normal"><a href="#__codelineno-0-92">92</a></span>
6082
- <span class="normal"><a href="#__codelineno-0-93">93</a></span>
6083
- <span class="normal"><a href="#__codelineno-0-94">94</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="k">def</span> <span class="nf">get_filtering_args_from_filterset</span><span class="p">(</span><span class="n">filterset_class</span><span class="p">):</span>
6084
- <a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a list of filter arguments from a filterset.</span>
6085
- <a id="__codelineno-0-30" name="__codelineno-0-30"></a>
6086
- <a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> The FilterSet class will be instantiated before extracting the list of arguments to</span>
6087
- <a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> account for dynamic filters, inserted when the class is instantiated. (required for Custom Fields filters).</span>
6088
- <a id="__codelineno-0-33" name="__codelineno-0-33"></a>
6089
- <a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Filter fields that are inheriting from BooleanFilter and NumberFilter will be converted</span>
6090
- <a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> to their appropriate type, everything else will be of type String.</span>
6091
- <a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> if the filter field is a subclass of MultipleChoiceFilter, the argument will be converted as a list</span>
6092
- <a id="__codelineno-0-37" name="__codelineno-0-37"></a>
6093
- <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Args:</span>
6094
- <a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> filterset_class (FilterSet): FilterSet class used to extract the argument</span>
6095
- <a id="__codelineno-0-40" name="__codelineno-0-40"></a>
6096
- <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
6097
- <a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> (dict[graphene.Argument]): Filter Arguments organized in a dictionary</span>
6098
- <a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> &quot;&quot;&quot;</span>
6099
- <a id="__codelineno-0-44" name="__codelineno-0-44"></a>
6100
- <a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">args</span> <span class="o">=</span> <span class="p">{}</span>
6101
- <a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">filterset_class</span><span class="p">()</span>
6102
- <a id="__codelineno-0-47" name="__codelineno-0-47"></a>
6103
- <a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">for</span> <span class="n">filter_name</span><span class="p">,</span> <span class="n">filter_field</span> <span class="ow">in</span> <span class="n">instance</span><span class="o">.</span><span class="n">filters</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
6104
- <a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="c1"># For general safety, but especially for the case of custom fields</span>
6105
- <a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="c1"># (https://github.com/nautobot/nautobot/issues/464)</span>
6106
- <a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="c1"># We don&#39;t have a way to map a GraphQL-sanitized filter name (such as &quot;cf_my_custom_field&quot;) back to the</span>
6107
- <a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="c1"># actual filter name (such as &quot;cf_my-custom-field&quot;), so if the sanitized filter name doesn&#39;t match the original</span>
6108
- <a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="c1"># filter name, we just have to omit it for now. Better that than advertise a filter that doesn&#39;t actually work!</span>
6109
- <a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">str_to_var_name</span><span class="p">(</span><span class="n">filter_name</span><span class="p">)</span> <span class="o">!=</span> <span class="n">filter_name</span><span class="p">:</span>
6110
- <a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
6111
- <a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s1">&#39;Filter &quot;</span><span class="si">%s</span><span class="s1">&quot; on </span><span class="si">%s</span><span class="s1"> is not GraphQL safe, and will be omitted&#39;</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">,</span> <span class="n">filterset_class</span><span class="o">.</span><span class="vm">__name__</span>
6112
- <a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
6113
- <a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">continue</span>
6114
- <a id="__codelineno-0-59" name="__codelineno-0-59"></a>
6115
- <a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">String</span>
6116
- <a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">filter_field_class</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">filter_field</span><span class="p">)</span>
6117
- <a id="__codelineno-0-62" name="__codelineno-0-62"></a>
6118
- <a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultiValueBigNumberFilter</span><span class="p">):</span>
6119
- <a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">BigInteger</span><span class="p">)</span>
6120
- <a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="p">(</span><span class="n">MultiValueFloatFilter</span><span class="p">,</span> <span class="n">MultiValueDecimalFilter</span><span class="p">)):</span>
6121
- <a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">graphene</span><span class="o">.</span><span class="n">Float</span><span class="p">)</span>
6122
- <a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultiValueNumberFilter</span><span class="p">):</span>
6123
- <a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">graphene</span><span class="o">.</span><span class="n">Int</span><span class="p">)</span>
6124
- <a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">else</span><span class="p">:</span>
6125
- <a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">BooleanFilter</span><span class="p">):</span>
6126
- <a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Boolean</span>
6127
- <a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">NumberFilter</span><span class="p">):</span>
6128
- <a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Int</span>
6129
- <a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">else</span><span class="p">:</span>
6130
- <a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">String</span>
6131
- <a id="__codelineno-0-76" name="__codelineno-0-76"></a>
6132
- <a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultipleChoiceFilter</span><span class="p">):</span>
6133
- <a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">field_type</span><span class="p">)</span>
6134
- <a id="__codelineno-0-79" name="__codelineno-0-79"></a>
6135
- <a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">args</span><span class="p">[</span><span class="n">filter_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Argument</span><span class="p">(</span>
6136
- <a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">field_type</span><span class="p">,</span>
6137
- <a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">description</span><span class="o">=</span><span class="n">filter_field</span><span class="o">.</span><span class="n">label</span><span class="p">,</span>
6138
- <a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
6139
- <a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
6140
- <a id="__codelineno-0-85" name="__codelineno-0-85"></a>
6141
- <a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="c1"># Hack to swap `type` fields to `_type` since they will conflict with</span>
6142
- <a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="c1"># `graphene.types.fields.Field.type` in Graphene 2.x.</span>
6143
- <a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="c1"># 2.0 TODO(jathan): Once we upgrade to Graphene 3.x we can remove this, but we</span>
6144
- <a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="c1"># will still need to do an API migration to deprecate it. This argument was</span>
6145
- <a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="c1"># validated to be safe to keep even in Graphene 3.</span>
6146
- <a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">if</span> <span class="s2">&quot;type&quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
6147
- <a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;_type&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;type&quot;</span><span class="p">)</span>
6148
- <a id="__codelineno-0-93" name="__codelineno-0-93"></a>
6149
- <a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="n">args</span>
6013
+ <span class="normal"><a href="#__codelineno-0-93">93</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="k">def</span> <span class="nf">get_filtering_args_from_filterset</span><span class="p">(</span><span class="n">filterset_class</span><span class="p">):</span>
6014
+ <a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Generate a list of filter arguments from a filterset.</span>
6015
+ <a id="__codelineno-0-29" name="__codelineno-0-29"></a>
6016
+ <a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> The FilterSet class will be instantiated before extracting the list of arguments to</span>
6017
+ <a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> account for dynamic filters, inserted when the class is instantiated. (required for Custom Fields filters).</span>
6018
+ <a id="__codelineno-0-32" name="__codelineno-0-32"></a>
6019
+ <a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Filter fields that are inheriting from BooleanFilter and NumberFilter will be converted</span>
6020
+ <a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> to their appropriate type, everything else will be of type String.</span>
6021
+ <a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> if the filter field is a subclass of MultipleChoiceFilter, the argument will be converted as a list</span>
6022
+ <a id="__codelineno-0-36" name="__codelineno-0-36"></a>
6023
+ <a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Args:</span>
6024
+ <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> filterset_class (FilterSet): FilterSet class used to extract the argument</span>
6025
+ <a id="__codelineno-0-39" name="__codelineno-0-39"></a>
6026
+ <a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Returns:</span>
6027
+ <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> (dict[graphene.Argument]): Filter Arguments organized in a dictionary</span>
6028
+ <a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> &quot;&quot;&quot;</span>
6029
+ <a id="__codelineno-0-43" name="__codelineno-0-43"></a>
6030
+ <a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">args</span> <span class="o">=</span> <span class="p">{}</span>
6031
+ <a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">filterset_class</span><span class="p">()</span>
6032
+ <a id="__codelineno-0-46" name="__codelineno-0-46"></a>
6033
+ <a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">for</span> <span class="n">filter_name</span><span class="p">,</span> <span class="n">filter_field</span> <span class="ow">in</span> <span class="n">instance</span><span class="o">.</span><span class="n">filters</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
6034
+ <a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="c1"># For general safety, but especially for the case of custom fields</span>
6035
+ <a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="c1"># (https://github.com/nautobot/nautobot/issues/464)</span>
6036
+ <a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="c1"># We don&#39;t have a way to map a GraphQL-sanitized filter name (such as &quot;cf_my_custom_field&quot;) back to the</span>
6037
+ <a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="c1"># actual filter name (such as &quot;cf_my-custom-field&quot;), so if the sanitized filter name doesn&#39;t match the original</span>
6038
+ <a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="c1"># filter name, we just have to omit it for now. Better that than advertise a filter that doesn&#39;t actually work!</span>
6039
+ <a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">if</span> <span class="n">str_to_var_name</span><span class="p">(</span><span class="n">filter_name</span><span class="p">)</span> <span class="o">!=</span> <span class="n">filter_name</span><span class="p">:</span>
6040
+ <a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
6041
+ <a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s1">&#39;Filter &quot;</span><span class="si">%s</span><span class="s1">&quot; on </span><span class="si">%s</span><span class="s1"> is not GraphQL safe, and will be omitted&#39;</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">,</span> <span class="n">filterset_class</span><span class="o">.</span><span class="vm">__name__</span>
6042
+ <a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="p">)</span>
6043
+ <a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">continue</span>
6044
+ <a id="__codelineno-0-58" name="__codelineno-0-58"></a>
6045
+ <a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">String</span>
6046
+ <a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">filter_field_class</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">filter_field</span><span class="p">)</span>
6047
+ <a id="__codelineno-0-61" name="__codelineno-0-61"></a>
6048
+ <a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultiValueBigNumberFilter</span><span class="p">):</span>
6049
+ <a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">BigInteger</span><span class="p">)</span>
6050
+ <a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="p">(</span><span class="n">MultiValueFloatFilter</span><span class="p">,</span> <span class="n">MultiValueDecimalFilter</span><span class="p">)):</span>
6051
+ <a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">graphene</span><span class="o">.</span><span class="n">Float</span><span class="p">)</span>
6052
+ <a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultiValueNumberFilter</span><span class="p">):</span>
6053
+ <a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">graphene</span><span class="o">.</span><span class="n">Int</span><span class="p">)</span>
6054
+ <a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">else</span><span class="p">:</span>
6055
+ <a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">BooleanFilter</span><span class="p">):</span>
6056
+ <a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Boolean</span>
6057
+ <a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">elif</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">NumberFilter</span><span class="p">):</span>
6058
+ <a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Int</span>
6059
+ <a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">else</span><span class="p">:</span>
6060
+ <a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">String</span>
6061
+ <a id="__codelineno-0-75" name="__codelineno-0-75"></a>
6062
+ <a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">filter_field_class</span><span class="p">,</span> <span class="n">MultipleChoiceFilter</span><span class="p">):</span>
6063
+ <a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">field_type</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">List</span><span class="p">(</span><span class="n">field_type</span><span class="p">)</span>
6064
+ <a id="__codelineno-0-78" name="__codelineno-0-78"></a>
6065
+ <a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">args</span><span class="p">[</span><span class="n">filter_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">graphene</span><span class="o">.</span><span class="n">Argument</span><span class="p">(</span>
6066
+ <a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">field_type</span><span class="p">,</span>
6067
+ <a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">description</span><span class="o">=</span><span class="n">filter_field</span><span class="o">.</span><span class="n">label</span><span class="p">,</span>
6068
+ <a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
6069
+ <a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="p">)</span>
6070
+ <a id="__codelineno-0-84" name="__codelineno-0-84"></a>
6071
+ <a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="c1"># Hack to swap `type` fields to `_type` since they will conflict with</span>
6072
+ <a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="c1"># `graphene.types.fields.Field.type` in Graphene 2.x.</span>
6073
+ <a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="c1"># 2.0 TODO(jathan): Once we upgrade to Graphene 3.x we can remove this, but we</span>
6074
+ <a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="c1"># will still need to do an API migration to deprecate it. This argument was</span>
6075
+ <a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="c1"># validated to be safe to keep even in Graphene 3.</span>
6076
+ <a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="s2">&quot;type&quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
6077
+ <a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;_type&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;type&quot;</span><span class="p">)</span>
6078
+ <a id="__codelineno-0-92" name="__codelineno-0-92"></a>
6079
+ <a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="n">args</span>
6150
6080
  </code></pre></div></td></tr></table></div>
6151
6081
  </details>
6152
6082
  </div>
@@ -6175,19 +6105,19 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
6175
6105
 
6176
6106
  <details class="quote">
6177
6107
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
6178
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-19">19</a></span>
6108
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-18">18</a></span>
6109
+ <span class="normal"><a href="#__codelineno-0-19">19</a></span>
6179
6110
  <span class="normal"><a href="#__codelineno-0-20">20</a></span>
6180
6111
  <span class="normal"><a href="#__codelineno-0-21">21</a></span>
6181
6112
  <span class="normal"><a href="#__codelineno-0-22">22</a></span>
6182
6113
  <span class="normal"><a href="#__codelineno-0-23">23</a></span>
6183
- <span class="normal"><a href="#__codelineno-0-24">24</a></span>
6184
- <span class="normal"><a href="#__codelineno-0-25">25</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="k">def</span> <span class="nf">str_to_var_name</span><span class="p">(</span><span class="n">verbose_name</span><span class="p">):</span>
6185
- <a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a string to a variable compatible name.</span>
6186
- <a id="__codelineno-0-21" name="__codelineno-0-21"></a>
6187
- <a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Examples:</span>
6188
- <a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> IP Addresses &gt; ip_addresses</span>
6189
- <a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
6190
- <a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">return</span> <span class="n">slugify_dashes_to_underscores</span><span class="p">(</span><span class="n">verbose_name</span><span class="p">)</span>
6114
+ <span class="normal"><a href="#__codelineno-0-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="k">def</span> <span class="nf">str_to_var_name</span><span class="p">(</span><span class="n">verbose_name</span><span class="p">):</span>
6115
+ <a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a string to a variable compatible name.</span>
6116
+ <a id="__codelineno-0-20" name="__codelineno-0-20"></a>
6117
+ <a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Examples:</span>
6118
+ <a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> IP Addresses &gt; ip_addresses</span>
6119
+ <a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
6120
+ <a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">slugify_dashes_to_underscores</span><span class="p">(</span><span class="n">verbose_name</span><span class="p">)</span>
6191
6121
  </code></pre></div></td></tr></table></div>
6192
6122
  </details>
6193
6123
  </div>