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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. nautobot/__init__.py +1 -3
  2. nautobot/apps/__init__.py +1 -2
  3. nautobot/apps/admin.py +0 -1
  4. nautobot/apps/api.py +0 -1
  5. nautobot/apps/change_logging.py +0 -1
  6. nautobot/apps/choices.py +0 -1
  7. nautobot/apps/datasources.py +0 -1
  8. nautobot/apps/exceptions.py +0 -1
  9. nautobot/apps/factory.py +0 -1
  10. nautobot/apps/filters.py +6 -9
  11. nautobot/apps/forms.py +1 -2
  12. nautobot/apps/graphql.py +0 -1
  13. nautobot/apps/jobs.py +0 -1
  14. nautobot/apps/models.py +1 -2
  15. nautobot/apps/querysets.py +0 -1
  16. nautobot/apps/secrets.py +0 -1
  17. nautobot/apps/tables.py +0 -1
  18. nautobot/apps/testing.py +0 -1
  19. nautobot/apps/ui.py +1 -3
  20. nautobot/apps/urls.py +0 -1
  21. nautobot/apps/utils.py +0 -1
  22. nautobot/apps/views.py +0 -1
  23. nautobot/circuits/api/serializers.py +1 -1
  24. nautobot/circuits/api/urls.py +1 -1
  25. nautobot/circuits/api/views.py +2 -1
  26. nautobot/circuits/apps.py +1 -1
  27. nautobot/circuits/choices.py +0 -1
  28. nautobot/circuits/factory.py +1 -1
  29. nautobot/circuits/filters.py +2 -1
  30. nautobot/circuits/forms.py +2 -2
  31. nautobot/circuits/homepage.py +0 -1
  32. nautobot/circuits/migrations/0001_initial_part_1.py +3 -1
  33. nautobot/circuits/migrations/0002_initial_part_2.py +2 -1
  34. nautobot/circuits/migrations/0003_auto_slug.py +1 -0
  35. nautobot/circuits/migrations/0005_providernetwork.py +4 -2
  36. nautobot/circuits/migrations/0013_alter_circuittermination__path.py +1 -0
  37. nautobot/circuits/migrations/0014_related_name_changes.py +1 -0
  38. nautobot/circuits/migrations/0016_tagsfield.py +1 -0
  39. nautobot/circuits/migrations/0018_status_nonnullable.py +1 -0
  40. nautobot/circuits/models.py +2 -2
  41. nautobot/circuits/navigation.py +0 -1
  42. nautobot/circuits/signals.py +3 -2
  43. nautobot/circuits/tables.py +1 -0
  44. nautobot/circuits/tests/integration/test_relationships.py +1 -1
  45. nautobot/circuits/tests/test_api.py +1 -1
  46. nautobot/circuits/tests/test_urls.py +1 -1
  47. nautobot/circuits/tests/test_views.py +1 -0
  48. nautobot/circuits/urls.py +1 -1
  49. nautobot/circuits/views.py +0 -2
  50. nautobot/core/__init__.py +0 -1
  51. nautobot/core/admin.py +3 -5
  52. nautobot/core/api/__init__.py +0 -1
  53. nautobot/core/api/metadata.py +4 -6
  54. nautobot/core/api/pagination.py +2 -2
  55. nautobot/core/api/parsers.py +1 -3
  56. nautobot/core/api/renderers.py +0 -1
  57. nautobot/core/api/schema.py +2 -3
  58. nautobot/core/api/serializers.py +9 -7
  59. nautobot/core/api/urls.py +1 -5
  60. nautobot/core/api/utils.py +4 -6
  61. nautobot/core/api/versioning.py +1 -1
  62. nautobot/core/api/views.py +22 -91
  63. nautobot/core/apps/__init__.py +5 -7
  64. nautobot/core/authentication.py +1 -1
  65. nautobot/core/celery/__init__.py +1 -2
  66. nautobot/core/celery/control.py +0 -2
  67. nautobot/core/celery/encoders.py +0 -1
  68. nautobot/core/celery/schedulers.py +1 -2
  69. nautobot/core/celery/task.py +1 -1
  70. nautobot/core/checks.py +1 -2
  71. nautobot/core/choices.py +2 -2
  72. nautobot/core/cli/__init__.py +2 -3
  73. nautobot/core/context_processors.py +1 -5
  74. nautobot/core/factory.py +2 -2
  75. nautobot/core/filters.py +1 -1
  76. nautobot/core/forms/fields.py +2 -4
  77. nautobot/core/forms/forms.py +1 -1
  78. nautobot/core/forms/search.py +1 -1
  79. nautobot/core/forms/utils.py +1 -1
  80. nautobot/core/graphql/__init__.py +2 -3
  81. nautobot/core/graphql/generators.py +1 -1
  82. nautobot/core/graphql/schema.py +6 -7
  83. nautobot/core/graphql/schema_init.py +0 -1
  84. nautobot/core/graphql/utils.py +1 -2
  85. nautobot/core/management/commands/generate_test_data.py +4 -6
  86. nautobot/core/management/commands/makemigrations.py +1 -1
  87. nautobot/core/management/commands/migrate.py +1 -1
  88. nautobot/core/management/commands/post_upgrade.py +0 -15
  89. nautobot/core/management/commands/refresh_content_type_cache.py +1 -2
  90. nautobot/core/management/commands/send_installation_metrics.py +2 -3
  91. nautobot/core/management/commands/validate_models.py +1 -1
  92. nautobot/core/middleware.py +2 -2
  93. nautobot/core/models/__init__.py +12 -12
  94. nautobot/core/models/fields.py +1 -1
  95. nautobot/core/models/generics.py +2 -3
  96. nautobot/core/models/managers.py +0 -1
  97. nautobot/core/models/name_color_content_types.py +2 -2
  98. nautobot/core/models/tree_queries.py +2 -4
  99. nautobot/core/models/validators.py +1 -1
  100. nautobot/core/releases.py +1 -1
  101. nautobot/core/runner/importer.py +2 -25
  102. nautobot/core/runner/runner.py +2 -2
  103. nautobot/core/runner/settings.py +1 -1
  104. nautobot/core/settings.py +9 -22
  105. nautobot/core/settings_funcs.py +1 -2
  106. nautobot/core/signals.py +0 -1
  107. nautobot/core/tables.py +1 -1
  108. nautobot/core/templates/graphene/graphiql.html +7 -1
  109. nautobot/core/templates/inc/footer.html +0 -7
  110. nautobot/core/templates/nautobot_config.py.j2 +0 -4
  111. nautobot/core/templatetags/bootstrapped_goodies_tags.py +6 -3
  112. nautobot/core/templatetags/buttons.py +1 -1
  113. nautobot/core/templatetags/helpers.py +5 -16
  114. nautobot/core/testing/__init__.py +1 -2
  115. nautobot/core/testing/api.py +2 -4
  116. nautobot/core/testing/filters.py +1 -1
  117. nautobot/core/testing/integration.py +2 -2
  118. nautobot/core/testing/migrations.py +1 -0
  119. nautobot/core/testing/mixins.py +1 -2
  120. nautobot/core/testing/schema.py +1 -1
  121. nautobot/core/testing/utils.py +3 -3
  122. nautobot/core/testing/views.py +4 -7
  123. nautobot/core/tests/integration/test_plugin_home.py +2 -1
  124. nautobot/core/tests/integration/test_plugin_navbar.py +1 -1
  125. nautobot/core/tests/nautobot_config.py +3 -3
  126. nautobot/core/tests/runner.py +3 -4
  127. nautobot/core/tests/test_api.py +6 -51
  128. nautobot/core/tests/test_authentication.py +2 -3
  129. nautobot/core/tests/test_checks.py +1 -2
  130. nautobot/core/tests/test_config.py +1 -1
  131. nautobot/core/tests/test_csv.py +3 -3
  132. nautobot/core/tests/test_factory.py +1 -3
  133. nautobot/core/tests/test_filters.py +3 -7
  134. nautobot/core/tests/test_forms.py +3 -6
  135. nautobot/core/tests/test_graphql.py +13 -14
  136. nautobot/core/tests/test_jinja_filters.py +4 -4
  137. nautobot/core/tests/test_jobs.py +1 -1
  138. nautobot/core/tests/test_models.py +1 -2
  139. nautobot/core/tests/test_navigations.py +2 -1
  140. nautobot/core/tests/test_openapi.py +0 -1
  141. nautobot/core/tests/test_paginator.py +2 -2
  142. nautobot/core/tests/test_releases.py +2 -2
  143. nautobot/core/tests/test_tables.py +1 -1
  144. nautobot/core/tests/test_templatetags_helpers.py +3 -2
  145. nautobot/core/tests/test_templatetags_netutils.py +1 -2
  146. nautobot/core/tests/test_utils.py +4 -8
  147. nautobot/core/tests/test_views.py +5 -2
  148. nautobot/core/tests/test_views_utils.py +0 -1
  149. nautobot/core/urls.py +4 -4
  150. nautobot/core/utils/color.py +1 -1
  151. nautobot/core/utils/data.py +1 -2
  152. nautobot/core/utils/filtering.py +4 -5
  153. nautobot/core/utils/git.py +3 -2
  154. nautobot/core/utils/logging.py +2 -1
  155. nautobot/core/utils/migrations.py +1 -0
  156. nautobot/core/utils/permissions.py +2 -4
  157. nautobot/core/views/__init__.py +5 -5
  158. nautobot/core/views/generic.py +4 -4
  159. nautobot/core/views/mixins.py +11 -12
  160. nautobot/core/views/renderers.py +1 -1
  161. nautobot/core/views/utils.py +2 -1
  162. nautobot/dcim/api/urls.py +1 -1
  163. nautobot/dcim/api/views.py +6 -5
  164. nautobot/dcim/apps.py +1 -1
  165. nautobot/dcim/choices.py +0 -1
  166. nautobot/dcim/constants.py +0 -1
  167. nautobot/dcim/elevations.py +1 -2
  168. nautobot/dcim/factory.py +10 -13
  169. nautobot/dcim/fields.py +1 -0
  170. nautobot/dcim/filters/__init__.py +2 -3
  171. nautobot/dcim/filters/mixins.py +1 -1
  172. nautobot/dcim/forms.py +10 -12
  173. nautobot/dcim/graphql/types.py +16 -17
  174. nautobot/dcim/migrations/0001_initial_part_1.py +4 -2
  175. nautobot/dcim/migrations/0002_initial_part_2.py +2 -1
  176. nautobot/dcim/migrations/0003_initial_part_3.py +2 -1
  177. nautobot/dcim/migrations/0004_initial_part_4.py +2 -1
  178. nautobot/dcim/migrations/0006_auto_slug.py +1 -0
  179. nautobot/dcim/migrations/0009_add_natural_indexing.py +1 -0
  180. nautobot/dcim/migrations/0010_interface_status.py +1 -0
  181. nautobot/dcim/migrations/0011_interface_status_data_migration.py +1 -0
  182. nautobot/dcim/migrations/0013_location_location_type.py +4 -2
  183. nautobot/dcim/migrations/0014_location_status_data_migration.py +1 -0
  184. nautobot/dcim/migrations/0016_device_components__timestamp_data_migration.py +0 -1
  185. nautobot/dcim/migrations/0018_device_redundancy_group.py +4 -2
  186. nautobot/dcim/migrations/0019_device_redundancy_group_data_migration.py +1 -0
  187. nautobot/dcim/migrations/0022_interface_redundancy_group.py +3 -1
  188. nautobot/dcim/migrations/0023_interface_redundancy_group_data_migration.py +1 -0
  189. nautobot/dcim/migrations/0024_move_site_fields_to_location_model.py +2 -1
  190. nautobot/dcim/migrations/0027_alter_interface_mac_address.py +1 -0
  191. nautobot/dcim/migrations/0028_alter_device_and_rack_role_add_new_role.py +1 -0
  192. nautobot/dcim/migrations/0029_device_and_rack_roles_data_migrations.py +1 -0
  193. nautobot/dcim/migrations/0033_add_tree_managers_and_foreign_keys_pre_data_migration.py +1 -0
  194. nautobot/dcim/migrations/0034_migrate_region_and_site_data_to_locations.py +1 -2
  195. nautobot/dcim/migrations/0038_fixup_fks_and_related_names.py +1 -0
  196. nautobot/dcim/migrations/0039_related_name_changes.py +1 -0
  197. nautobot/dcim/migrations/0042_alter_location_managers.py +1 -0
  198. nautobot/dcim/migrations/0044_tagsfield.py +1 -0
  199. nautobot/dcim/migrations/0047_status_nonnullable.py +1 -0
  200. nautobot/dcim/migrations/0051_interface_redundancy_group_nullable_status.py +1 -0
  201. nautobot/dcim/models/cables.py +3 -3
  202. nautobot/dcim/models/device_component_templates.py +6 -6
  203. nautobot/dcim/models/devices.py +9 -4
  204. nautobot/dcim/models/locations.py +6 -1
  205. nautobot/dcim/models/power.py +1 -1
  206. nautobot/dcim/models/racks.py +5 -4
  207. nautobot/dcim/navigation.py +0 -1
  208. nautobot/dcim/signals.py +3 -2
  209. nautobot/dcim/tables/__init__.py +5 -4
  210. nautobot/dcim/tables/cables.py +1 -0
  211. nautobot/dcim/tables/devices.py +1 -0
  212. nautobot/dcim/tables/power.py +1 -0
  213. nautobot/dcim/tables/racks.py +2 -1
  214. nautobot/dcim/tests/test_api.py +5 -7
  215. nautobot/dcim/tests/test_cablepaths.py +0 -1
  216. nautobot/dcim/tests/test_filters.py +14 -12
  217. nautobot/dcim/tests/test_forms.py +2 -3
  218. nautobot/dcim/tests/test_migrations.py +2 -2
  219. nautobot/dcim/tests/test_models.py +2 -2
  220. nautobot/dcim/tests/test_views.py +7 -8
  221. nautobot/dcim/urls.py +3 -2
  222. nautobot/dcim/utils.py +1 -1
  223. nautobot/dcim/views.py +4 -3
  224. nautobot/extras/admin.py +2 -1
  225. nautobot/extras/api/customfields.py +0 -2
  226. nautobot/extras/api/mixins.py +0 -1
  227. nautobot/extras/api/serializers.py +4 -4
  228. nautobot/extras/api/urls.py +1 -1
  229. nautobot/extras/api/views.py +1 -1
  230. nautobot/extras/apps.py +3 -4
  231. nautobot/extras/choices.py +3 -4
  232. nautobot/extras/context_managers.py +1 -1
  233. nautobot/extras/datasources/__init__.py +1 -1
  234. nautobot/extras/datasources/git.py +6 -6
  235. nautobot/extras/datasources/utils.py +0 -1
  236. nautobot/extras/factory.py +1 -1
  237. nautobot/extras/filters/__init__.py +2 -3
  238. nautobot/extras/filters/customfields.py +0 -1
  239. nautobot/extras/filters/mixins.py +1 -1
  240. nautobot/extras/forms/__init__.py +3 -4
  241. nautobot/extras/forms/base.py +1 -1
  242. nautobot/extras/forms/forms.py +3 -3
  243. nautobot/extras/forms/mixins.py +1 -1
  244. nautobot/extras/graphql/types.py +2 -2
  245. nautobot/extras/health_checks.py +1 -1
  246. nautobot/extras/jobs.py +1 -2
  247. nautobot/extras/management/__init__.py +0 -1
  248. nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -1
  249. nautobot/extras/management/commands/runjob.py +3 -3
  250. nautobot/extras/management/commands/webhook_receiver.py +1 -2
  251. nautobot/extras/migrations/0001_initial_part_1.py +2 -1
  252. nautobot/extras/migrations/0002_initial_part_2.py +2 -1
  253. nautobot/extras/migrations/0003_initial_part_3.py +1 -0
  254. nautobot/extras/migrations/0006_graphqlquery.py +2 -1
  255. nautobot/extras/migrations/0007_configcontextschema.py +3 -1
  256. nautobot/extras/migrations/0009_computedfield.py +3 -1
  257. nautobot/extras/migrations/0011_fileattachment_fileproxy.py +3 -1
  258. nautobot/extras/migrations/0012_healthchecktestmodel.py +2 -1
  259. nautobot/extras/migrations/0014_auto_slug.py +1 -0
  260. nautobot/extras/migrations/0015_scheduled_job.py +3 -1
  261. nautobot/extras/migrations/0016_secret.py +4 -2
  262. nautobot/extras/migrations/0017_joblogentry.py +2 -1
  263. nautobot/extras/migrations/0018_joblog_data_migration.py +2 -1
  264. nautobot/extras/migrations/0021_customfield_changelog_data.py +3 -2
  265. nautobot/extras/migrations/0022_objectchange_object_datav2.py +1 -0
  266. nautobot/extras/migrations/0023_job_model.py +4 -2
  267. nautobot/extras/migrations/0026_job_add_gitrepository_fk.py +1 -0
  268. nautobot/extras/migrations/0029_dynamicgroup.py +3 -1
  269. nautobot/extras/migrations/0031_tag_content_types.py +1 -0
  270. nautobot/extras/migrations/0032_tag_content_types_data_migration.py +1 -0
  271. nautobot/extras/migrations/0040_dynamicgroup__dynamicgroupmembership.py +2 -1
  272. nautobot/extras/migrations/0041_jobresult_job_kwargs.py +1 -0
  273. nautobot/extras/migrations/0043_note.py +3 -1
  274. nautobot/extras/migrations/0044_add_job_hook.py +3 -1
  275. nautobot/extras/migrations/0046_populate_custom_field_slug_label.py +1 -0
  276. nautobot/extras/migrations/0047_enforce_custom_field_slug.py +1 -0
  277. nautobot/extras/migrations/0051_add_job_task_queues.py +1 -0
  278. nautobot/extras/migrations/0055_configcontext_dynamic_groups.py +1 -0
  279. nautobot/extras/migrations/0057_jobbutton.py +3 -1
  280. nautobot/extras/migrations/0065_configcontext_data_migrations.py +1 -0
  281. nautobot/extras/migrations/0067_migrate_job_result_status.py +0 -1
  282. nautobot/extras/migrations/0068_jobresult__add_celery_fields.py +1 -0
  283. nautobot/extras/migrations/0071_replace_related_names.py +1 -0
  284. nautobot/extras/migrations/0077_migrate_custom_field_data.py +1 -0
  285. nautobot/extras/migrations/0078_remove_name_field_and_make_label_field_non_nullable.py +1 -0
  286. nautobot/extras/migrations/0080_tagsfield.py +1 -0
  287. nautobot/extras/migrations/0082_rename_relationship_name_to_label.py +1 -0
  288. nautobot/extras/migrations/0083_ensure_relationship_keys_are_unique.py +1 -0
  289. nautobot/extras/migrations/0090_joblogentry__log_level_data_migration.py +0 -1
  290. nautobot/extras/migrations/0095_ensure_note_timestamps_are_unique.py +4 -5
  291. nautobot/extras/migrations/0097_alter_job_result_remove_result.py +1 -0
  292. nautobot/extras/migrations/0100_fileproxy_job_result.py +1 -0
  293. nautobot/extras/migrations/0101_externalintegration.py +3 -1
  294. nautobot/extras/models/__init__.py +2 -3
  295. nautobot/extras/models/change_logging.py +0 -1
  296. nautobot/extras/models/customfields.py +4 -4
  297. nautobot/extras/models/datasources.py +2 -2
  298. nautobot/extras/models/groups.py +3 -4
  299. nautobot/extras/models/jobs.py +12 -6
  300. nautobot/extras/models/models.py +2 -2
  301. nautobot/extras/models/relationships.py +3 -4
  302. nautobot/extras/models/roles.py +1 -1
  303. nautobot/extras/models/secrets.py +1 -3
  304. nautobot/extras/models/tags.py +0 -1
  305. nautobot/extras/navigation.py +0 -1
  306. nautobot/extras/plugins/__init__.py +6 -7
  307. nautobot/extras/plugins/tables.py +0 -1
  308. nautobot/extras/plugins/utils.py +1 -1
  309. nautobot/extras/plugins/views.py +1 -2
  310. nautobot/extras/querysets.py +3 -3
  311. nautobot/extras/signals.py +6 -7
  312. nautobot/extras/tables.py +4 -4
  313. nautobot/extras/tasks.py +1 -2
  314. nautobot/extras/templates/extras/configcontext_edit.html +1 -1
  315. nautobot/extras/templates/extras/graphqlquery.html +4 -2
  316. nautobot/extras/templates/extras/secretsgroup_edit.html +40 -45
  317. nautobot/extras/templatetags/custom_links.py +2 -3
  318. nautobot/extras/templatetags/job_buttons.py +2 -3
  319. nautobot/extras/templatetags/log_levels.py +0 -1
  320. nautobot/extras/templatetags/plugins.py +1 -1
  321. nautobot/extras/test_jobs/api_test_job.py +1 -2
  322. nautobot/extras/test_jobs/atomic_transaction.py +1 -2
  323. nautobot/extras/test_jobs/dry_run.py +1 -2
  324. nautobot/extras/test_jobs/fail.py +1 -2
  325. nautobot/extras/test_jobs/field_order.py +1 -1
  326. nautobot/extras/test_jobs/file_upload_fail.py +1 -2
  327. nautobot/extras/test_jobs/file_upload_pass.py +1 -2
  328. nautobot/extras/test_jobs/has_sensitive_variables.py +1 -2
  329. nautobot/extras/test_jobs/ipaddress_vars.py +1 -4
  330. nautobot/extras/test_jobs/job_button_receiver.py +1 -2
  331. nautobot/extras/test_jobs/job_hook_receiver.py +1 -2
  332. nautobot/extras/test_jobs/job_variables.py +1 -2
  333. nautobot/extras/test_jobs/location_with_custom_field.py +1 -2
  334. nautobot/extras/test_jobs/log_redaction.py +1 -2
  335. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -2
  336. nautobot/extras/test_jobs/modify_db.py +1 -2
  337. nautobot/extras/test_jobs/object_var_optional.py +1 -2
  338. nautobot/extras/test_jobs/object_var_required.py +1 -2
  339. nautobot/extras/test_jobs/object_vars.py +1 -2
  340. nautobot/extras/test_jobs/pass.py +1 -2
  341. nautobot/extras/test_jobs/profiling.py +1 -2
  342. nautobot/extras/tests/integration/__init__.py +1 -1
  343. nautobot/extras/tests/integration/test_plugins.py +5 -4
  344. nautobot/extras/tests/integration/test_tagfilter.py +1 -1
  345. nautobot/extras/tests/test_api.py +7 -9
  346. nautobot/extras/tests/test_changelog.py +3 -2
  347. nautobot/extras/tests/test_context_managers.py +6 -3
  348. nautobot/extras/tests/test_customfields.py +2 -2
  349. nautobot/extras/tests/test_datasources.py +1 -1
  350. nautobot/extras/tests/test_dynamicgroups.py +2 -3
  351. nautobot/extras/tests/test_filters.py +2 -2
  352. nautobot/extras/tests/test_forms.py +5 -6
  353. nautobot/extras/tests/test_git.py +1 -1
  354. nautobot/extras/tests/test_job_variables.py +0 -1
  355. nautobot/extras/tests/test_jobs.py +5 -5
  356. nautobot/extras/tests/test_models.py +2 -2
  357. nautobot/extras/tests/test_notes.py +0 -1
  358. nautobot/extras/tests/test_plugins.py +8 -9
  359. nautobot/extras/tests/test_relationships.py +3 -3
  360. nautobot/extras/tests/test_tags.py +1 -1
  361. nautobot/extras/tests/test_views.py +8 -9
  362. nautobot/extras/tests/test_webhooks.py +4 -5
  363. nautobot/extras/utils.py +11 -9
  364. nautobot/extras/views.py +3 -3
  365. nautobot/generate_secret_key.py +1 -1
  366. nautobot/ipam/api/serializers.py +1 -2
  367. nautobot/ipam/api/urls.py +1 -1
  368. nautobot/ipam/api/views.py +1 -0
  369. nautobot/ipam/apps.py +2 -1
  370. nautobot/ipam/factory.py +6 -9
  371. nautobot/ipam/fields.py +1 -1
  372. nautobot/ipam/filters.py +4 -3
  373. nautobot/ipam/formfields.py +1 -2
  374. nautobot/ipam/forms.py +4 -3
  375. nautobot/ipam/graphql/types.py +1 -1
  376. nautobot/ipam/homepage.py +0 -1
  377. nautobot/ipam/lookups.py +2 -3
  378. nautobot/ipam/migrations/0002_initial_part_2.py +2 -1
  379. nautobot/ipam/migrations/0003_remove_max_length.py +1 -0
  380. nautobot/ipam/migrations/0004_fixup_p2p_broadcast.py +0 -1
  381. nautobot/ipam/migrations/0005_auto_slug.py +1 -0
  382. nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -0
  383. nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +1 -0
  384. nautobot/ipam/migrations/0020_related_name_changes.py +1 -0
  385. nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +1 -2
  386. nautobot/ipam/migrations/0024_interface_to_ipaddress_m2m.py +2 -1
  387. nautobot/ipam/migrations/0025_interface_ipaddress_m2m_data_migration.py +1 -0
  388. nautobot/ipam/migrations/0028_tagsfield.py +1 -0
  389. nautobot/ipam/migrations/0030_ipam__namespaces.py +3 -1
  390. nautobot/ipam/migrations/0034_status_nonnullable.py +1 -0
  391. nautobot/ipam/migrations/0037_data_migration_vlan_group_name_uniqueness.py +0 -1
  392. nautobot/ipam/models.py +7 -7
  393. nautobot/ipam/navigation.py +0 -1
  394. nautobot/ipam/querysets.py +2 -2
  395. nautobot/ipam/tables.py +4 -3
  396. nautobot/ipam/tests/test_api.py +2 -2
  397. nautobot/ipam/tests/test_filters.py +7 -7
  398. nautobot/ipam/tests/test_migrations.py +1 -2
  399. nautobot/ipam/tests/test_models.py +2 -2
  400. nautobot/ipam/tests/test_ordering.py +1 -1
  401. nautobot/ipam/tests/test_querysets.py +2 -2
  402. nautobot/ipam/tests/test_views.py +6 -6
  403. nautobot/ipam/urls.py +1 -0
  404. nautobot/ipam/utils/migrations.py +0 -1
  405. nautobot/ipam/views.py +6 -6
  406. nautobot/project-static/docs/404.html +1 -43
  407. nautobot/project-static/docs/apps/index.html +1 -43
  408. nautobot/project-static/docs/apps/nautobot-apps.html +1 -43
  409. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +389 -431
  410. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +12 -54
  411. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2452 -2486
  412. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +1 -43
  413. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +90 -132
  414. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +1 -43
  415. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +1 -43
  416. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +1 -43
  417. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +1 -43
  418. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +26 -68
  419. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +993 -1035
  420. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +170 -212
  421. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +1789 -1831
  422. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +961 -1003
  423. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +1 -43
  424. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +1 -43
  425. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -44
  426. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +6904 -6946
  427. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +974 -1016
  428. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +1 -43
  429. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +1159 -1197
  430. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1796 -1832
  431. nautobot/project-static/docs/development/apps/api/configuration-view.html +1 -43
  432. nautobot/project-static/docs/development/apps/api/database-backend-config.html +1 -43
  433. nautobot/project-static/docs/development/apps/api/models/django-admin.html +1 -43
  434. nautobot/project-static/docs/development/apps/api/models/global-search.html +1 -43
  435. nautobot/project-static/docs/development/apps/api/models/graphql.html +1 -43
  436. nautobot/project-static/docs/development/apps/api/models/index.html +1 -43
  437. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +1 -43
  438. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +1 -43
  439. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +1 -43
  440. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +1 -43
  441. nautobot/project-static/docs/development/apps/api/platform-features/index.html +3 -45
  442. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +1 -43
  443. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +1 -43
  444. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +5 -43
  445. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +1 -43
  446. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +1 -43
  447. nautobot/project-static/docs/development/apps/api/prometheus.html +1 -43
  448. nautobot/project-static/docs/development/apps/api/setup.html +1 -43
  449. nautobot/project-static/docs/development/apps/api/testing.html +1 -43
  450. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +1 -43
  451. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +1 -43
  452. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +1 -43
  453. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +1 -43
  454. nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +1 -43
  455. nautobot/project-static/docs/development/apps/api/views/base-template.html +1 -43
  456. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +6 -48
  457. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +1 -43
  458. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +1 -43
  459. nautobot/project-static/docs/development/apps/api/views/index.html +1 -43
  460. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +1 -43
  461. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +1 -43
  462. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +1 -43
  463. nautobot/project-static/docs/development/apps/api/views/notes.html +3 -45
  464. nautobot/project-static/docs/development/apps/api/views/rest-api.html +1 -43
  465. nautobot/project-static/docs/development/apps/api/views/urls.html +1 -43
  466. nautobot/project-static/docs/development/apps/api/views/view-overrides.html +13 -5357
  467. nautobot/project-static/docs/development/apps/index.html +1 -43
  468. nautobot/project-static/docs/development/apps/migration/code-updates.html +1 -43
  469. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +1 -43
  470. nautobot/project-static/docs/development/apps/migration/from-v1.html +1 -44
  471. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +1 -43
  472. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +1 -43
  473. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +1 -43
  474. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +1 -43
  475. nautobot/project-static/docs/development/apps/porting-from-netbox.html +1 -43
  476. nautobot/project-static/docs/development/core/application-registry.html +1 -43
  477. nautobot/project-static/docs/development/core/best-practices.html +1 -43
  478. nautobot/project-static/docs/development/core/bootstrap-ui.html +1 -43
  479. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +1 -43
  480. nautobot/project-static/docs/development/core/extending-models.html +1 -43
  481. nautobot/project-static/docs/development/core/generic-views.html +1 -43
  482. nautobot/project-static/docs/development/core/getting-started.html +108 -257
  483. nautobot/project-static/docs/development/core/homepage.html +1 -43
  484. nautobot/project-static/docs/development/core/index.html +1 -43
  485. nautobot/project-static/docs/development/core/model-features.html +1 -43
  486. nautobot/project-static/docs/development/core/natural-keys.html +1 -43
  487. nautobot/project-static/docs/development/core/navigation-menu.html +1 -43
  488. nautobot/project-static/docs/development/core/react-ui.html +13 -5640
  489. nautobot/project-static/docs/development/core/release-checklist.html +4 -52
  490. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  491. nautobot/project-static/docs/development/core/style-guide.html +61 -102
  492. nautobot/project-static/docs/development/core/templates.html +4 -46
  493. nautobot/project-static/docs/development/core/testing.html +1 -43
  494. nautobot/project-static/docs/development/core/user-preferences.html +1 -43
  495. nautobot/project-static/docs/development/index.html +1 -43
  496. nautobot/project-static/docs/development/jobs/index.html +1 -43
  497. nautobot/project-static/docs/development/jobs/migration/from-v1.html +1 -43
  498. nautobot/project-static/docs/development/react-ui.html +3 -3
  499. nautobot/project-static/docs/index.html +2 -47
  500. nautobot/project-static/docs/release-notes/index.html +1 -43
  501. nautobot/project-static/docs/release-notes/version-1.0.html +1 -43
  502. nautobot/project-static/docs/release-notes/version-1.1.html +1 -43
  503. nautobot/project-static/docs/release-notes/version-1.2.html +1 -43
  504. nautobot/project-static/docs/release-notes/version-1.3.html +1 -43
  505. nautobot/project-static/docs/release-notes/version-1.4.html +1 -43
  506. nautobot/project-static/docs/release-notes/version-1.5.html +1 -43
  507. nautobot/project-static/docs/release-notes/version-1.6.html +1 -43
  508. nautobot/project-static/docs/release-notes/version-2.0.html +1 -43
  509. nautobot/project-static/docs/release-notes/version-2.1.html +189 -77
  510. nautobot/project-static/docs/search/search_index.json +1 -1
  511. nautobot/project-static/docs/sitemap.xml +236 -251
  512. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  513. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +1 -43
  514. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  515. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +1 -43
  516. nautobot/project-static/docs/user-guide/administration/configuration/index.html +1 -43
  517. nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +13 -5389
  518. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1 -65
  519. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +1 -43
  520. nautobot/project-static/docs/user-guide/administration/guides/caching.html +1 -43
  521. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +1 -43
  522. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +1 -43
  523. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +1 -43
  524. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +1 -43
  525. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +1 -43
  526. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +1 -43
  527. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +1 -43
  528. nautobot/project-static/docs/user-guide/administration/installation/docker.html +1 -43
  529. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +1 -43
  530. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +1 -43
  531. nautobot/project-static/docs/user-guide/administration/installation/index.html +1 -64
  532. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -57
  533. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +5 -94
  534. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +1 -43
  535. nautobot/project-static/docs/user-guide/administration/installation/services.html +1 -43
  536. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +1 -43
  537. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +1 -43
  538. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +76 -137
  539. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +1 -43
  540. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +1 -43
  541. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +1 -43
  542. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +1 -43
  543. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +1 -43
  544. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +1 -43
  545. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +1 -43
  546. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +1 -43
  547. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +1 -43
  548. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +1 -43
  549. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +1 -43
  550. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +1 -43
  551. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +1 -43
  552. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +1 -43
  553. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +1 -43
  554. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +1 -43
  555. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +1 -43
  556. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +1 -43
  557. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +1 -43
  558. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +1 -43
  559. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +1 -43
  560. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +1 -43
  561. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +1 -43
  562. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -44
  563. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +1 -43
  564. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +1 -43
  565. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +1 -43
  566. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +1 -43
  567. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +1 -43
  568. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +1 -43
  569. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +1 -43
  570. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +1 -43
  571. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +1 -43
  572. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +1 -43
  573. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +1 -43
  574. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +1 -43
  575. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +1 -43
  576. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +1 -43
  577. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +1 -43
  578. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +1 -43
  579. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +1 -43
  580. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +1 -43
  581. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +1 -43
  582. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +1 -43
  583. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +1 -43
  584. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +1 -43
  585. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +1 -43
  586. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +1 -43
  587. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +1 -43
  588. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +1 -43
  589. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +1 -43
  590. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +1 -43
  591. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +1 -43
  592. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +1 -43
  593. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +1 -43
  594. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +1 -43
  595. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +1 -43
  596. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +1 -43
  597. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +1 -43
  598. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +1 -43
  599. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +1 -43
  600. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +1 -43
  601. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +1 -43
  602. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +1 -43
  603. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +1 -43
  604. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +1 -43
  605. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +1 -43
  606. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +1 -43
  607. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +1 -43
  608. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +1 -43
  609. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +1 -43
  610. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +1 -43
  611. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +1 -43
  612. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +1 -43
  613. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +1 -43
  614. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +1 -43
  615. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +23 -79
  616. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +1 -43
  617. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +1 -43
  618. nautobot/project-static/docs/user-guide/index.html +1 -43
  619. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +1 -43
  620. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +1 -43
  621. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +1 -43
  622. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +1 -43
  623. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1 -43
  624. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +1 -43
  625. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +1 -43
  626. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +1 -43
  627. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +1 -43
  628. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +1 -43
  629. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +1 -43
  630. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +1 -43
  631. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +1 -43
  632. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +1 -43
  633. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +1 -43
  634. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +1 -43
  635. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +1 -43
  636. nautobot/project-static/docs/user-guide/platform-functionality/note.html +1 -43
  637. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +1 -43
  638. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +1 -43
  639. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +1 -43
  640. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +1 -43
  641. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +1 -43
  642. nautobot/project-static/docs/user-guide/platform-functionality/role.html +1 -43
  643. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +1 -43
  644. nautobot/project-static/docs/user-guide/platform-functionality/status.html +1 -43
  645. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +1 -43
  646. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +1 -43
  647. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +5 -43
  648. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +1 -43
  649. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +1 -43
  650. nautobot/project-static/js/theme.js +0 -5
  651. nautobot/tenancy/api/urls.py +1 -1
  652. nautobot/tenancy/api/views.py +1 -0
  653. nautobot/tenancy/factory.py +2 -2
  654. nautobot/tenancy/filters/__init__.py +1 -2
  655. nautobot/tenancy/forms.py +2 -2
  656. nautobot/tenancy/homepage.py +0 -1
  657. nautobot/tenancy/migrations/0001_initial.py +2 -1
  658. nautobot/tenancy/migrations/0002_auto_slug.py +1 -0
  659. nautobot/tenancy/migrations/0004_change_tree_manager_on_tree_models.py +1 -0
  660. nautobot/tenancy/migrations/0008_tagsfield.py +1 -0
  661. nautobot/tenancy/models.py +0 -1
  662. nautobot/tenancy/navigation.py +0 -1
  663. nautobot/tenancy/tables.py +1 -0
  664. nautobot/tenancy/tests/test_filters.py +5 -5
  665. nautobot/tenancy/urls.py +1 -0
  666. nautobot/tenancy/views.py +2 -2
  667. nautobot/users/admin.py +1 -2
  668. nautobot/users/api/urls.py +1 -1
  669. nautobot/users/api/views.py +6 -4
  670. nautobot/users/factory.py +1 -3
  671. nautobot/users/filters.py +4 -4
  672. nautobot/users/forms.py +1 -0
  673. nautobot/users/migrations/0004_alter_user_managers.py +1 -0
  674. nautobot/users/migrations/0008_make_object_permission_a_changelogged_model.py +22 -0
  675. nautobot/users/models.py +2 -2
  676. nautobot/users/tests/test_api.py +7 -6
  677. nautobot/users/tests/test_filters.py +0 -1
  678. nautobot/users/tests/test_models.py +0 -1
  679. nautobot/users/tests/test_password_ui.py +1 -1
  680. nautobot/users/views.py +2 -2
  681. nautobot/virtualization/api/urls.py +1 -1
  682. nautobot/virtualization/api/views.py +2 -1
  683. nautobot/virtualization/apps.py +1 -1
  684. nautobot/virtualization/choices.py +0 -1
  685. nautobot/virtualization/factory.py +1 -1
  686. nautobot/virtualization/filters.py +1 -1
  687. nautobot/virtualization/forms.py +6 -6
  688. nautobot/virtualization/homepage.py +0 -1
  689. nautobot/virtualization/migrations/0003_vminterface_verbose_name.py +1 -0
  690. nautobot/virtualization/migrations/0004_auto_slug.py +1 -0
  691. nautobot/virtualization/migrations/0005_add_natural_indexing.py +1 -0
  692. nautobot/virtualization/migrations/0006_vminterface_status.py +1 -0
  693. nautobot/virtualization/migrations/0007_vminterface_status_data_migration.py +1 -0
  694. nautobot/virtualization/migrations/0011_alter_vminterface_mac_address.py +1 -0
  695. nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -0
  696. nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +1 -0
  697. nautobot/virtualization/migrations/0018_related_name_changes.py +1 -0
  698. nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +1 -0
  699. nautobot/virtualization/migrations/0025_status_nonnullable.py +1 -0
  700. nautobot/virtualization/models.py +1 -2
  701. nautobot/virtualization/navigation.py +0 -1
  702. nautobot/virtualization/signals.py +0 -1
  703. nautobot/virtualization/tables.py +1 -0
  704. nautobot/virtualization/tests/test_filters.py +3 -3
  705. nautobot/virtualization/tests/test_models.py +1 -1
  706. nautobot/virtualization/tests/test_views.py +2 -2
  707. nautobot/virtualization/urls.py +1 -0
  708. nautobot/virtualization/views.py +1 -1
  709. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/METADATA +1 -1
  710. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/RECORD +713 -814
  711. nautobot/core/management/commands/build_ui.py +0 -281
  712. nautobot/core/templates/base_react.html +0 -55
  713. nautobot/core/tests/test_cli.py +0 -25
  714. nautobot/ui/.eslintignore +0 -3
  715. nautobot/ui/.gitignore +0 -7
  716. nautobot/ui/.prettierignore +0 -6
  717. nautobot/ui/.prettierrc +0 -4
  718. nautobot/ui/README.md +0 -27
  719. nautobot/ui/config/env.js +0 -102
  720. nautobot/ui/config/getHttpsConfig.js +0 -68
  721. nautobot/ui/config/jest/babelTransform.js +0 -14
  722. nautobot/ui/config/jest/cssTransform.js +0 -12
  723. nautobot/ui/config/jest/fileTransform.js +0 -38
  724. nautobot/ui/config/modules.js +0 -151
  725. nautobot/ui/config/paths.js +0 -67
  726. nautobot/ui/config/webpack/persistentCache/createEnvironmentHash.js +0 -8
  727. nautobot/ui/config/webpack.config.js +0 -674
  728. nautobot/ui/config/webpackDevServer.config.js +0 -127
  729. nautobot/ui/jest.config.js +0 -35
  730. nautobot/ui/jsconfig.json +0 -4
  731. nautobot/ui/package-lock.json +0 -22947
  732. nautobot/ui/package.json +0 -119
  733. nautobot/ui/public/index.html +0 -47
  734. nautobot/ui/public/logo192.png +0 -0
  735. nautobot/ui/public/logo512.png +0 -0
  736. nautobot/ui/public/manifest.json +0 -25
  737. nautobot/ui/public/nautobot_logo.svg +0 -131
  738. nautobot/ui/public/robots.txt +0 -3
  739. nautobot/ui/scripts/build.js +0 -224
  740. nautobot/ui/scripts/start.js +0 -140
  741. nautobot/ui/scripts/test.js +0 -40
  742. nautobot/ui/src/App.js +0 -79
  743. nautobot/ui/src/components/AppFullWidthComponents.js +0 -8
  744. nautobot/ui/src/components/AppTab.js +0 -40
  745. nautobot/ui/src/components/Apps.js +0 -60
  746. nautobot/ui/src/components/FeedbackModal.js +0 -123
  747. nautobot/ui/src/components/FiltersPanel.js +0 -693
  748. nautobot/ui/src/components/HomeChangelogPanel.js +0 -98
  749. nautobot/ui/src/components/HomePanel.js +0 -58
  750. nautobot/ui/src/components/JobHistoryTable.js +0 -78
  751. nautobot/ui/src/components/Layout.js +0 -76
  752. nautobot/ui/src/components/LoadingWidget.js +0 -14
  753. nautobot/ui/src/components/Navbar.js +0 -204
  754. nautobot/ui/src/components/NotificationPopover.js +0 -27
  755. nautobot/ui/src/components/ObjectTable/ObjectListTable.js +0 -300
  756. nautobot/ui/src/components/ObjectTable/ObjectTable.js +0 -96
  757. nautobot/ui/src/components/ObjectTable/ObjectTableItem.js +0 -70
  758. nautobot/ui/src/components/ObjectTable/index.js +0 -3
  759. nautobot/ui/src/components/Pagination/PageNumberForm.js +0 -228
  760. nautobot/ui/src/components/Pagination/PageSizeForm.js +0 -65
  761. nautobot/ui/src/components/Pagination/Pagination.js +0 -67
  762. nautobot/ui/src/components/Pagination/index.js +0 -3
  763. nautobot/ui/src/components/ReferenceDataTag.js +0 -35
  764. nautobot/ui/src/components/Retrieve/RenderChangeLogsTab.js +0 -58
  765. nautobot/ui/src/components/Retrieve/RenderColumn.js +0 -30
  766. nautobot/ui/src/components/Retrieve/RenderGroup.js +0 -24
  767. nautobot/ui/src/components/Retrieve/RenderHeader.js +0 -125
  768. nautobot/ui/src/components/Retrieve/RenderNotesTab.js +0 -60
  769. nautobot/ui/src/components/Retrieve/RenderTable.js +0 -33
  770. nautobot/ui/src/components/Retrieve/RenderTabs.js +0 -56
  771. nautobot/ui/src/components/Retrieve/index.js +0 -7
  772. nautobot/ui/src/components/RouterButton.js +0 -10
  773. nautobot/ui/src/components/RouterLink.js +0 -10
  774. nautobot/ui/src/components/SidebarNav.js +0 -156
  775. nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +0 -16
  776. nautobot/ui/src/components/__tests__/AppTab.test.js +0 -21
  777. nautobot/ui/src/components/__tests__/Apps.test.js +0 -14
  778. nautobot/ui/src/components/__tests__/Layout.test.js +0 -33
  779. nautobot/ui/src/components/__tests__/PageSizeForm.test.js +0 -13
  780. nautobot/ui/src/components/__tests__/Pagination.test.js +0 -43
  781. nautobot/ui/src/components/__tests__/Table.test.js +0 -39
  782. nautobot/ui/src/components/__tests__/TableItem.test.js +0 -39
  783. nautobot/ui/src/components/index.js +0 -4
  784. nautobot/ui/src/constants/apiPath.js +0 -13
  785. nautobot/ui/src/constants/icons.js +0 -15
  786. nautobot/ui/src/constants/size.js +0 -15
  787. nautobot/ui/src/file_templates/app_imports.js.j2 +0 -7
  788. nautobot/ui/src/file_templates/jsconfig-base.json +0 -12
  789. nautobot/ui/src/index.js +0 -65
  790. nautobot/ui/src/reportWebVitals.js +0 -15
  791. nautobot/ui/src/router.js +0 -77
  792. nautobot/ui/src/utils/api.js +0 -160
  793. nautobot/ui/src/utils/app-import.js +0 -15
  794. nautobot/ui/src/utils/color.js +0 -15
  795. nautobot/ui/src/utils/date.js +0 -14
  796. nautobot/ui/src/utils/index.js +0 -15
  797. nautobot/ui/src/utils/navigation.js +0 -48
  798. nautobot/ui/src/utils/session.js +0 -64
  799. nautobot/ui/src/utils/store.js +0 -242
  800. nautobot/ui/src/utils/string.js +0 -6
  801. nautobot/ui/src/utils/url.js +0 -4
  802. nautobot/ui/src/views/Home.js +0 -142
  803. nautobot/ui/src/views/InstalledApps.js +0 -80
  804. nautobot/ui/src/views/Login.js +0 -48
  805. nautobot/ui/src/views/Logout.js +0 -20
  806. nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +0 -11
  807. nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +0 -107
  808. nautobot/ui/src/views/__tests__/Login.test.js +0 -15
  809. nautobot/ui/src/views/generic/GenericView.js +0 -191
  810. nautobot/ui/src/views/generic/ObjectCreate.js +0 -96
  811. nautobot/ui/src/views/generic/ObjectList.js +0 -137
  812. nautobot/ui/src/views/generic/ObjectRetrieve.js +0 -87
  813. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/LICENSE.txt +0 -0
  814. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/WHEEL +0 -0
  815. {nautobot-2.1.0.dist-info → nautobot-2.1.1.dist-info}/entry_points.txt +0 -0
