nautobot 2.4.17__py3-none-any.whl → 2.4.18__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 (92) hide show
  1. nautobot/apps/views.py +2 -0
  2. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -8
  3. nautobot/circuits/templates/circuits/inc/circuit_termination_speed_fragment.html +9 -0
  4. nautobot/circuits/tests/integration/test_circuit.py +2 -2
  5. nautobot/circuits/views.py +32 -15
  6. nautobot/core/filters.py +2 -2
  7. nautobot/core/settings.py +1 -0
  8. nautobot/core/settings.yaml +9 -0
  9. nautobot/core/tables.py +21 -23
  10. nautobot/core/templates/components/breadcrumbs.html +19 -0
  11. nautobot/core/templates/generic/object_changelog.html +0 -2
  12. nautobot/core/templates/generic/object_list.html +15 -12
  13. nautobot/core/templates/generic/object_notes.html +0 -2
  14. nautobot/core/templates/generic/object_retrieve.html +16 -9
  15. nautobot/core/templatetags/helpers.py +24 -0
  16. nautobot/core/templatetags/ui_framework.py +40 -5
  17. nautobot/core/testing/filters.py +37 -21
  18. nautobot/core/testing/views.py +25 -0
  19. nautobot/core/tests/test_tables.py +43 -6
  20. nautobot/core/tests/test_templatetags_ui_framework.py +146 -0
  21. nautobot/core/tests/test_titles.py +2 -2
  22. nautobot/core/tests/test_ui.py +14 -1
  23. nautobot/core/tests/test_views.py +45 -0
  24. nautobot/core/ui/breadcrumbs.py +13 -8
  25. nautobot/core/ui/object_detail.py +43 -5
  26. nautobot/core/ui/titles.py +9 -5
  27. nautobot/core/views/__init__.py +24 -3
  28. nautobot/core/views/generic.py +42 -17
  29. nautobot/core/views/mixins.py +146 -12
  30. nautobot/core/views/utils.py +117 -0
  31. nautobot/dcim/models/devices.py +4 -0
  32. nautobot/dcim/tables/__init__.py +2 -0
  33. nautobot/dcim/tables/devices.py +24 -0
  34. nautobot/dcim/tables/power.py +2 -2
  35. nautobot/dcim/templates/dcim/device/base.html +1 -11
  36. nautobot/dcim/templates/dcim/device_component.html +0 -19
  37. nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -16
  38. nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +1 -50
  39. nautobot/dcim/tests/test_views.py +41 -0
  40. nautobot/dcim/views.py +160 -39
  41. nautobot/extras/filters/mixins.py +1 -1
  42. nautobot/extras/forms/forms.py +15 -0
  43. nautobot/extras/models/groups.py +10 -1
  44. nautobot/extras/models/jobs.py +2 -2
  45. nautobot/extras/plugins/views.py +18 -5
  46. nautobot/extras/tables.py +4 -2
  47. nautobot/extras/templates/extras/customfield_retrieve.html +1 -128
  48. nautobot/extras/templates/extras/dynamicgroup.html +2 -99
  49. nautobot/extras/templates/extras/dynamicgroup_edit.html +2 -199
  50. nautobot/extras/templates/extras/dynamicgroup_retrieve.html +99 -0
  51. nautobot/extras/templates/extras/dynamicgroup_update.html +199 -0
  52. nautobot/extras/templates/extras/gitrepository.html +2 -82
  53. nautobot/extras/templates/extras/gitrepository_object_edit.html +2 -13
  54. nautobot/extras/templates/extras/gitrepository_retrieve.html +82 -0
  55. nautobot/extras/templates/extras/gitrepository_update.html +13 -0
  56. nautobot/extras/templates/extras/note_retrieve.html +0 -52
  57. nautobot/extras/templates/extras/plugin_detail.html +3 -7
  58. nautobot/extras/templates/extras/plugins_list.html +0 -2
  59. nautobot/extras/tests/test_dynamicgroups.py +73 -18
  60. nautobot/extras/tests/test_views.py +5 -0
  61. nautobot/extras/urls.py +2 -94
  62. nautobot/extras/views.py +424 -430
  63. nautobot/ipam/querysets.py +3 -3
  64. nautobot/ipam/signals.py +6 -1
  65. nautobot/ipam/templates/ipam/prefix.html +0 -8
  66. nautobot/ipam/tests/test_api.py +5 -0
  67. nautobot/ipam/tests/test_models.py +387 -0
  68. nautobot/ipam/tests/test_querysets.py +46 -0
  69. nautobot/ipam/utils/migrations.py +1 -1
  70. nautobot/ipam/views.py +17 -8
  71. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +72 -0
  72. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +45 -9
  73. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +393 -15
  74. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +1 -1
  75. nautobot/project-static/docs/development/core/getting-started.html +0 -15
  76. nautobot/project-static/docs/development/core/ui-component-framework.html +6 -11
  77. nautobot/project-static/docs/objects.inv +0 -0
  78. nautobot/project-static/docs/release-notes/version-2.4.html +222 -0
  79. nautobot/project-static/docs/search/search_index.json +1 -1
  80. nautobot/project-static/docs/sitemap.xml +300 -300
  81. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  82. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +27 -0
  83. nautobot/project-static/img/nautobot_icon.svg +32 -34
  84. nautobot/project-static/js/table_sorting_indicator.js +0 -2
  85. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/METADATA +4 -4
  86. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/RECORD +90 -85
  87. nautobot/core/templates/inc/breadcrumbs.html +0 -14
  88. nautobot/project-static/docs/requirements.txt +0 -14
  89. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/LICENSE.txt +0 -0
  90. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/NOTICE +0 -0
  91. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/WHEEL +0 -0
  92. {nautobot-2.4.17.dist-info → nautobot-2.4.18.dist-info}/entry_points.txt +0 -0
