nautobot 2.4.4__py3-none-any.whl → 2.4.6__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 (139) hide show
  1. nautobot/__init__.py +19 -3
  2. nautobot/core/api/mixins.py +10 -0
  3. nautobot/core/celery/__init__.py +5 -3
  4. nautobot/core/celery/encoders.py +2 -2
  5. nautobot/core/forms/fields.py +21 -5
  6. nautobot/core/forms/utils.py +1 -0
  7. nautobot/core/jobs/__init__.py +3 -2
  8. nautobot/core/jobs/bulk_actions.py +1 -1
  9. nautobot/core/management/commands/generate_test_data.py +1 -1
  10. nautobot/core/models/name_color_content_types.py +9 -0
  11. nautobot/core/models/validators.py +7 -0
  12. nautobot/core/settings.py +0 -14
  13. nautobot/core/settings.yaml +0 -28
  14. nautobot/core/tables.py +6 -1
  15. nautobot/core/templates/generic/object_retrieve.html +1 -1
  16. nautobot/core/testing/__init__.py +2 -0
  17. nautobot/core/testing/api.py +18 -0
  18. nautobot/core/testing/mixins.py +9 -0
  19. nautobot/core/tests/nautobot_config.py +0 -2
  20. nautobot/core/tests/runner.py +17 -140
  21. nautobot/core/tests/test_api.py +4 -4
  22. nautobot/core/tests/test_authentication.py +83 -4
  23. nautobot/core/tests/test_forms.py +11 -8
  24. nautobot/core/tests/test_graphql.py +9 -0
  25. nautobot/core/tests/test_jobs.py +33 -27
  26. nautobot/core/ui/object_detail.py +31 -0
  27. nautobot/dcim/factory.py +2 -0
  28. nautobot/dcim/filters/__init__.py +5 -0
  29. nautobot/dcim/forms.py +17 -1
  30. nautobot/dcim/migrations/0068_alter_softwareimagefile_download_url.py +19 -0
  31. nautobot/dcim/migrations/0069_softwareimagefile_external_integration.py +25 -0
  32. nautobot/dcim/models/devices.py +9 -2
  33. nautobot/dcim/tables/devices.py +1 -0
  34. nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +4 -0
  35. nautobot/dcim/tests/test_api.py +74 -31
  36. nautobot/dcim/tests/test_filters.py +2 -0
  37. nautobot/dcim/tests/test_jobs.py +4 -6
  38. nautobot/dcim/tests/test_models.py +65 -0
  39. nautobot/dcim/tests/test_views.py +3 -0
  40. nautobot/extras/choices.py +8 -3
  41. nautobot/extras/forms/forms.py +7 -3
  42. nautobot/extras/jobs.py +181 -103
  43. nautobot/extras/management/utils.py +13 -2
  44. nautobot/extras/models/datasources.py +4 -1
  45. nautobot/extras/models/jobs.py +20 -17
  46. nautobot/extras/plugins/marketplace_manifest.yml +18 -0
  47. nautobot/extras/tables.py +29 -34
  48. nautobot/extras/templates/extras/inc/panel_changelog.html +1 -1
  49. nautobot/extras/templates/extras/inc/panel_jobhistory.html +1 -1
  50. nautobot/extras/templates/extras/status.html +1 -37
  51. nautobot/extras/test_jobs/atomic_transaction.py +6 -6
  52. nautobot/extras/test_jobs/fail.py +75 -1
  53. nautobot/extras/tests/integration/test_notes.py +1 -1
  54. nautobot/extras/tests/test_api.py +23 -8
  55. nautobot/extras/tests/test_changelog.py +4 -4
  56. nautobot/extras/tests/test_customfields.py +3 -0
  57. nautobot/extras/tests/test_datasources.py +64 -54
  58. nautobot/extras/tests/test_jobs.py +69 -62
  59. nautobot/extras/tests/test_models.py +1 -1
  60. nautobot/extras/tests/test_plugins.py +19 -13
  61. nautobot/extras/tests/test_relationships.py +14 -5
  62. nautobot/extras/tests/test_tags.py +2 -2
  63. nautobot/extras/tests/test_views.py +15 -6
  64. nautobot/extras/urls.py +1 -30
  65. nautobot/extras/views.py +17 -55
  66. nautobot/ipam/forms.py +15 -0
  67. nautobot/ipam/querysets.py +6 -0
  68. nautobot/ipam/tables.py +6 -2
  69. nautobot/ipam/templates/ipam/namespace_retrieve.html +0 -41
  70. nautobot/ipam/templates/ipam/rir.html +1 -43
  71. nautobot/ipam/templates/ipam/service.html +2 -46
  72. nautobot/ipam/templates/ipam/service_edit.html +1 -17
  73. nautobot/ipam/templates/ipam/service_retrieve.html +7 -0
  74. nautobot/ipam/tests/migration/__init__.py +0 -0
  75. nautobot/ipam/tests/migration/test_migrations.py +510 -0
  76. nautobot/ipam/tests/test_api.py +66 -36
  77. nautobot/ipam/tests/test_filters.py +0 -10
  78. nautobot/ipam/tests/test_models.py +16 -0
  79. nautobot/ipam/tests/test_views.py +44 -2
  80. nautobot/ipam/urls.py +2 -67
  81. nautobot/ipam/utils/migrations.py +185 -152
  82. nautobot/ipam/utils/testing.py +177 -0
  83. nautobot/ipam/views.py +119 -198
  84. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +43 -5
  85. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +47 -0
  86. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +18 -0
  87. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +35 -0
  88. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +63 -0
  89. nautobot/project-static/docs/development/apps/api/testing.html +0 -87
  90. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +1 -1
  91. nautobot/project-static/docs/development/core/best-practices.html +3 -3
  92. nautobot/project-static/docs/development/core/getting-started.html +78 -107
  93. nautobot/project-static/docs/development/core/release-checklist.html +1 -1
  94. nautobot/project-static/docs/development/core/style-guide.html +1 -1
  95. nautobot/project-static/docs/development/core/testing.html +24 -198
  96. nautobot/project-static/docs/development/jobs/index.html +27 -14
  97. nautobot/project-static/docs/media/user-guide/administration/getting-started/nautobot-cloud.png +0 -0
  98. nautobot/project-static/docs/objects.inv +0 -0
  99. nautobot/project-static/docs/overview/application_stack.html +1 -1
  100. nautobot/project-static/docs/release-notes/version-2.4.html +409 -1
  101. nautobot/project-static/docs/requirements.txt +1 -1
  102. nautobot/project-static/docs/search/search_index.json +1 -1
  103. nautobot/project-static/docs/sitemap.xml +290 -290
  104. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  105. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +2 -48
  106. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +71 -0
  107. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +3 -1
  108. nautobot/project-static/docs/user-guide/administration/installation/index.html +257 -16
  109. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +1 -1
  110. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +2 -2
  111. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -0
  112. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +11 -11
  113. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +8 -8
  114. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +1 -0
  115. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +40 -25
  116. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -4
  117. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +1 -1
  118. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +77 -5
  119. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +1 -1
  120. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +0 -1
  121. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +1 -1
  122. nautobot/project-static/docs/user-guide/index.html +89 -2
  123. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +207 -122
  124. nautobot/virtualization/forms.py +20 -0
  125. nautobot/virtualization/templates/virtualization/clustergroup.html +1 -39
  126. nautobot/virtualization/templates/virtualization/clustertype.html +1 -0
  127. nautobot/virtualization/tests/test_api.py +14 -3
  128. nautobot/virtualization/tests/test_views.py +10 -2
  129. nautobot/virtualization/urls.py +10 -93
  130. nautobot/virtualization/views.py +33 -72
  131. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/METADATA +8 -7
  132. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/RECORD +137 -132
  133. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/WHEEL +1 -1
  134. nautobot/core/tests/performance_baselines.yml +0 -8900
  135. nautobot/ipam/tests/test_migrations.py +0 -462
  136. /nautobot/ipam/templates/ipam/{namespace_ipaddresses.html → namespace_ip_addresses.html} +0 -0
  137. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/LICENSE.txt +0 -0
  138. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/NOTICE +0 -0
  139. {nautobot-2.4.4.dist-info → nautobot-2.4.6.dist-info}/entry_points.txt +0 -0