@@ -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>
@@ -3528,23 +3514,9 @@
3528
3514
 
3529
3515
 
3530
3516
 
3531
- <li class="md-nav__item">
3532
- <a href="../../../development/apps/api/views/view-overrides.html" class="md-nav__link">
3533
- View Overrides
3534
- </a>
3535
- </li>
3536
-
3537
-
3538
-
3539
-
3540
-
3541
-
3542
-
3543
-
3544
-
3545
3517
  <li class="md-nav__item">
3546
3518
  <a href="../../../development/apps/api/views/core-view-overrides.html" class="md-nav__link">
3547
- Legacy View Overrides
3519
+ View Overrides
3548
3520
  </a>
3549
3521
  </li>
3550
3522
 
@@ -4723,20 +4695,6 @@
4723
4695
 
4724
4696
 
4725
4697
 
4726
- <li class="md-nav__item">
4727
- <a href="../../../development/core/react-ui.html" class="md-nav__link">
4728
- React UI
4729
- </a>
4730
- </li>
4731
-
4732
-
4733
-
4734
-
4735
-
4736
-
4737
-
4738
-
4739
-
4740
4698
  <li class="md-nav__item">
4741
4699
  <a href="../../../development/core/role-internals.html" class="md-nav__link">
4742
4700
  Role Internals