@@ -8799,6 +8799,15 @@
8799
8799
  </span>
8800
8800
  </a>
8801
8801
 
8802
+ </li>
8803
+
8804
+ <li class="md-nav__item">
8805
+ <a href="#nautobot.apps.testing.FilterTestCases.FilterTestCase.test_no_distinct_on_empty_filter_params" class="md-nav__link">
8806
+ <span class="md-ellipsis">
8807
+ test_no_distinct_on_empty_filter_params
8808
+ </span>
8809
+ </a>
8810
+
8802
8811
  </li>
8803
8812
 
8804
8813
  <li class="md-nav__item">
@@ -9636,6 +9645,15 @@
9636
9645
  </span>
9637
9646
  </a>
9638
9647
 
9648
+ </li>
9649
+
9650
+ <li class="md-nav__item">
9651
+ <a href="#nautobot.apps.testing.ViewTestCases.ListObjectsViewTestCase.test_model_properties_as_table_columns_are_not_orderable" class="md-nav__link">
9652
+ <span class="md-ellipsis">
9653
+ test_model_properties_as_table_columns_are_not_orderable
9654
+ </span>
9655
+ </a>
9656
+
9639
9657
  </li>
9640
9658
 
9641
9659
  </ul>
@@ -12189,6 +12207,15 @@
12189
12207
  </span>
12190
12208
  </a>
12191
12209
 
12210
+ </li>
12211
+
12212
+ <li class="md-nav__item">
12213
+ <a href="#nautobot.apps.testing.FilterTestCases.FilterTestCase.test_no_distinct_on_empty_filter_params" class="md-nav__link">
12214
+ <span class="md-ellipsis">
12215
+ test_no_distinct_on_empty_filter_params
12216
+ </span>
12217
+ </a>
12218
+
12192
12219
  </li>
12193
12220
 
12194
12221
  <li class="md-nav__item">
@@ -13026,6 +13053,15 @@
13026
13053
  </span>
13027
13054
  </a>
13028
13055
 
13056
+ </li>
13057
+
13058
+ <li class="md-nav__item">
13059
+ <a href="#nautobot.apps.testing.ViewTestCases.ListObjectsViewTestCase.test_model_properties_as_table_columns_are_not_orderable" class="md-nav__link">
13060
+ <span class="md-ellipsis">
13061
+ test_model_properties_as_table_columns_are_not_orderable
13062
+ </span>
13063
+ </a>
13064
+
13029
13065
  </li>
13030
13066
 
13031
13067
  </ul>
@@ -14628,6 +14664,24 @@ This expects a field named <code>devices</code> on the model and a filter named
14628
14664
  <div class="doc doc-object doc-function">
14629
14665
 
14630
14666
 