@@ -7904,6 +7904,21 @@
7904
7904
  </span>
7905
7905
  </a>
7906
7906
 
7907
+ <nav class="md-nav" aria-label="EnhancedURLValidator">
7908
+ <ul class="md-nav__list">
7909
+
7910
+ <li class="md-nav__item">
7911
+ <a href="#nautobot.apps.models.EnhancedURLValidator.__getattribute__" class="md-nav__link">
7912
+ <span class="md-ellipsis">
7913
+ __getattribute__
7914
+ </span>
7915
+ </a>
7916
+
7917
+ </li>
7918
+
7919
+ </ul>
7920
+ </nav>
7921
+
7907
7922
  </li>
7908
7923
 
7909
7924
  <li class="md-nav__item">
@@ -10981,6 +10996,21 @@
10981
10996
  </span>
10982
10997
  </a>
10983
10998
 
10999
+ <nav class="md-nav" aria-label="EnhancedURLValidator">
11000
+ <ul class="md-nav__list">
11001
+
11002
+ <li class="md-nav__item">
11003
+ <a href="#nautobot.apps.models.EnhancedURLValidator.__getattribute__" class="md-nav__link">
11004
+ <span class="md-ellipsis">
11005
+ __getattribute__
11006
+ </span>
11007
+ </a>
11008
+
11009
+ </li>
11010
+
11011
+ </ul>
11012
+ </nav>
11013
+
10984
11014
  </li>