@@ -5352,7 +5310,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5352
5310
 
5353
5311
  <details class="quote">
5354
5312
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5355
- <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>
5356
5315
  <span class="normal"><a href="#__codelineno-0-59">59</a></span>
5357
5316
  <span class="normal"><a href="#__codelineno-0-60">60</a></span>
5358
5317
  <span class="normal"><a href="#__codelineno-0-61">61</a></span>
@@ -5365,22 +5324,21 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5365
5324
  <span class="normal"><a href="#__codelineno-0-68">68</a></span>
5366
5325
  <span class="normal"><a href="#__codelineno-0-69">69</a></span>
5367
5326
  <span class="normal"><a href="#__codelineno-0-70">70</a></span>
5368
- <span class="normal"><a href="#__codelineno-0-71">71</a></span>
5369
- <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>
5370
- <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>
5371
- <a id="__codelineno-0-60" name="__codelineno-0-60"></a>
5372
- <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>
5373
- <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>
5374
- <a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &quot;&quot;&quot;</span>
5375
- <a id="__codelineno-0-64" name="__codelineno-0-64"></a>
5376
- <a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">serialize</span> <span class="o">=</span> <span class="nb">int</span>
5377
- <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>
5378
- <a id="__codelineno-0-67" name="__codelineno-0-67"></a>
5379
- <a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="nd">@staticmethod</span>
5380
- <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>
5381
- <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>
5382
- <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>
5383
- <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>
5384
5342
  </code></pre></div></td></tr></table></div>
