nautobot 2.4.0__py3-none-any.whl → 2.4.0b1__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.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (592) hide show
  1. nautobot/apps/__init__.py +1 -1
  2. nautobot/apps/api.py +8 -8
  3. nautobot/apps/change_logging.py +2 -2
  4. nautobot/apps/choices.py +4 -4
  5. nautobot/apps/events.py +3 -3
  6. nautobot/apps/factory.py +2 -2
  7. nautobot/apps/filters.py +1 -1
  8. nautobot/apps/forms.py +20 -20
  9. nautobot/apps/graphql.py +2 -2
  10. nautobot/apps/jobs.py +8 -8
  11. nautobot/apps/models.py +19 -19
  12. nautobot/apps/tables.py +1 -1
  13. nautobot/apps/testing.py +10 -10
  14. nautobot/apps/ui.py +2 -2
  15. nautobot/apps/utils.py +7 -7
  16. nautobot/apps/views.py +7 -7
  17. nautobot/circuits/api/serializers.py +0 -1
  18. nautobot/circuits/api/views.py +8 -4
  19. nautobot/circuits/tables.py +1 -2
  20. nautobot/circuits/templates/circuits/circuit_create.html +7 -1
  21. nautobot/circuits/views.py +3 -3
  22. nautobot/cloud/api/views.py +10 -6
  23. nautobot/cloud/models.py +1 -1
  24. nautobot/cloud/views.py +16 -0
  25. nautobot/core/api/fields.py +5 -5
  26. nautobot/core/api/filter_backends.py +9 -3
  27. nautobot/core/api/schema.py +2 -13
  28. nautobot/core/api/serializers.py +34 -40
  29. nautobot/core/api/views.py +4 -56
  30. nautobot/core/celery/log.py +4 -4
  31. nautobot/core/celery/schedulers.py +1 -1
  32. nautobot/core/choices.py +2 -2
  33. nautobot/core/events/__init__.py +3 -3
  34. nautobot/core/filters.py +16 -21
  35. nautobot/core/fixtures/user-data.json +59 -0
  36. nautobot/core/forms/__init__.py +19 -19
  37. nautobot/core/forms/fields.py +11 -14
  38. nautobot/core/forms/forms.py +2 -33
  39. nautobot/core/graphql/types.py +1 -1
  40. nautobot/core/jobs/__init__.py +7 -28
  41. nautobot/core/jobs/cleanup.py +12 -48
  42. nautobot/core/jobs/groups.py +1 -1
  43. nautobot/core/management/commands/validate_models.py +1 -1
  44. nautobot/core/models/__init__.py +1 -1
  45. nautobot/core/models/query_functions.py +2 -2
  46. nautobot/core/models/tree_queries.py +3 -6
  47. nautobot/core/settings.py +2 -29
  48. nautobot/core/settings.yaml +0 -21
  49. nautobot/core/tables.py +60 -74
  50. nautobot/core/templates/inc/media.html +0 -3
  51. nautobot/core/templates/inc/nav_menu.html +0 -1
  52. nautobot/core/templates/nautobot_config.py.j2 +0 -13
  53. nautobot/core/templates/search.html +0 -7
  54. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  55. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  56. nautobot/core/templates/utilities/theme_preview.html +0 -7
  57. nautobot/core/templatetags/helpers.py +2 -11
  58. nautobot/core/testing/__init__.py +8 -8
  59. nautobot/core/testing/api.py +15 -170
  60. nautobot/core/testing/filters.py +2 -25
  61. nautobot/core/testing/forms.py +0 -2
  62. nautobot/core/testing/mixins.py +2 -7
  63. nautobot/core/testing/views.py +29 -44
  64. nautobot/core/tests/integration/test_app_home.py +1 -0
  65. nautobot/core/tests/integration/test_app_navbar.py +1 -0
  66. nautobot/core/tests/integration/test_filters.py +2 -0
  67. nautobot/core/tests/integration/test_home.py +1 -0
  68. nautobot/core/tests/integration/test_navbar.py +1 -0
  69. nautobot/core/tests/integration/test_view_authentication.py +0 -1
  70. nautobot/core/tests/runner.py +1 -1
  71. nautobot/core/tests/test_api.py +1 -98
  72. nautobot/core/tests/test_csv.py +3 -25
  73. nautobot/core/tests/test_forms.py +0 -1
  74. nautobot/core/tests/test_jobs.py +1 -303
  75. nautobot/core/tests/test_settings_schema.py +0 -7
  76. nautobot/core/tests/test_tables.py +0 -100
  77. nautobot/core/tests/test_utils.py +1 -63
  78. nautobot/core/tests/test_views.py +3 -30
  79. nautobot/core/ui/nav.py +0 -1
  80. nautobot/core/ui/object_detail.py +1 -15
  81. nautobot/core/urls.py +0 -11
  82. nautobot/core/utils/lookup.py +8 -11
  83. nautobot/core/utils/requests.py +9 -24
  84. nautobot/core/views/__init__.py +0 -42
  85. nautobot/core/views/generic.py +176 -78
  86. nautobot/core/views/mixins.py +34 -94
  87. nautobot/core/views/renderers.py +6 -6
  88. nautobot/dcim/api/serializers.py +62 -54
  89. nautobot/dcim/api/views.py +113 -47
  90. nautobot/dcim/filters/__init__.py +2 -31
  91. nautobot/dcim/forms.py +17 -36
  92. nautobot/dcim/graphql/types.py +2 -2
  93. nautobot/dcim/models/__init__.py +1 -1
  94. nautobot/dcim/models/device_component_templates.py +2 -2
  95. nautobot/dcim/models/device_components.py +20 -22
  96. nautobot/dcim/models/devices.py +1 -10
  97. nautobot/dcim/models/locations.py +3 -3
  98. nautobot/dcim/models/power.py +5 -6
  99. nautobot/dcim/models/racks.py +4 -4
  100. nautobot/dcim/tables/__init__.py +3 -3
  101. nautobot/dcim/tables/devices.py +5 -7
  102. nautobot/dcim/tables/devicetypes.py +2 -2
  103. nautobot/dcim/tables/racks.py +1 -1
  104. nautobot/dcim/templates/dcim/controller_create.html +7 -1
  105. nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
  106. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
  107. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
  108. nautobot/dcim/templates/dcim/device.html +9 -1
  109. nautobot/dcim/templates/dcim/device_edit.html +37 -36
  110. nautobot/dcim/templates/dcim/location.html +9 -1
  111. nautobot/dcim/templates/dcim/location_edit.html +7 -1
  112. nautobot/dcim/templates/dcim/rack.html +9 -1
  113. nautobot/dcim/templates/dcim/rack_edit.html +7 -1
  114. nautobot/dcim/templates/dcim/rackreservation.html +9 -1
  115. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
  116. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
  117. nautobot/dcim/tests/test_api.py +3 -16
  118. nautobot/dcim/tests/test_filters.py +0 -33
  119. nautobot/dcim/tests/test_forms.py +2 -51
  120. nautobot/dcim/tests/test_graphql.py +0 -52
  121. nautobot/dcim/tests/test_models.py +5 -34
  122. nautobot/dcim/tests/test_views.py +83 -21
  123. nautobot/dcim/views.py +13 -1
  124. nautobot/extras/api/customfields.py +2 -2
  125. nautobot/extras/api/serializers.py +85 -90
  126. nautobot/extras/api/views.py +27 -22
  127. nautobot/extras/constants.py +0 -2
  128. nautobot/extras/filters/__init__.py +6 -8
  129. nautobot/extras/forms/base.py +2 -2
  130. nautobot/extras/forms/forms.py +31 -139
  131. nautobot/extras/forms/mixins.py +5 -13
  132. nautobot/extras/group_sync.py +3 -3
  133. nautobot/extras/health_checks.py +2 -1
  134. nautobot/extras/jobs.py +12 -70
  135. nautobot/extras/managers.py +1 -3
  136. nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
  137. nautobot/extras/models/__init__.py +1 -1
  138. nautobot/extras/models/contacts.py +1 -1
  139. nautobot/extras/models/customfields.py +11 -12
  140. nautobot/extras/models/groups.py +9 -11
  141. nautobot/extras/models/jobs.py +4 -23
  142. nautobot/extras/models/models.py +2 -2
  143. nautobot/extras/plugins/__init__.py +2 -13
  144. nautobot/extras/plugins/marketplace_manifest.yml +79 -84
  145. nautobot/extras/plugins/tables.py +14 -16
  146. nautobot/extras/plugins/views.py +69 -65
  147. nautobot/extras/registry.py +1 -1
  148. nautobot/extras/secrets/__init__.py +2 -2
  149. nautobot/extras/tables.py +5 -7
  150. nautobot/extras/templates/extras/dynamicgroup.html +9 -1
  151. nautobot/extras/templates/extras/job_detail.html +0 -16
  152. nautobot/extras/templates/extras/job_edit.html +0 -1
  153. nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
  154. nautobot/extras/templates/extras/marketplace.html +11 -29
  155. nautobot/extras/templates/extras/plugin_detail.html +15 -32
  156. nautobot/extras/templates/extras/plugins_tiles.html +10 -21
  157. nautobot/extras/test_jobs/api_test_job.py +1 -1
  158. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  159. nautobot/extras/test_jobs/dry_run.py +1 -1
  160. nautobot/extras/test_jobs/fail.py +5 -5
  161. nautobot/extras/test_jobs/file_output.py +1 -1
  162. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  163. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  164. nautobot/extras/test_jobs/ipaddress_vars.py +1 -3
  165. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  166. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  167. nautobot/extras/test_jobs/log_redaction.py +1 -1
  168. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  169. nautobot/extras/test_jobs/modify_db.py +1 -1
  170. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  171. nautobot/extras/test_jobs/object_var_required.py +1 -1
  172. nautobot/extras/test_jobs/object_vars.py +1 -1
  173. nautobot/extras/test_jobs/pass.py +3 -3
  174. nautobot/extras/test_jobs/profiling.py +1 -1
  175. nautobot/extras/test_jobs/relative_import.py +3 -3
  176. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  177. nautobot/extras/test_jobs/task_queues.py +1 -1
  178. nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
  179. nautobot/extras/tests/test_api.py +13 -13
  180. nautobot/extras/tests/test_customfields.py +1 -1
  181. nautobot/extras/tests/test_datasources.py +1 -2
  182. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  183. nautobot/extras/tests/test_filters.py +6 -6
  184. nautobot/extras/tests/test_forms.py +1 -20
  185. nautobot/extras/tests/test_jobs.py +19 -160
  186. nautobot/extras/tests/test_models.py +10 -10
  187. nautobot/extras/tests/test_plugins.py +9 -62
  188. nautobot/extras/tests/test_relationships.py +9 -120
  189. nautobot/extras/tests/test_views.py +191 -52
  190. nautobot/extras/utils.py +2 -3
  191. nautobot/extras/views.py +98 -30
  192. nautobot/ipam/api/fields.py +3 -3
  193. nautobot/ipam/api/serializers.py +33 -41
  194. nautobot/ipam/api/views.py +117 -68
  195. nautobot/ipam/factory.py +1 -1
  196. nautobot/ipam/filters.py +2 -3
  197. nautobot/ipam/lookups.py +62 -101
  198. nautobot/ipam/models.py +16 -66
  199. nautobot/ipam/querysets.py +2 -2
  200. nautobot/ipam/tables.py +7 -23
  201. nautobot/ipam/templates/ipam/ipaddress.html +9 -1
  202. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
  203. nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
  204. nautobot/ipam/templates/ipam/prefix.html +9 -1
  205. nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
  206. nautobot/ipam/templates/ipam/vlan.html +9 -1
  207. nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
  208. nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
  209. nautobot/ipam/tests/test_api.py +3 -416
  210. nautobot/ipam/tests/test_forms.py +47 -49
  211. nautobot/ipam/tests/test_migrations.py +30 -30
  212. nautobot/ipam/tests/test_models.py +34 -95
  213. nautobot/ipam/tests/test_querysets.py +1 -63
  214. nautobot/ipam/tests/test_views.py +0 -3
  215. nautobot/ipam/utils/__init__.py +6 -36
  216. nautobot/ipam/views.py +87 -61
  217. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  218. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  219. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +2 -40
  220. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  221. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  222. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  223. nautobot/project-static/docs/404.html +4 -46
  224. nautobot/project-static/docs/apps/index.html +4 -46
  225. nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
  226. nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
  227. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
  228. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
  229. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
  230. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
  231. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
  232. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
  233. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
  234. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
  235. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
  236. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
  237. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
  238. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
  239. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
  240. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
  241. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
  242. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
  243. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
  244. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
  245. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
  246. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
  247. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
  248. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
  249. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
  250. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
  251. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
  252. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
  253. nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
  254. nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
  255. nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
  256. nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
  257. nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
  258. nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
  259. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
  260. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
  261. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
  262. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
  263. nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
  264. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
  265. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
  266. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
  267. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
  268. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
  269. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
  270. nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
  271. nautobot/project-static/docs/development/apps/api/setup.html +4 -46
  272. nautobot/project-static/docs/development/apps/api/testing.html +4 -46
  273. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
  274. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
  275. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
  276. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
  277. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
  278. nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
  279. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
  280. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
  281. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
  282. nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
  283. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
  284. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
  285. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
  286. nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
  287. nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
  288. nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
  289. nautobot/project-static/docs/development/apps/index.html +4 -46
  290. nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
  291. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
  292. nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
  293. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
  294. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
  295. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
  296. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
  297. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
  298. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
  299. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
  300. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
  301. nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
  302. nautobot/project-static/docs/development/core/application-registry.html +4 -46
  303. nautobot/project-static/docs/development/core/best-practices.html +4 -46
  304. nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
  305. nautobot/project-static/docs/development/core/caching.html +4 -46
  306. nautobot/project-static/docs/development/core/controllers.html +4 -46
  307. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
  308. nautobot/project-static/docs/development/core/generic-views.html +4 -46
  309. nautobot/project-static/docs/development/core/getting-started.html +224 -249
  310. nautobot/project-static/docs/development/core/homepage.html +7 -49
  311. nautobot/project-static/docs/development/core/index.html +4 -46
  312. nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
  313. nautobot/project-static/docs/development/core/model-checklist.html +12 -56
  314. nautobot/project-static/docs/development/core/model-features.html +4 -46
  315. nautobot/project-static/docs/development/core/natural-keys.html +4 -46
  316. nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
  317. nautobot/project-static/docs/development/core/release-checklist.html +7 -49
  318. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  319. nautobot/project-static/docs/development/core/settings.html +4 -46
  320. nautobot/project-static/docs/development/core/style-guide.html +7 -49
  321. nautobot/project-static/docs/development/core/templates.html +4 -46
  322. nautobot/project-static/docs/development/core/testing.html +4 -46
  323. nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
  324. nautobot/project-static/docs/development/core/user-preferences.html +4 -46
  325. nautobot/project-static/docs/development/index.html +4 -46
  326. nautobot/project-static/docs/development/jobs/index.html +122 -216
  327. nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
  328. nautobot/project-static/docs/index.html +23 -54
  329. nautobot/project-static/docs/objects.inv +0 -0
  330. nautobot/project-static/docs/overview/application_stack.html +7 -47
  331. nautobot/project-static/docs/overview/design_philosophy.html +4 -46
  332. nautobot/project-static/docs/release-notes/index.html +12 -52
  333. nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
  334. nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
  335. nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
  336. nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
  337. nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
  338. nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
  339. nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
  340. nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
  341. nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
  342. nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
  343. nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
  344. nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
  345. nautobot/project-static/docs/requirements.txt +2 -2
  346. nautobot/project-static/docs/search/search_index.json +1 -1
  347. nautobot/project-static/docs/sitemap.xml +287 -295
  348. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  349. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
  350. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  351. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
  352. nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
  353. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
  354. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
  355. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
  356. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
  357. nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
  358. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
  359. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
  360. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
  361. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
  362. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
  363. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
  364. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
  365. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
  366. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
  367. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
  368. nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
  369. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
  370. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
  371. nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
  372. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
  373. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
  374. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
  375. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
  376. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
  377. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
  378. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
  379. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
  380. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
  381. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
  382. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
  383. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
  384. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
  385. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
  386. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
  387. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
  388. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
  389. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
  390. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
  391. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
  392. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
  393. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
  394. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
  395. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
  396. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
  397. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
  398. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
  399. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
  400. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
  401. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
  402. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
  403. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
  404. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
  405. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
  406. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
  407. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
  408. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
  409. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
  410. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
  411. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
  412. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
  413. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
  414. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
  415. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
  416. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
  417. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
  418. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
  419. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
  420. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
  421. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
  422. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
  423. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
  424. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
  425. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
  426. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
  427. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
  428. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
  429. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
  430. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
  431. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
  432. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
  433. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
  434. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
  435. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
  436. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
  437. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
  439. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
  440. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
  441. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
  442. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
  443. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
  444. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
  445. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
  446. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
  447. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
  448. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
  449. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
  450. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
  451. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
  452. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
  453. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
  454. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
  455. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
  456. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
  457. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
  458. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
  459. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
  460. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
  461. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
  462. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
  463. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
  464. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
  465. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
  466. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
  467. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
  468. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
  469. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
  470. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
  471. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
  472. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
  473. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
  474. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
  475. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
  476. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
  477. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
  478. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
  479. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
  480. nautobot/project-static/docs/user-guide/index.html +4 -46
  481. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
  482. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
  483. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
  484. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
  485. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
  486. nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
  487. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
  488. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
  489. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
  490. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
  491. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
  492. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
  493. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
  494. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
  495. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
  496. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
  497. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
  498. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
  499. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
  500. nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
  501. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
  502. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
  503. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
  504. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
  505. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
  506. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
  507. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
  508. nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
  509. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
  510. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
  511. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
  512. nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
  513. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
  514. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
  515. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
  516. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
  517. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
  518. nautobot/project-static/js/forms.js +1 -1
  519. nautobot/tenancy/api/views.py +13 -9
  520. nautobot/tenancy/views.py +2 -4
  521. nautobot/users/admin.py +1 -1
  522. nautobot/users/api/serializers.py +4 -5
  523. nautobot/users/api/views.py +3 -3
  524. nautobot/virtualization/api/serializers.py +4 -4
  525. nautobot/virtualization/api/views.py +24 -5
  526. nautobot/virtualization/filters.py +3 -20
  527. nautobot/virtualization/models.py +1 -1
  528. nautobot/virtualization/tables.py +2 -2
  529. nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
  530. nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
  531. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
  532. nautobot/virtualization/tests/test_filters.py +0 -17
  533. nautobot/wireless/filters.py +2 -2
  534. nautobot/wireless/forms.py +1 -1
  535. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
  536. nautobot/wireless/tests/test_filters.py +1 -29
  537. nautobot/wireless/views.py +10 -0
  538. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
  539. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
  540. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
  541. nautobot/core/api/constants.py +0 -11
  542. nautobot/core/jobs/bulk_actions.py +0 -248
  543. nautobot/core/templates/about.html +0 -67
  544. nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
  545. nautobot/core/templates/inc/tenant_table_row.html +0 -11
  546. nautobot/core/utils/querysets.py +0 -64
  547. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
  548. nautobot/dcim/tests/integration/test_controller.py +0 -62
  549. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
  550. nautobot/dcim/tests/test_jobs.py +0 -118
  551. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
  552. nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
  553. nautobot/extras/test_jobs/singleton.py +0 -16
  554. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  555. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  556. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  557. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  558. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  559. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  560. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  561. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  562. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  563. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  564. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  565. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  566. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  567. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  568. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  569. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  570. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  571. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  572. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  573. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  574. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  575. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -9444
  587. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
  588. nautobot/wireless/tests/integration/__init__.py +0 -0
  589. nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
  590. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
  591. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
  592. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