14667
+ <h4 id="nautobot.apps.testing.FilterTestCases.FilterTestCase.test_no_distinct_on_empty_filter_params" class="doc doc-heading">
14668
+ <code class="highlight language-python"><span class="n">test_no_distinct_on_empty_filter_params</span><span class="p">()</span></code>
14669
+
14670
+ <a href="#nautobot.apps.testing.FilterTestCases.FilterTestCase.test_no_distinct_on_empty_filter_params" class="headerlink" title="Permanent link">&para;</a></h4>
14671
+
14672
+
14673
+ <div class="doc doc-contents ">
14674
+
14675
+ <p>Verify that an empty filterset doesn't cause a <code>SELECT DISTINCT</code>.</p>
14676
+
14677
+
14678
+ </div>
14679
+
14680
+ </div>
14681
+
14682
+ <div class="doc doc-object doc-function">
14683
+
14684
+
14631
14685
  <h4 id="nautobot.apps.testing.FilterTestCases.FilterTestCase.test_q_filter_valid" class="doc doc-heading">
14632
14686
  <code class="highlight language-python"><span class="n">test_q_filter_valid</span><span class="p">()</span></code>
14633
14687
 
@@ -17090,6 +17144,24 @@ statuses present in the database in order to run tests.</p>
17090
17144
 
17091
17145
  </div>
17092
17146
 
17147
+ <div class="doc doc-object doc-function">
17148
+
17149
+
17150
+ <h4 id="nautobot.apps.testing.ViewTestCases.ListObjectsViewTestCase.test_model_properties_as_table_columns_are_not_orderable" class="doc doc-heading">
17151
+ <code class="highlight language-python"><span class="n">test_model_properties_as_table_columns_are_not_orderable</span><span class="p">()</span></code>
17152
+
17153
+ <a href="#nautobot.apps.testing.ViewTestCases.ListObjectsViewTestCase.test_model_properties_as_table_columns_are_not_orderable" class="headerlink" title="Permanent link">&para;</a></h4>
17154
+
17155
+
17156
+ <div class="doc doc-contents ">
17157
+
17158
+ <p>Check for table columns that are property-based and not orderable.</p>
17159
+
17160
+
17161
+ </div>
17162
+
17163
+ </div>
17164
+
17093
17165
 
17094
17166
 
17095
17167
  </div>
@@ -14076,7 +14076,7 @@ if you need them in your custom action.</p>
14076
14076
 
14077
14077
 
14078
14078
  <h3 id="nautobot.apps.ui.Breadcrumbs.__init__" class="doc doc-heading">
14079
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="s1">&#39;inc/breadcrumbs.html&#39;</span><span class="p">)</span></code>
14079
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="s1">&#39;components/breadcrumbs.html&#39;</span><span class="p">)</span></code>
14080
14080
 
14081
14081
  <a href="#nautobot.apps.ui.Breadcrumbs.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
14082
14082
 
@@ -14126,7 +14126,7 @@ if you need them in your custom action.</p>
14126
14126
  </div>
14127
14127
  </td>
14128
14128
  <td>
14129
- <code>&#39;inc/breadcrumbs.html&#39;</code>
14129
+ <code>&#39;components/breadcrumbs.html&#39;</code>
14130
14130
  </td>
14131
14131
  </tr>
14132
14132
  </tbody>
@@ -14171,7 +14171,7 @@ if you need them in your custom action.</p>
14171
14171
  </td>
14172
14172
  <td>
14173
14173
  <div class="doc-md-description">
14174
- <p>breadcrumb items pair.s</p>
14174
+ <p>breadcrumb items pairs.</p>
14175
14175
  </div>
14176
14176
  </td>
14177
14177
  <td>
@@ -14387,8 +14387,7 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14387
14387
 
14388
14388
  <div class="doc doc-contents ">
14389
14389
 
14390
- <p>Get the breadcrumb items for a specific action, with fallback to 'detail' if not found
14391
- and to asterisk (*) if present.</p>
14390
+ <p>Get the breadcrumb items for a specific action, 'detail' or to asterisk (*) if present.</p>
14392
14391
 
14393
14392
 
14394
14393
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -16618,7 +16617,7 @@ Label will be generated from object, but you can still override it.</p>
16618
16617
 
16619
16618
 
16620
16619
  <h3 id="nautobot.apps.ui.KeyValueTablePanel.__init__" class="doc doc-heading">
16621
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context_data_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span> <span class="n">value_transforms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_wrapper_key_value_table.html&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
16620
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">context_data_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span> <span class="n">value_transforms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">key_transforms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_wrapper_key_value_table.html&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
16622
16621
 