5385
5343
  </details>
5386
5344
 
@@ -5527,7 +5485,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5527
5485
 
5528
5486
  <details class="quote">
5529
5487
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
5530
- <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>
5531
5490
  <span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
5532
5491
  <span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
5533
5492
  <span class="normal"><a href="#__codelineno-0-100">100</a></span>
@@ -5553,35 +5512,34 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5553
5512
  <span class="normal"><a href="#__codelineno-0-120">120</a></span>
5554
5513
  <span class="normal"><a href="#__codelineno-0-121">121</a></span>
5555
5514
  <span class="normal"><a href="#__codelineno-0-122">122</a></span>
5556
- <span class="normal"><a href="#__codelineno-0-123">123</a></span>
5557
- <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>
5558
- <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>
5559
- <a id="__codelineno-0-99" name="__codelineno-0-99"></a>
5560
- <a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Args:</span>
5561
- <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>
5562
- <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>
5563
- <a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> &quot;&quot;&quot;</span>
5564
- <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>
5565
- <a id="__codelineno-0-105" name="__codelineno-0-105"></a>
5566
- <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>
5567
- <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>
5568
- <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>
5569
- <a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="n">peer</span>
5570
- <a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="k">return</span> <span class="kc">None</span>
5571
- <a id="__codelineno-0-111" name="__codelineno-0-111"></a>
5572
- <a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">return</span> <span class="n">resolve_cable_peer</span>
5573
- <a id="__codelineno-0-113" name="__codelineno-0-113"></a>
5574
- <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>
5575
- <a id="__codelineno-0-115" name="__codelineno-0-115"></a>
5576
- <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>
5577
- <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>
5578
- <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>
5579
- <a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="k">return</span> <span class="n">peer</span>
5580
- <a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">return</span> <span class="kc">None</span>
5581
- <a id="__codelineno-0-121" name="__codelineno-0-121"></a>
5582
- <a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">return</span> <span class="n">resolve_connected_endpoint</span>
5583
- <a id="__codelineno-0-123" name="__codelineno-0-123"></a>
5584
- <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>
5585
5543
  </code></pre></div></td></tr></table></div>