@@ -76,21 +76,24 @@ from nautobot.core.forms.widgets import (
76
76
  )
77
77
 
78
78
  __all__ = (
79
+ "add_blank_choice",
80
+ "add_field_to_filter_form_class",
81
+ "AddressFieldMixin",
79
82
  "ALPHANUMERIC_EXPANSION_PATTERN",
80
- "BOOLEAN_CHOICES",
81
- "BOOLEAN_WITH_BLANK_CHOICES",
82
- "IP4_EXPANSION_PATTERN",
83
- "IP6_EXPANSION_PATTERN",
84
- "NUMERIC_EXPANSION_PATTERN",
85
83
  "APISelect",
86
84
  "APISelectMultiple",
87
- "AddressFieldMixin",
88
85
  "AutoPositionField",
89
86
  "AutoPositionPatternField",
87
+ "BOOLEAN_CHOICES",
88
+ "BOOLEAN_WITH_BLANK_CHOICES",
90
89
  "BootstrapMixin",
91
90
  "BulkEditForm",
92
91
  "BulkEditNullBooleanSelect",
93
92
  "BulkRenameForm",
93
+ "ColorSelect",
94
+ "CommentField",
95
+ "ConfirmationForm",
96
+ "ContentTypeSelect",
94
97
  "CSVChoiceField",
95
98
  "CSVContentTypeField",
96
99
  "CSVDataField",
@@ -99,29 +102,34 @@ __all__ = (
99
102
  "CSVModelForm",
100
103
  "CSVMultipleChoiceField",
101
104
  "CSVMultipleContentTypeField",
102
- "ColorSelect",
103
- "CommentField",
104
- "ConfirmationForm",
105
- "ContentTypeSelect",
106
105
  "DatePicker",
107
106
  "DateTimePicker",
108
107
  "DynamicFilterForm",
109
108
  "DynamicModelChoiceField",
110
109
  "DynamicModelMultipleChoiceField",
110
+ "expand_alphanumeric_pattern",
111
+ "expand_ipaddress_pattern",
111
112
  "ExpandableIPAddressField",
112
113
  "ExpandableNameField",
114
+ "form_from_model",
113
115
  "ImportForm",
116
+ "IP4_EXPANSION_PATTERN",
117
+ "IP6_EXPANSION_PATTERN",
114
118
  "JSONArrayFormField",
115
119
  "JSONField",
116
120
  "LaxURLField",
117
121
  "MACAddressField",
118
122
  "MultiMatchModelMultipleChoiceField",
123
+ "MultipleContentTypeField",
119
124
  "MultiValueCharField",
120
125
  "MultiValueCharInput",
121
- "MultipleContentTypeField",
122
126
  "NullableDateField",
127
+ "NUMERIC_EXPANSION_PATTERN",
123
128
  "NumericArrayField",
129
+ "parse_alphanumeric_range",
130
+ "parse_numeric_range",
124
131
  "PrefixFieldMixin",
132
+ "restrict_form_fields",
125
133
  "ReturnURLForm",
126
134
  "SearchForm",
127
135
  "SelectWithDisabled",
@@ -134,12 +142,4 @@ __all__ = (
134
142
  "TableConfigForm",
135
143
  "TagFilterField",
136
144
  "TimePicker",
137
- "add_blank_choice",
138
- "add_field_to_filter_form_class",
139
- "expand_alphanumeric_pattern",
140
- "expand_ipaddress_pattern",
141
- "form_from_model",
142
- "parse_alphanumeric_range",
143
- "parse_numeric_range",
144
- "restrict_form_fields",
145
145
  )
@@ -22,6 +22,7 @@ from nautobot.core.models import validators
22
22
  from nautobot.core.utils import data as data_utils, lookup
23
23
 
24
24
  __all__ = (
25
+ "CommentField",
25
26
  "CSVChoiceField",
26
27
  "CSVContentTypeField",
27
28
  "CSVDataField",
@@ -29,17 +30,16 @@ __all__ = (
29
30
  "CSVModelChoiceField",
30
31
  "CSVMultipleChoiceField",
31
32
  "CSVMultipleContentTypeField",
32
- "CommentField",
33
33
  "DynamicModelChoiceField",
34
34
  "DynamicModelMultipleChoiceField",
35
35
  "ExpandableIPAddressField",
36
36
  "ExpandableNameField",
37
- "JSONArrayFormField",
38
37
  "JSONField",
38
+ "JSONArrayFormField",
39
39
  "LaxURLField",
40
40
  "MACAddressField",
41
- "MultiMatchModelMultipleChoiceField",
42
41
  "MultipleContentTypeField",
42
+ "MultiMatchModelMultipleChoiceField",
43
43
  "NumericArrayField",
44
44
  "SlugField",
45
45
  "TagFilterField",
@@ -102,13 +102,13 @@ class CSVFileField(django_forms.FileField):
102
102
  "in double quotes."
103
103
  )
104
104
 
105
- def to_python(self, data):
105
+ def to_python(self, file):
106
106
  """For parity with CSVDataField, this returns the CSV text rather than an UploadedFile object."""
107
- if data is None:
107
+ if file is None:
108
108
  return None
109
109
 
110
- data = super().to_python(data)
111
- return data.read().decode("utf-8-sig").strip()
110
+ file = super().to_python(file)
111
+ return file.read().decode("utf-8-sig").strip()
112
112
 
113
113
 
114
114
  class CSVChoiceField(django_forms.ChoiceField):
@@ -504,8 +504,6 @@ class DynamicModelChoiceMixin:
504
504
  ):
505
505
  self.display_field = display_field
506
506
  self.query_params = query_params or {}
507
- # Default to "exclude_m2m=true" for improved performance, if not otherwise specified
508
- self.query_params.setdefault("exclude_m2m", "true")
509
507
  self.initial_params = initial_params or {}
510
508
  self.null_option = null_option
511
509
  self.disabled_indicator = disabled_indicator
@@ -538,10 +536,9 @@ class DynamicModelChoiceMixin:
538
536
  # Toggle depth
539
537
  attrs["data-depth"] = self.depth
540
538
 
541
- # Attach any static query parameters if supported
542
- if isinstance(widget, widgets.APISelect) or hasattr(widget, "add_query_param"):
543
- for key, value in self.query_params.items():
544
- widget.add_query_param(key, value)
539
+ # Attach any static query parameters
540
+ for key, value in self.query_params.items():
541
+ widget.add_query_param(key, value)
545
542
 
546
543
  return attrs
547
544
 
@@ -822,7 +819,7 @@ class MultiMatchModelMultipleChoiceField(DynamicModelChoiceMixin, django_filters
822
819
  self.natural_key = kwargs.setdefault("to_field_name", "slug")
823
820
  super().__init__(*args, **kwargs)
824
821
 
825
- def _check_values(self, values): # pylint:disable=arguments-renamed
822
+ def _check_values(self, values):
826
823
  """
827
824
  This method overloads the grandparent method in `django.forms.models.ModelMultipleChoiceField`,
828
825
  re-using some of that method's existing logic and adding support for coupling this field with
@@ -1,11 +1,8 @@
1
- import contextlib
2
1
  import json
3
2
  import logging
4
3
  import re
5
4
 
6
5
  from django import forms
7
- from django.core.exceptions import FieldDoesNotExist
8
- from django.db.models.fields.related import ManyToManyField
9
6
  from django.forms import formset_factory
10
7
  from django.urls import reverse
11
8
  import yaml
@@ -18,8 +15,8 @@ __all__ = (
18
15
  "BootstrapMixin",
19
16
  "BulkEditForm",
20
17
  "BulkRenameForm",
21
- "CSVModelForm",
22
18
  "ConfirmationForm",
19
+ "CSVModelForm",
23
20
  "DynamicFilterForm",
24
21
  "ImportForm",
25
22
  "PrefixFieldMixin",
@@ -127,35 +124,7 @@ class BulkEditForm(forms.Form):
127
124
 
128
125
  if edit_all:
129
126
  self.fields["pk"].required = False
130
- self.fields["_all"] = forms.BooleanField(widget=forms.HiddenInput(), required=False, initial=True)
131
-
132
- def _save_m2m_fields(self, obj):
133
- """Save M2M fields"""
134
- from nautobot.core.models.fields import TagsField # Avoid circular dependency
135
-
136
- m2m_field_names = []
137
- # Handle M2M Save
138
- for key in self.cleaned_data.keys():
139
- if key.startswith(("add_", "remove_")):
140
- field_name = key.lstrip("add_")
141
- if field_name in m2m_field_names:
142
- continue
143
- with contextlib.suppress(FieldDoesNotExist):
144
- field = obj._meta.get_field(field_name)
145
- is_m2m_field = isinstance(field, (ManyToManyField, TagsField))
146
- if is_m2m_field:
147
- m2m_field_names.append(field_name)
148
-
149
- for field_name in m2m_field_names:
150
- m2m_field = getattr(obj, field_name)
151
- if self.cleaned_data.get(f"add_{field_name}", None):
152
- m2m_field.add(*self.cleaned_data[f"add_{field_name}"])
153
- if self.cleaned_data.get(f"remove_{field_name}", None):
154
- m2m_field.remove(*self.cleaned_data[f"remove_{field_name}"])
155
-
156
- def post_save(self, obj):
157
- """Post save action"""
158
- self._save_m2m_fields(obj)
127
+ self.fields["_all"] = forms.BooleanField(widget=forms.HiddenInput(), required=True, initial=True)
159
128
 
160
129
 
161
130
  class BulkRenameForm(forms.Form):
@@ -10,7 +10,7 @@ class OptimizedNautobotObjectType(gql_optimizer.OptimizedDjangoObjectType):
10
10
  url = graphene.String()
11
11
 
12
12
  def resolve_url(self, info):
13
- return self.get_absolute_url(api=True) # pylint: disable=no-member
13
+ return self.get_absolute_url(api=True)
14
14
 
15
15
  class Meta:
16
16
  abstract = True
@@ -4,9 +4,7 @@ from io import BytesIO
4
4
 
5
5
  from django.conf import settings
6
6
  from django.contrib.contenttypes.models import ContentType
7
- from django.core.exceptions import (
8
- PermissionDenied,
9
- )
7
+ from django.core.exceptions import PermissionDenied
10
8
  from django.db import transaction
11
9
  from django.http import QueryDict
12
10
  from rest_framework import exceptions as drf_exceptions
@@ -17,7 +15,6 @@ from nautobot.core.api.renderers import NautobotCSVRenderer
17
15
  from nautobot.core.api.utils import get_serializer_for_model
18
16
  from nautobot.core.celery import app, register_jobs
19
17
  from nautobot.core.exceptions import AbortTransaction
20
- from nautobot.core.jobs.bulk_actions import BulkDeleteObjects, BulkEditObjects
21
18
  from nautobot.core.jobs.cleanup import LogsCleanup
22
19
  from nautobot.core.jobs.groups import RefreshDynamicGroupCaches
23
20
  from nautobot.core.utils.lookup import get_filterset_for_model
@@ -28,16 +25,7 @@ from nautobot.extras.datasources import (
28
25
  refresh_datasource_content,
29
26
  refresh_job_code_from_repository,
30
27
  )
31
- from nautobot.extras.jobs import (
32
- BooleanVar,
33
- ChoiceVar,
34
- FileVar,
35
- Job,
36
- ObjectVar,
37
- RunJobTaskFailed,
38
- StringVar,
39
- TextVar,
40
- )
28
+ from nautobot.extras.jobs import BooleanVar, ChoiceVar, FileVar, Job, ObjectVar, RunJobTaskFailed, StringVar, TextVar
41
29
  from nautobot.extras.models import ExportTemplate, GitRepository
42
30
 
43
31
  name = "System Jobs"
@@ -59,7 +47,7 @@ class GitRepositorySync(Job):
59
47
  description = "Clone and/or pull a Git repository, then refresh data sourced from this repository."
60
48
  has_sensitive_variables = False
61
49
 
62
- def run(self, repository): # pylint:disable=arguments-differ
50
+ def run(self, repository):
63
51
  job_result = self.job_result
64
52
  user = job_result.user
65
53
 
@@ -100,7 +88,7 @@ class GitRepositoryDryRun(Job):
100
88
  description = "Dry run of Git repository sync - will not update data sourced from this repository."
101
89
  has_sensitive_variables = False
102
90
 
103
- def run(self, repository): # pylint:disable=arguments-differ
91
+ def run(self, repository):
104
92
  job_result = self.job_result
105
93
  self.logger.info(f'Performing a Dry Run on Git repository "{repository.name}"...')
106
94
 
@@ -150,7 +138,7 @@ class ExportObjectList(Job):
150
138
  soft_time_limit = 1800
151
139
  time_limit = 2000
152
140
 
153
- def run(self, *, content_type, query_string="", export_format="csv", export_template=None): # pylint:disable=arguments-differ
141
+ def run(self, *, content_type, query_string="", export_format="csv", export_template=None):
154
142
  if not self.user.has_perm(f"{content_type.app_label}.view_{content_type.model}"):
155
143
  self.logger.error('User "%s" does not have permission to view %s objects', self.user, content_type.model)
156
144
  raise PermissionDenied("User does not have view permissions on the requested content-type")
@@ -298,7 +286,7 @@ class ImportObjects(Job):
298
286
  self.logger.error("Row %d: `%s`: `%s`", row, field, err[0])
299
287
  return new_objs, validation_failed
300
288
 
301
- def run(self, *, content_type, csv_data=None, csv_file=None, roll_back_if_error=False): # pylint:disable=arguments-differ
289
+ def run(self, *, content_type, csv_data=None, csv_file=None, roll_back_if_error=False):
302
290
  if not self.user.has_perm(f"{content_type.app_label}.add_{content_type.model}"):
303
291
  self.logger.error('User "%s" does not have permission to create %s objects', self.user, content_type.model)
304
292
  raise PermissionDenied("User does not have create permissions on the requested content-type")
@@ -359,14 +347,5 @@ class ImportObjects(Job):
359
347
  raise RunJobTaskFailed("CSV import not fully successful, see logs")
360
348
 
361
349
 
362
- jobs = [
363
- BulkDeleteObjects,
364
- BulkEditObjects,
365
- ExportObjectList,
366
- GitRepositorySync,
367
- GitRepositoryDryRun,
368
- ImportObjects,
369
- LogsCleanup,
370
- RefreshDynamicGroupCaches,
371
- ]
350
+ jobs = [ExportObjectList, GitRepositorySync, GitRepositoryDryRun, ImportObjects, LogsCleanup, RefreshDynamicGroupCaches]
372
351
  register_jobs(*jobs)
@@ -1,7 +1,6 @@
1
1
  from datetime import timedelta
2
2
 
3
3
  from django.core.exceptions import PermissionDenied
4
- from django.db.models import CASCADE
5
4
  from django.db.models.signals import pre_delete
6
5
  from django.utils import timezone
7
6
 
@@ -49,28 +48,7 @@ class LogsCleanup(Job):
49
48
  description = "Delete ObjectChange and/or JobResult/JobLogEntry records older than a specified cutoff."
50
49
  has_sensitive_variables = False
51
50
 
52
- def recursive_delete_with_cascade(self, queryset, deletion_summary):
53
- """
54
- Recursively deletes all related objects with CASCADE for a given queryset.
55
-
56
- Args:
57
- queryset (QuerySet): The queryset of objects to delete.
58
- deletion_summary (dict): A dictionary to store the count of deleted objects for each model.
59
- """
60
- related_objects = queryset.model._meta.related_objects
61
- queryset = queryset.only("id")
62
-
63
- for related_object in related_objects:
64
- if related_object.on_delete is CASCADE:
65
- related_model = related_object.related_model
66
- related_field_name = related_object.field.name
67
- cascade_queryset = related_model.objects.filter(**{f"{related_field_name}__id__in": queryset})
68
- self.recursive_delete_with_cascade(cascade_queryset, deletion_summary)
69
- _, deleted_dict = queryset.delete()
70
- deletion_summary.update(deleted_dict)
71
- return deletion_summary
72
-
73
- def run(self, *, cleanup_types, max_age=None): # pylint: disable=arguments-differ
51
+ def run(self, *, cleanup_types, max_age=None):
74
52
  if max_age in (None, ""):
75
53
  max_age = get_settings_or_config("CHANGELOG_RETENTION", fallback=90)
76
54
  if max_age == 0:
@@ -99,36 +77,22 @@ class LogsCleanup(Job):
99
77
 
100
78
  if CleanupTypes.JOB_RESULT in cleanup_types:
101
79
  self.logger.info("Deleting JobResult records prior to %s", cutoff)
102
- queryset = JobResult.objects.restrict(self.user, "delete").filter(date_done__lt=cutoff)
103
- deletion_summary = {}
104
- self.recursive_delete_with_cascade(queryset, deletion_summary)
80
+ _, deleted_dict = JobResult.objects.restrict(self.user, "delete").filter(date_done__lt=cutoff).delete()
105
81
  result.setdefault("extras.JobResult", 0)
106
82
  result.setdefault("extras.JobLogEntry", 0)
107
- result.update(deletion_summary)
108
-
109
- for modelname, count in deletion_summary.items():
110
- self.logger.info(
111
- "As part of deleting %d JobResult records, also deleted %d related %s records",
112
- result["extras.JobResult"],
113
- count,
114
- modelname,
115
- )
83
+ result.update(**deleted_dict)
84
+ self.logger.info(
85
+ "Deleted %d JobResult records and their associated %d JobLogEntry records",
86
+ result["extras.JobResult"],
87
+ result["extras.JobLogEntry"],
88
+ )
116
89
 
117
90
  if CleanupTypes.OBJECT_CHANGE in cleanup_types:
118
91
  self.logger.info("Deleting ObjectChange records prior to %s", cutoff)
119
- queryset = ObjectChange.objects.restrict(self.user, "delete").filter(time__lt=cutoff)
120
- deletion_summary = {}
121
- self.recursive_delete_with_cascade(queryset, deletion_summary)
122
- result.setdefault("extras.ObjectChange", 0)
123
- result.update(deletion_summary)
124
-
125
- for modelname, count in deletion_summary.items():
126
- self.logger.info(
127
- "As part of deleting %d ObjectChange records, also deleted %d related %s records",
128
- result["extras.ObjectChange"],
129
- count,
130
- modelname,
131
- )
92
+ deleted_count, _ = ObjectChange.objects.restrict(self.user, "delete").filter(time__lt=cutoff).delete()
93
+ self.logger.info("Deleted %d ObjectChange records", deleted_count)
94
+ result["extras.ObjectChange"] = deleted_count
95
+
132
96
  return result
133
97
  finally:
134
98
  # Be sure to clean up after ourselves!
@@ -24,7 +24,7 @@ class RefreshDynamicGroupCaches(Job):
24
24
  description = "Re-calculate and re-cache the membership lists of Dynamic Groups."
25
25
  has_sensitive_variables = False
26
26
 
27
- def run(self, single_group=None): # pylint: disable=arguments-differ
27
+ def run(self, single_group=None):
28
28
  groups = DynamicGroup.objects.restrict(self.user, "view").exclude(
29
29
  group_type=DynamicGroupTypeChoices.TYPE_STATIC
30
30
  )
@@ -63,7 +63,7 @@ class Command(BaseCommand):
63
63
  for model in models:
64
64
  model_name = f"{model._meta.app_label}.{model.__name__}"
65
65
  # Most swap out for user_model
66
- if model_name == "auth.User": # pylint: disable=hard-coded-auth-user
66
+ if model_name == "auth.User":
67
67
  model = get_user_model()
68
68
  # Skip models that aren't actually in the database
69
69
  if not model._meta.managed:
@@ -270,7 +270,7 @@ class BaseModel(models.Model):
270
270
 
271
271
  if not natural_key_field_names:
272
272
  raise AttributeError(
273
- f"Unable to identify an intrinsic natural-key definition for {cls.__name__}. " # pylint: disable=no-member
273
+ f"Unable to identify an intrinsic natural-key definition for {cls.__name__}. "
274
274
  "If there isn't at least one UniqueConstraint, unique_together, or field with unique=True, "
275
275
  "you probably need to explicitly declare the 'natural_key_field_names' for this model, "
276
276
  "or potentially override the default 'natural_key_field_lookups' implementation for this model."
@@ -69,7 +69,7 @@ class JSONSet(Func):
69
69
  }
70
70
  return c
71
71
 
72
- def as_sql(self, compiler, connection, function=None, **extra_context): # pylint:disable=arguments-differ
72
+ def as_sql(self, compiler, connection, function=None, **extra_context):
73
73
  """
74
74
  MySQL implementation based on https://github.com/django/django/pull/18489/files.
75
75
 
@@ -138,7 +138,7 @@ class JSONRemove(Func):
138
138
  self.path = path
139
139
  super().__init__(expression)
140
140
 
141
- def as_sql(self, compiler, connection, function=None, **extra_context): # pylint:disable=arguments-differ
141
+ def as_sql(self, compiler, connection, function=None, **extra_context):
142
142
  """
143
143
  MySQL implementation based on https://github.com/django/django/pull/18489/files.
144
144
 
@@ -111,15 +111,12 @@ class TreeModel(TreeNode):
111
111
  if display_str:
112
112
  return display_str
113
113
  try:
114
- if self.parent_id is not None:
115
- parent_display_str = cache.get(cache_key.replace(str(self.id), str(self.parent_id)), "")
116
- if not parent_display_str:
117
- parent_display_str = self.parent.display # pylint: disable=no-member
118
- display_str = parent_display_str + " → "
114
+ if self.parent is not None:
115
+ display_str = self.parent.display + ""
119
116
  except self.DoesNotExist:
120
117
  # Expected to occur at times during bulk-delete operations
121
118
  pass
122
- display_str += self.name # pylint: disable=no-member # we checked with hasattr() above
119
+ display_str += self.name
123
120
  cache.set(cache_key, display_str, 5)
124
121
  return display_str
125
122
 
nautobot/core/settings.py CHANGED
@@ -1,4 +1,3 @@
1
- import datetime
2
1
  import os
3
2
  import os.path
4
3
  import platform
@@ -164,16 +163,6 @@ NAPALM_PASSWORD = os.getenv("NAUTOBOT_NAPALM_PASSWORD", "")
164
163
  NAPALM_TIMEOUT = int(os.getenv("NAUTOBOT_NAPALM_TIMEOUT", "30"))
165
164
  NAPALM_USERNAME = os.getenv("NAUTOBOT_NAPALM_USERNAME", "")
166
165
 
167
- # Expiration date (YYYY-MM-DD) for an active Nautobot support contract with Network to Code.
168
- # Displayed in the About page.
169
- if (
170
- "NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE" in os.environ
171
- and os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"] != ""
172
- ):
173
- NTC_SUPPORT_CONTRACT_EXPIRATION_DATE = datetime.date.fromisoformat(
174
- os.environ["NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"]
175
- )
176
-
177
166
  # Default number of objects to display per page of the UI and REST API. Default is 50
178
167
  if "NAUTOBOT_PAGINATE_COUNT" in os.environ and os.environ["NAUTOBOT_PAGINATE_COUNT"] != "":
179
168
  PAGINATE_COUNT = int(os.environ["NAUTOBOT_PAGINATE_COUNT"])
@@ -191,9 +180,6 @@ PLUGINS_CONFIG = {}
191
180
  if "NAUTOBOT_PREFER_IPV4" in os.environ and os.environ["NAUTOBOT_PREFER_IPV4"] != "":
192
181
  PREFER_IPV4 = is_truthy(os.environ["NAUTOBOT_PREFER_IPV4"])
193
182
 
194
- # Publish a simple "no-index" robots.txt for Nautobot?
195
- PUBLISH_ROBOTS_TXT = is_truthy(os.getenv("NAUTOBOT_PUBLISH_ROBOTS_TXT", "True"))
196
-
197
183
  # Default height and width in pixels of a single rack unit in rendered rack elevations. Defaults are 22 and 220
198
184
  if (
199
185
  "NAUTOBOT_RACK_ELEVATION_DEFAULT_UNIT_HEIGHT" in os.environ
@@ -246,7 +232,7 @@ if SSO_ENABLE_GROUP_SYNC:
246
232
  "social_core.pipeline.social_auth.associate_user",
247
233
  "social_core.pipeline.social_auth.load_extra_data",
248
234
  "social_core.pipeline.user.user_details",
249
- "nautobot.extras.group_sync.group_sync",
235
+ "nautobot.extras.group_sync",
250
236
  )
251
237
  # OAuth2/OIDC claim where the list of groups the authenticating user is a part of
252
238
  SSO_CLAIMS_GROUP = os.getenv("NAUTOBOT_SSO_CLAIMS_GROUP", "groups")
@@ -732,13 +718,6 @@ CONSTANCE_ADDITIONAL_FIELDS = {
732
718
  "required": False,
733
719
  },
734
720
  ],
735
- "optional_date_field": [
736
- "django.forms.DateField",
737
- {
738
- "widget": "nautobot.core.forms.widgets.DatePicker",
739
- "required": False,
740
- },
741
- ],
742
721
  }
743
722
 
744
723
  CONSTANCE_CONFIG = {
@@ -824,12 +803,6 @@ CONSTANCE_CONFIG = {
824
803
  # Use custom field type defined above
825
804
  field_type="optional_json_field",
826
805
  ),
827
- "NTC_SUPPORT_CONTRACT_EXPIRATION_DATE": ConstanceConfigItem(
828
- default="",
829
- help_text="Expiration date for an active Nautobot support contract with Network to Code. "
830
- "This value is displayed in the About page to provide additional support information.",
831
- field_type="optional_date_field",
832
- ),
833
806
  "PREFER_IPV4": ConstanceConfigItem(
834
807
  default=False,
835
808
  help_text="Whether to prefer IPv4 primary addresses over IPv6 primary addresses for devices.",
@@ -883,7 +856,7 @@ CONSTANCE_CONFIG_FIELDSETS = {
883
856
  "RACK_ELEVATION_UNIT_TWO_DIGIT_FORMAT",
884
857
  ],
885
858
  "Release Checking": ["RELEASE_CHECK_URL", "RELEASE_CHECK_TIMEOUT"],
886
- "User Interface": ["SUPPORT_MESSAGE", "NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"],
859
+ "User Interface": ["SUPPORT_MESSAGE"],
887
860
  "Debugging": ["ALLOW_REQUEST_PROFILING"],
888
861
  }
889
862
 
@@ -6,8 +6,6 @@ definitions:
6
6
  type: "string"
7
7
  callable:
8
8
  type: "string"
9
- date:
10
- type: "string"
11
9
  regex:
12
10
  type: "string"
13
11
  relative_path:
@@ -1493,17 +1491,6 @@ properties:
1493
1491
  is_constance_config: true
1494
1492
  type: "object"
1495
1493
  version_added: "1.6.0"
1496
- NTC_SUPPORT_CONTRACT_EXPIRATION_DATE:
1497
- "$ref": "#/definitions/date"
1498
- default: ""
1499
- description: >-
1500
- Expiration date for an active Nautobot support contract with Network to Code.
1501
- This value is displayed in the "About" page to provide additional support information.
1502
- details: >-
1503
- If specified as an environment variable, use ISO 8601 (`YYYY-MM-DD`) format.
1504
- environment_variable: "NAUTOBOT_NTC_SUPPORT_CONTRACT_EXPIRATION_DATE"
1505
- is_constance_config: true
1506
- version_added: "2.4.0"
1507
1494
  PAGINATE_COUNT:
1508
1495
  default: 50
1509
1496
  description: >-
@@ -1572,14 +1559,6 @@ properties:
1572
1559
  environment_variable: "NAUTOBOT_PREFER_IPV4"
1573
1560
  is_constance_config: true
1574
1561
  type: "boolean"
1575
- PUBLISH_ROBOTS_TXT:
1576
- default: true
1577
- description: >-
1578
- Setting this to true causes Nautobot to publish a `robots.txt` that discourages indexing by web crawlers.
1579
- Irrelevant if deployed behind a firewall.
1580
- environment_variable: "NAUTOBOT_PUBLISH_ROBOTS_TXT"
1581
- type: "boolean"
1582
- version_added: "2.3.15"
1583
1562
  RACK_ELEVATION_DEFAULT_UNIT_HEIGHT:
1584
1563
  default: 22
1585
1564
  description: >-