10985
11015
 
10986
11016
  <li class="md-nav__item">
@@ -13342,6 +13372,23 @@ schemes specified in the configuration.</p>
13342
13372
 
13343
13373
 
13344
13374
 
13375
+ <div class="doc doc-object doc-function">
13376
+
13377
+
13378
+ <h3 id="nautobot.apps.models.EnhancedURLValidator.__getattribute__" class="doc doc-heading">
13379
+ <code class="highlight language-python"><span class="fm">__getattribute__</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
13380
+
13381
+ <a href="#nautobot.apps.models.EnhancedURLValidator.__getattribute__" class="headerlink" title="Permanent link">&para;</a></h3>
13382
+
13383
+
13384
+ <div class="doc doc-contents ">
13385
+
13386
+ <p>Dynamically fetch schemes each time it's accessed.</p>
13387
+
13388
+ </div>
13389
+
13390
+ </div>
13391
+
13345
13392
 
13346
13393
 
13347
13394
  </div>
@@ -10323,6 +10323,24 @@ If not specified, the first key in <code>url_params</code> will be implicitly us
10323
10323
  <code>False</code>
10324
10324
  </td>
10325
10325
  </tr>
10326
+ <tr class="doc-section-item">
10327
+ <td>
10328
+ <code>display_field</code>
10329
+ </td>
10330
+ <td>
10331
+ <code>str</code>
10332
+ </td>
10333
+ <td>
10334
+ <div class="doc-md-description">
10335
+ <p>Name of the field to use when displaying an object rather than just a count.
10336
+ This will be passed to hyperlinked_object() as the <code>field</code> parameter
10337
+ If not specified, it will use the "display" field.</p>
10338
+ </div>
10339
+ </td>
10340
+ <td>
10341
+ <code>&#39;display&#39;</code>
10342
+ </td>
10343
+ </tr>
10326
10344
  <tr class="doc-section-item">
10327
10345
  <td>
10328
10346
  <code>**kwargs</code>
@@ -8238,6 +8238,15 @@
8238
8238
  </span>
8239
8239
  </a>
8240
8240
 
8241
+ </li>
8242
+
8243
+ <li class="md-nav__item">
8244
+ <a href="#nautobot.apps.testing.NautobotTestCaseMixin.assertJobResultStatus" class="md-nav__link">
8245
+ <span class="md-ellipsis">
8246
+ assertJobResultStatus
8247
+ </span>
8248
+ </a>
8249
+
8241
8250
  </li>
8242
8251
 
8243
8252
  <li class="md-nav__item">
@@ -11423,6 +11432,15 @@
11423
11432
  </span>
11424
11433
  </a>
11425
11434
 
11435
+ </li>
11436
+
11437
+ <li class="md-nav__item">
11438
+ <a href="#nautobot.apps.testing.NautobotTestCaseMixin.assertJobResultStatus" class="md-nav__link">
11439
+ <span class="md-ellipsis">
11440
+ assertJobResultStatus
11441
+ </span>
11442
+ </a>
11443
+
11426
11444
  </li>
11427
11445
 
11428
11446
  <li class="md-nav__item">
@@ -14322,6 +14340,23 @@ in the dictionary.</p>
14322
14340
  <div class="doc doc-object doc-function">
14323
14341
 
14324
14342
 