5586
5544
  </details>
5587
5545
  </div>
@@ -5701,7 +5659,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5701
5659
 
5702
5660
  <details class="quote">
5703
5661
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5704
- <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>
5705
5664
  <span class="normal"><a href="#__codelineno-0-12">12</a></span>
5706
5665
  <span class="normal"><a href="#__codelineno-0-13">13</a></span>
5707
5666
  <span class="normal"><a href="#__codelineno-0-14">14</a></span>
@@ -5723,31 +5682,30 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5723
5682
  <span class="normal"><a href="#__codelineno-0-30">30</a></span>
5724
5683
  <span class="normal"><a href="#__codelineno-0-31">31</a></span>
5725
5684
  <span class="normal"><a href="#__codelineno-0-32">32</a></span>
5726
- <span class="normal"><a href="#__codelineno-0-33">33</a></span>
5727
- <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>
5728
- <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>
5729
- <a id="__codelineno-0-13" name="__codelineno-0-13"></a>
5730
- <a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> Args:</span>
5731
- <a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> query (str): String with GraphQL query.</span>
5732
- <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>
5733
- <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> request (django.test.client.RequestFactory, optional): Used to authenticate.</span>
5734
- <a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> user (django.contrib.auth.models.User, optional): Used to authenticate.</span>
5735
- <a id="__codelineno-0-19" name="__codelineno-0-19"></a>
5736
- <a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Returns:</span>
5737
- <a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5738
- <a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> &quot;&quot;&quot;</span>
5739
- <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>
5740
- <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>
5741
- <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>
5742
- <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>
5743
- <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>
5744
- <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>
5745
- <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>
5746
- <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>
5747
- <a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">if</span> <span class="n">variables</span><span class="p">:</span>
5748
- <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>
5749
- <a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">else</span><span class="p">:</span>
5750
- <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>
5751
5709
  </code></pre></div></td></tr></table></div>