16623
16622
  <a href="#nautobot.apps.ui.KeyValueTablePanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
16624
16623
 
@@ -16711,6 +16710,23 @@ Many of the <code>templatetags.helpers</code> functions are suitable for this pu
16711
16710
  <code>None</code>
16712
16711
  </td>
16713
16712
  </tr>
16713
+ <tr class="doc-section-item">
16714
+ <td>
16715
+ <code>key_transforms</code>
16716
+ </td>
16717
+ <td>
16718
+ <code><span title="dict">dict</span></code>
16719
+ </td>
16720
+ <td>
16721
+ <div class="doc-md-description">
16722
+ <p>A mapping of original field names to custom display names to be used when rendering keys
16723
+ For example: {'content_types': 'Content Type'}.</p>
16724
+ </div>
16725
+ </td>
16726
+ <td>
16727
+ <code>None</code>
16728
+ </td>
16729
+ </tr>
16714
16730
  </tbody>
16715
16731
  </table>
16716
16732
 
@@ -18645,7 +18661,7 @@ dynamic-groups, metadata, etc.) do not need to be specified as they will be auto
18645
18661
 
18646
18662
 
18647
18663
  <h3 id="nautobot.apps.ui.ObjectFieldsPanel.__init__" class="doc doc-heading">
18648
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="s1">&#39;__all__&#39;</span><span class="p">,</span> <span class="n">exclude_fields</span><span class="o">=</span><span class="p">(),</span> <span class="n">context_object_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
18664
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="s1">&#39;__all__&#39;</span><span class="p">,</span> <span class="n">additional_fields</span><span class="o">=</span><span class="p">(),</span> <span class="n">exclude_fields</span><span class="o">=</span><span class="p">(),</span> <span class="n">context_object_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
18649
18665
 
18650
18666
  <a href="#nautobot.apps.ui.ObjectFieldsPanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
18651
18667
 
@@ -18677,13 +18693,33 @@ dynamic-groups, metadata, etc.) do not need to be specified as they will be auto
18677
18693
  <div class="doc-md-description">
18678
18694
  <p>The ordered list of fields to display, or <code>"__all__"</code> to display fields automatically.
18679
18695
  Note that ManyToMany fields and reverse relations are <strong>not</strong> included in <code>"__all__"</code> at this time, nor
18680
- are any hidden fields, nor the specially handled <code>id</code>, <code>created</code>, <code>last_updated</code> fields on most models.</p>
18696
+ are any hidden fields, nor the specially handled <code>id</code>, <code>created</code>, <code>last_updated</code> fields on most models.
18697
+ When a list is specified, it may include model <code>@property</code> attributes and nested lookups (if desired) in
18698
+ addition to concrete model fields; when using <code>fields="__all__"</code>, such additional attributes and lookups
18699
+ may be specified with the <code>additional_fields</code> parameter.</p>
18681
18700
  </div>
18682
18701
  </td>
18683
18702
  <td>
18684
18703
  <code>&#39;__all__&#39;</code>
18685
18704
  </td>
18686
18705
  </tr>
18706
+ <tr class="doc-section-item">
18707
+ <td>
18708
+ <code>additional_fields</code>
18709
+ </td>
18710
+ <td>
18711
+ <code><span title="list">list</span></code>
18712
+ </td>
18713
+ <td>
18714
+ <div class="doc-md-description">
18715
+ <p>Only relevant if <code>fields == "__all__"</code>, in which case it can specify additional
18716
+ non-default fields to include such as reverse relations, <code>@property</code> attributes, nested lookups, etc.</p>
18717
+ </div>
18718
+ </td>
18719
+ <td>
18720
+ <code>()</code>
18721
+ </td>
18722
+ </tr>
18687
18723
  <tr class="doc-section-item">
18688
18724
  <td>
18689
18725
  <code>exclude_fields</code>
@@ -21126,7 +21162,7 @@ Use the <code>render()</code> method to obtain either rich (HTML) or plain (stri
21126
21162
  <code>context</code>
21127
21163
  </td>
21128
21164
  <td>
21129
- <code><span title="django.template.Context">Context</span></code>
21165
+ <code><span title="typing.Union">Union</span>[<span title="dict">dict</span>, <span title="django.template.Context">Context</span>]</code>
21130
21166
  </td>
21131
21167
  <td>
21132
21168
  <div class="doc-md-description">