14343
+ <h3 id="nautobot.apps.testing.NautobotTestCaseMixin.assertJobResultStatus" class="doc doc-heading">
14344
+ <code class="highlight language-python"><span class="n">assertJobResultStatus</span><span class="p">(</span><span class="n">job_result</span><span class="p">,</span> <span class="n">expected_status</span><span class="o">=</span><span class="n">JobResultStatusChoices</span><span class="o">.</span><span class="n">STATUS_SUCCESS</span><span class="p">)</span></code>
14345
+
14346
+ <a href="#nautobot.apps.testing.NautobotTestCaseMixin.assertJobResultStatus" class="headerlink" title="Permanent link">&para;</a></h3>
14347
+
14348
+
14349
+ <div class="doc doc-contents ">
14350
+
14351
+ <p>Assert that the given job_result has the expected_status, or print the job logs to aid in debugging.</p>
14352
+
14353
+ </div>
14354
+
14355
+ </div>
14356
+
14357
+ <div class="doc doc-object doc-function">
14358
+
14359
+
14325
14360
  <h3 id="nautobot.apps.testing.NautobotTestCaseMixin.assertQuerysetEqualAndNotEmpty" class="doc doc-heading">
14326
14361
  <code class="highlight language-python"><span class="n">assertQuerysetEqualAndNotEmpty</span><span class="p">(</span><span class="n">qs</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
14327
14362
 
@@ -12583,6 +12583,69 @@ Mutually exclusive with <code>column_headers</code>.</p>
12583
12583
  <p>A Tab that doesn't render inline on the same page, but instead links to a distinct view of its own when clicked.</p>
12584
12584
 
12585
12585
 
12586
+ <p><span class="doc-section-title">Parameters:</span></p>
12587
+ <table>
12588
+ <thead>
12589
+ <tr>
12590
+ <th>Name</th>
12591
+ <th>Type</th>
12592
+ <th>Description</th>
12593
+ <th>Default</th>
12594
+ </tr>
12595
+ </thead>
12596
+ <tbody>
12597
+ <tr class="doc-section-item">
12598
+ <td>
12599
+ <code>url_name</code>
12600
+ </td>
12601
+ <td>
12602
+ <code>str</code>
12603
+ </td>
12604
+ <td>
12605
+ <div class="doc-md-description">
12606
+ <p>The name of the URL pattern to link to, which will be reversed to generate the URL.</p>
12607
+ </div>
12608
+ </td>
12609
+ <td>
12610
+ <em>required</em>
12611
+ </td>
12612
+ </tr>
12613
+ <tr class="doc-section-item">
12614
+ <td>
12615
+ <code>label_wrapper_template_path</code>
12616
+ </td>
12617
+ <td>
12618
+ <code>str</code>
12619
+ </td>
12620
+ <td>
12621
+ <div class="doc-md-description">
12622
+ <p>Template path to render the tab label to HTML.</p>
12623
+ </div>
12624
+ </td>
12625
+ <td>
12626
+ <code>&#39;components/tab/label_wrapper_distinct_view.html&#39;</code>
12627
+ </td>
12628
+ </tr>
12629
+ <tr class="doc-section-item">
12630
+ <td>
12631
+ <code>related_object_attribute</code>
12632
+ </td>
12633
+ <td>
12634
+ <code>str</code>
12635
+ </td>
12636
+ <td>
12637
+ <div class="doc-md-description">
12638
+ <p>The name of the related object attribute to count for the tab label.</p>
12639
+ </div>
12640
+ </td>
12641
+ <td>
12642
+ <code>&#39;&#39;</code>
12643
+ </td>
12644
+ </tr>
12645
+ </tbody>
12646
+ </table>
12647
+
12648
+
12586
12649
 
12587
12650
 
12588
12651
 
@@ -6973,33 +6973,6 @@
6973
6973
  </span>
6974
6974
  </a>
6975
6975
 
6976
- </li>
6977
-
6978
- <li class="md-nav__item">
6979
- <a href="#performance-tests" class="md-nav__link">
6980
- <span class="md-ellipsis">
6981
- Performance Tests
6982
- </span>
6983
- </a>
6984
-
6985
- </li>
6986
-
6987
- <li class="md-nav__item">
6988
- <a href="#running-performance-tests" class="md-nav__link">
6989
- <span class="md-ellipsis">
6990
- Running Performance Tests
6991
- </span>
6992
- </a>
6993
-
6994
- </li>
6995
-
6996
- <li class="md-nav__item">
6997
- <a href="#gathering-performance-test-baseline-data" class="md-nav__link">
6998
- <span class="md-ellipsis">
6999
- Gathering Performance Test Baseline Data
7000
- </span>
7001
- </a>
7002
-
7003
6976
  </li>
7004
6977
 
7005
6978
  </ul>
@@ -9182,33 +9155,6 @@
9182
9155
  </span>
9183
9156
  </a>
9184
9157
 
9185
- </li>
9186
-
9187
- <li class="md-nav__item">
9188
- <a href="#performance-tests" class="md-nav__link">
9189
- <span class="md-ellipsis">
9190
- Performance Tests
9191
- </span>
9192
- </a>
9193
-
9194
- </li>
9195
-
9196
- <li class="md-nav__item">
9197
- <a href="#running-performance-tests" class="md-nav__link">
9198
- <span class="md-ellipsis">
9199
- Running Performance Tests
9200
- </span>
9201
- </a>
9202
-
9203
- </li>
9204
-
9205
- <li class="md-nav__item">
9206
- <a href="#gathering-performance-test-baseline-data" class="md-nav__link">
9207
- <span class="md-ellipsis">
9208
- Gathering Performance Test Baseline Data
9209
- </span>
9210
- </a>
9211
-
9212
9158
  </li>
9213
9159
 
9214
9160
  </ul>
@@ -9233,39 +9179,6 @@
9233
9179
  <p>In general apps can be tested like other Django apps. In most cases you'll want to run your automated tests via the <code>nautobot-server test &lt;app_module&gt;</code> command or, if using the <code>coverage</code> Python library, <code>coverage run --module nautobot.core.cli test &lt;app_module&gt;</code>.</p>
9234
9180
  <h2 id="factories">Factories<a class="headerlink" href="#factories" title="Permanent link">&para;</a></h2>
9235
9181
  <p>The <a href="../../../user-guide/administration/configuration/settings.html#test_use_factories"><code>TEST_USE_FACTORIES</code></a> setting defaults to <code>False</code> when testing apps, primarily for backwards-compatibility reasons. It can prove a useful way of populating a baseline of Nautobot database data for your tests and save you the trouble of creating a large amount of baseline data yourself. We recommend adding <a href="https://pypi.org/project/factory-boy/"><code>factory-boy</code></a> to your app's development dependencies and settings <code>TEST_USE_FACTORIES = True</code> in your app's development/test <code>nautobot_config.py</code> to take advantage of this.</p>
9236
- <h2 id="performance-tests">Performance Tests<a class="headerlink" href="#performance-tests" title="Permanent link">&para;</a></h2>
9237
- <h2 id="running-performance-tests">Running Performance Tests<a class="headerlink" href="#running-performance-tests" title="Permanent link">&para;</a></h2>
9238
- <p>You need to install <code>django-slowtests</code> as a part of your app dev dependency to run performance tests. It has a very intuitive way to measure the performance of your own tests for your app (all you have to do is tag your tests with <code>performance</code>) and do <code>invoke performance-test</code> to get the time to run your tests with <code>NautobotPerformanceTestRunner</code>.</p>
9239
- <p><code>NautobotPerformanceTestRunner</code> is used by adding the flag <code>--testrunner nautobot.core.tests.runner.NautobotPerformanceTestRunner</code> to the <code>coverage run</code> command used for unit tests. This flag will replace the default <code>NautobotTestRunner</code> while retaining all its functionalities with the addition of performance evaluation after test
9240
- runs.
9241
- Checkout <a href="../../core/testing.html#performance-tests">Performance Tests</a> for more detail.</p>
9242
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nd">@tag</span><span class="p">(</span><span class="s2">&quot;performance&quot;</span><span class="p">)</span>
9243
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="k">def</span> <span class="nf">test_your_app</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
9244
- <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="k">pass</span>
9245
- <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="o">...</span>
9246
- </code></pre></div>
9247
- <h2 id="gathering-performance-test-baseline-data">Gathering Performance Test Baseline Data<a class="headerlink" href="#gathering-performance-test-baseline-data" title="Permanent link">&para;</a></h2>
9248
- <p>If you want to add baselines for your own test to <code>nautobot/core/tests/performance_baselines.yml</code> or have your own baseline yaml file for performance testing, specify a different file path for <code>TEST_PERFORMANCE_BASELINE_FILE</code> in app's development/test <code>nautobot_config.py</code>, and store the output of <code>invoke performance-test --performance-snapshot</code> command in that file. <code>--performance-snapshot</code> flag will store the results of your performance test to <code>report.yml</code> and all you need to do is copy/paste the result to the file set by <code>TEST_PERFORMANCE_BASELINE_FILE</code>. Now you have baselines for your own tests!
9249
- Example output of <code>invoke performance-test --performance-snapshot</code>:</p>
9250
- <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="nt">tests</span><span class="p">:</span>
9251
- <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
9252
- <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="no">test_run_job_with_sensitive_variables_and_requires_approval</span>
9253
- <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="no">(nautobot.extras.tests.test_views.JobTestCase)</span>
9254
- <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="nt">execution_time</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4.799533</span>
9255
- <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">test_run_missing_schedule (nautobot.extras.tests.test_views.JobTestCase)</span>
9256
- <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="nt">execution_time</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4.367563</span>
9257
- <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">test_run_now_missing_args (nautobot.extras.tests.test_views.JobTestCase)</span>
9258
- <a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="nt">execution_time</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">4.363194</span>
9259
- <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
9260
- <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a><span class="w"> </span><span class="no">test_create_object_with_constrained_permission</span>
9261
- <a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span><span class="no">(nautobot.extras.tests.test_views.GraphQLQueriesTestCase)</span>
9262
- <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span><span class="nt">execution_time</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">3.474244</span>
9263
- <a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
9264
- <a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a><span class="w"> </span><span class="no">test_run_now_constrained_permissions</span>
9265
- <a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a><span class="w"> </span><span class="no">(nautobot.extras.tests.test_views.JobTestCase)</span>
9266
- <a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="nt">execution_time</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2.727531</span>
9267
- </code></pre></div>
9268
- <p>We recommend adding <a href="https://pypi.org/project/django-slowtests/"><code>django-slowtests</code></a> to your app's development dependencies to leverage this functionality to build better performing apps.</p>
9269
9182
 
9270
9183
 
9271
9184
 
@@ -9217,7 +9217,7 @@
9217
9217
  <h2 id="nautobot-version">Nautobot Version<a class="headerlink" href="#nautobot-version" title="Permanent link">&para;</a></h2>
9218
9218
  <p>Change your Nautobot to the latest/v2.0 release.</p>
9219
9219
  <h2 id="python-version">Python Version<a class="headerlink" href="#python-version" title="Permanent link">&para;</a></h2>
9220
- <p>Python 3.8 support is dropped for Nautobot v2.4 and Python 3.9 is the minimum version for Nautobot and its apps.</p>
9220
+ <p>Python 3.8 support is dropped for Nautobot v2.4 and Python 3.9.2 is the minimum version for Nautobot and its apps.</p>
9221
9221
  <h2 id="pylint-nautobot"><code>pylint-nautobot</code><a class="headerlink" href="#pylint-nautobot" title="Permanent link">&para;</a></h2>
9222
9222
  <p><code>pylint-nautobot</code> is now a required dev-dependency. Make sure you add <code>pylint-nautobot = "*"</code> under <code>tool.poetry.dev-dependencies</code> section in your <code>pyproject.toml</code>.</p>
9223
9223
 
@@ -9616,17 +9616,17 @@
9616
9616
  <tr>
9617
9617
  <td>Object create/edit forms</td>
9618
9618
  <td><code>NautobotModelForm</code></td>
9619
- <td><code>BootstrapMixin</code></td>
9619
+ <td><code>BootstrapMixin</code> + <code>django.forms.ModelForm</code></td>
9620
9620
  </tr>
9621
9621
  <tr>
9622
9622
  <td>Object bulk-edit forms</td>
9623
9623
  <td><code>NautobotBulkEditForm</code></td>
9624
- <td><code>BootstrapMixin</code></td>
9624
+ <td><code>BootstrapMixin</code> + <code>BulkEditForm</code></td>
9625
9625
  </tr>
9626
9626
  <tr>
9627
9627
  <td>Table filter forms</td>
9628
9628
  <td><code>NautobotFilterForm</code></td>
9629
- <td><code>BootstrapMixin</code></td>
9629
+ <td><code>BootstrapMixin</code> + <code>django.forms.Form</code></td>
9630
9630
  </tr>
9631
9631
  <tr>
9632
9632
  <td>Read-only serializers</td>