5752
5710
  </details>
5753
5711
  </div>
@@ -5873,7 +5831,8 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5873
5831
 
5874
5832
  <details class="quote">
5875
5833
  <summary>Source code in <code>nautobot/core/graphql/__init__.py</code></summary>
5876
- <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>
5877
5836
  <span class="normal"><a href="#__codelineno-0-38">38</a></span>
5878
5837
  <span class="normal"><a href="#__codelineno-0-39">39</a></span>
5879
5838
  <span class="normal"><a href="#__codelineno-0-40">40</a></span>
@@ -5887,23 +5846,22 @@ that this approach may fail for values in excess of 2^53-1 (the largest integer
5887
5846
  <span class="normal"><a href="#__codelineno-0-48">48</a></span>
5888
5847
  <span class="normal"><a href="#__codelineno-0-49">49</a></span>
5889
5848
  <span class="normal"><a href="#__codelineno-0-50">50</a></span>
5890
- <span class="normal"><a href="#__codelineno-0-51">51</a></span>
5891
- <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>
5892
- <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>
5893
- <a id="__codelineno-0-39" name="__codelineno-0-39"></a>
5894
- <a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
5895
- <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> saved_query_name (str): Name of a saved GraphQL query.</span>
5896
- <a id="__codelineno-0-42" name="__codelineno-0-42"></a>
5897
- <a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Keyword Args:</span>
5898
- <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>
5899
- <a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> request (Optional[django.test.client.RequestFactory]): Used to authenticate.</span>
5900
- <a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> user (Optional[django.contrib.auth.models.User]): Used to authenticate.</span>
5901
- <a id="__codelineno-0-47" name="__codelineno-0-47"></a>
5902
- <a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
5903
- <a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> (GraphQLDocument): Result for query</span>
5904
- <a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
5905
- <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>
5906
- <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>
5907
5865
  </code></pre></div></td></tr></table></div>
5908
5866
  </details>
5909
5867
  </div>
@@ -5986,7 +5944,8 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
5986
5944
 
5987
5945
  <details class="quote">
5988
5946
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
5989
- <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>
5990
5949
  <span class="normal"><a href="#__codelineno-0-29">29</a></span>
5991
5950
  <span class="normal"><a href="#__codelineno-0-30">30</a></span>
5992
5951
  <span class="normal"><a href="#__codelineno-0-31">31</a></span>
@@ -6051,74 +6010,73 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
6051
6010
  <span class="normal"><a href="#__codelineno-0-90">90</a></span>
6052
6011
  <span class="normal"><a href="#__codelineno-0-91">91</a></span>
6053
6012
  <span class="normal"><a href="#__codelineno-0-92">92</a></span>
6054
- <span class="normal"><a href="#__codelineno-0-93">93</a></span>
6055
- <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>
6056
- <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>
6057
- <a id="__codelineno-0-30" name="__codelineno-0-30"></a>
6058
- <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>
6059
- <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>
6060
- <a id="__codelineno-0-33" name="__codelineno-0-33"></a>
6061
- <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>
6062
- <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>
6063
- <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>
6064
- <a id="__codelineno-0-37" name="__codelineno-0-37"></a>
6065
- <a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Args:</span>
6066
- <a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> filterset_class (FilterSet): FilterSet class used to extract the argument</span>
6067
- <a id="__codelineno-0-40" name="__codelineno-0-40"></a>
6068
- <a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
6069
- <a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> (dict[graphene.Argument]): Filter Arguments organized in a dictionary</span>
6070
- <a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> &quot;&quot;&quot;</span>
6071
- <a id="__codelineno-0-44" name="__codelineno-0-44"></a>
6072
- <a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">args</span> <span class="o">=</span> <span class="p">{}</span>
6073
- <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>
6074
- <a id="__codelineno-0-47" name="__codelineno-0-47"></a>
6075
- <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>
6076
- <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>
6077
- <a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="c1"># (https://github.com/nautobot/nautobot/issues/464)</span>
6078
- <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>
6079
- <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>
6080
- <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>
6081
- <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>
6082
- <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>
6083
- <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>
6084
- <a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
6085
- <a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">continue</span>
6086
- <a id="__codelineno-0-59" name="__codelineno-0-59"></a>
6087
- <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>
6088
- <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>
6089
- <a id="__codelineno-0-62" name="__codelineno-0-62"></a>
6090
- <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>
6091
- <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>
6092
- <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>
6093
- <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>
6094
- <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>
6095
- <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>
6096
- <a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">else</span><span class="p">:</span>
6097
- <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>
6098
- <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>
6099
- <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>
6100
- <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>
6101
- <a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">else</span><span class="p">:</span>
6102
- <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>
6103
- <a id="__codelineno-0-76" name="__codelineno-0-76"></a>
6104
- <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>
6105
- <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>
6106
- <a id="__codelineno-0-79" name="__codelineno-0-79"></a>
6107
- <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>
6108
- <a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">field_type</span><span class="p">,</span>
6109
- <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>
6110
- <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>
6111
- <a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
6112
- <a id="__codelineno-0-85" name="__codelineno-0-85"></a>
6113
- <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>
6114
- <a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="c1"># `graphene.types.fields.Field.type` in Graphene 2.x.</span>
6115
- <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>
6116
- <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>
6117
- <a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="c1"># validated to be safe to keep even in Graphene 3.</span>
6118
- <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>
6119
- <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>
6120
- <a id="__codelineno-0-93" name="__codelineno-0-93"></a>
6121
- <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>
6122
6080
  </code></pre></div></td></tr></table></div>
6123
6081
  </details>
6124
6082
  </div>
@@ -6147,19 +6105,19 @@ if the filter field is a subclass of MultipleChoiceFilter, the argument will be
6147
6105
 
6148
6106
  <details class="quote">
6149
6107
  <summary>Source code in <code>nautobot/core/graphql/utils.py</code></summary>
6150
- <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>
6151
6110
  <span class="normal"><a href="#__codelineno-0-20">20</a></span>
6152
6111
  <span class="normal"><a href="#__codelineno-0-21">21</a></span>
6153
6112
  <span class="normal"><a href="#__codelineno-0-22">22</a></span>
6154
6113
  <span class="normal"><a href="#__codelineno-0-23">23</a></span>
6155
- <span class="normal"><a href="#__codelineno-0-24">24</a></span>
6156
- <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>
6157
- <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>
6158
- <a id="__codelineno-0-21" name="__codelineno-0-21"></a>
6159
- <a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Examples:</span>
6160
- <a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> IP Addresses &gt; ip_addresses</span>
6161
- <a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
6162
- <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>
6163
6121
  </code></pre></div></td></tr></table></div>
6164
6122
  </details>
6165
6123
  </div>