nautobot 2.4.15__py3-none-any.whl → 2.4.16__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.
- nautobot/extras/tables.py +12 -0
- nautobot/extras/templates/extras/marketplace.html +1 -1
- nautobot/extras/templates/extras/secretsgroup_retrieve.html +2 -29
- nautobot/extras/tests/test_plugins.py +12 -0
- nautobot/extras/views.py +19 -4
- nautobot/project-static/docs/release-notes/version-2.4.html +75 -0
- nautobot/project-static/docs/search/search_index.json +1 -1
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/METADATA +1 -1
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/RECORD +13 -13
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/NOTICE +0 -0
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/WHEEL +0 -0
- {nautobot-2.4.15.dist-info → nautobot-2.4.16.dist-info}/entry_points.txt +0 -0
nautobot/extras/tables.py
CHANGED
|
@@ -56,6 +56,7 @@ from .models import (
|
|
|
56
56
|
ScheduledJob,
|
|
57
57
|
Secret,
|
|
58
58
|
SecretsGroup,
|
|
59
|
+
SecretsGroupAssociation,
|
|
59
60
|
StaticGroupAssociation,
|
|
60
61
|
Status,
|
|
61
62
|
Tag,
|
|
@@ -1330,6 +1331,17 @@ class SecretsGroupTable(BaseTable):
|
|
|
1330
1331
|
)
|
|
1331
1332
|
|
|
1332
1333
|
|
|
1334
|
+
class SecretsGroupAssociationTable(BaseTable):
|
|
1335
|
+
secret = tables.Column(linkify=True)
|
|
1336
|
+
|
|
1337
|
+
class Meta:
|
|
1338
|
+
model = SecretsGroupAssociation
|
|
1339
|
+
fields = ("access_type", "secret_type", "secret")
|
|
1340
|
+
default_columns = ("access_type", "secret_type", "secret")
|
|
1341
|
+
# Avoid extra UI clutter
|
|
1342
|
+
attrs = {"class": "table table-condensed"}
|
|
1343
|
+
|
|
1344
|
+
|
|
1333
1345
|
#
|
|
1334
1346
|
# Custom statuses
|
|
1335
1347
|
#
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
<a class="btn btn-primary" href="{% url 'apps:apps_list' %}">See Installed Apps</a>
|
|
71
71
|
</div>
|
|
72
72
|
|
|
73
|
-
<h1>{% block page_heading %}{% render_title %}{%
|
|
73
|
+
<h1>{% block page_heading %}{% render_title %}{% endblock page_heading %}</h1>
|
|
74
74
|
|
|
75
75
|
<div class="row">
|
|
76
76
|
<div class="col-md-12">
|
|
@@ -1,29 +1,2 @@
|
|
|
1
|
-
{% extends
|
|
2
|
-
{%
|
|
3
|
-
|
|
4
|
-
{% block content_left_page %}
|
|
5
|
-
<div class="panel panel-default">
|
|
6
|
-
<div class="panel-heading">
|
|
7
|
-
<strong>Secrets Group</strong>
|
|
8
|
-
</div>
|
|
9
|
-
<table class="table table-hover panel-body attr-table">
|
|
10
|
-
<tr>
|
|
11
|
-
<td>Description</td>
|
|
12
|
-
<td colspan="3">{{ object.description | placeholder }}</td>
|
|
13
|
-
</tr>
|
|
14
|
-
<tr>
|
|
15
|
-
<td rowspan="{{ secrets_group_associations | length | add:'1'}}">Secrets</td>
|
|
16
|
-
<th>Access Type</th>
|
|
17
|
-
<th>Secret Type</th>
|
|
18
|
-
<th>Secret</th>
|
|
19
|
-
</tr>
|
|
20
|
-
{% for secret_association in secrets_group_associations %}
|
|
21
|
-
<tr>
|
|
22
|
-
<td>{{ secret_association.access_type }}</td>
|
|
23
|
-
<td>{{ secret_association.secret_type | bettertitle }}</td>
|
|
24
|
-
<td>{{ secret_association.secret|hyperlinked_object }}</td>
|
|
25
|
-
</tr>
|
|
26
|
-
{% endfor %}
|
|
27
|
-
</table>
|
|
28
|
-
</div>
|
|
29
|
-
{% endblock content_left_page %}
|
|
1
|
+
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
+
{% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -393,6 +393,18 @@ class PluginDetailViewTest(TestCase):
|
|
|
393
393
|
self.assertIn("For testing purposes only", response_body, msg=response_body)
|
|
394
394
|
|
|
395
395
|
|
|
396
|
+
class MarketplaceViewTest(TestCase):
|
|
397
|
+
def test_view_anonymous(self):
|
|
398
|
+
self.client.logout()
|
|
399
|
+
response = self.client.get(reverse("apps:apps_marketplace"))
|
|
400
|
+
# Redirects to the login page
|
|
401
|
+
self.assertHttpStatus(response, 302)
|
|
402
|
+
|
|
403
|
+
def test_view_authenticated(self):
|
|
404
|
+
response = self.client.get(reverse("apps:apps_marketplace"))
|
|
405
|
+
self.assertHttpStatus(response, 200)
|
|
406
|
+
|
|
407
|
+
|
|
396
408
|
class AppAPITest(APIViewTestCases.APIViewTestCase):
|
|
397
409
|
model = ExampleModel
|
|
398
410
|
bulk_update_data = {
|
nautobot/extras/views.py
CHANGED
|
@@ -125,7 +125,6 @@ from .models import (
|
|
|
125
125
|
ScheduledJob,
|
|
126
126
|
Secret,
|
|
127
127
|
SecretsGroup,
|
|
128
|
-
SecretsGroupAssociation,
|
|
129
128
|
StaticGroupAssociation,
|
|
130
129
|
Status,
|
|
131
130
|
Tag,
|
|
@@ -2643,13 +2642,29 @@ class SecretsGroupUIViewSet(NautobotUIViewSet):
|
|
|
2643
2642
|
form_class = forms.SecretsGroupForm
|
|
2644
2643
|
serializer_class = serializers.SecretsGroupSerializer
|
|
2645
2644
|
table_class = tables.SecretsGroupTable
|
|
2646
|
-
template_name = "extras/secretsgroup_update.html"
|
|
2647
2645
|
queryset = SecretsGroup.objects.all()
|
|
2648
2646
|
|
|
2647
|
+
object_detail_content = ObjectDetailContent(
|
|
2648
|
+
panels=(
|
|
2649
|
+
object_detail.ObjectFieldsPanel(
|
|
2650
|
+
label="Secrets Group Details",
|
|
2651
|
+
fields=["description"],
|
|
2652
|
+
section=SectionChoices.LEFT_HALF,
|
|
2653
|
+
weight=100,
|
|
2654
|
+
),
|
|
2655
|
+
object_detail.ObjectsTablePanel(
|
|
2656
|
+
table_class=tables.SecretsGroupAssociationTable,
|
|
2657
|
+
table_filter="secrets_group",
|
|
2658
|
+
related_field_name="secrets_group",
|
|
2659
|
+
table_title="Secrets",
|
|
2660
|
+
section=SectionChoices.LEFT_HALF,
|
|
2661
|
+
weight=200,
|
|
2662
|
+
),
|
|
2663
|
+
)
|
|
2664
|
+
)
|
|
2665
|
+
|
|
2649
2666
|
def get_extra_context(self, request, instance=None):
|
|
2650
2667
|
context = super().get_extra_context(request, instance)
|
|
2651
|
-
if self.action == "retrieve" and instance:
|
|
2652
|
-
context["secrets_group_associations"] = SecretsGroupAssociation.objects.filter(secrets_group=instance)
|
|
2653
2668
|
if self.action in ("create", "update"):
|
|
2654
2669
|
if request.method == "POST":
|
|
2655
2670
|
context["secrets"] = forms.SecretsGroupAssociationFormSet(data=request.POST, instance=instance)
|
|
@@ -9691,6 +9691,39 @@
|
|
|
9691
9691
|
</ul>
|
|
9692
9692
|
</nav>
|
|
9693
9693
|
|
|
9694
|
+
</li>
|
|
9695
|
+
|
|
9696
|
+
<li class="md-nav__item">
|
|
9697
|
+
<a href="#v2416-2025-08-19" class="md-nav__link">
|
|
9698
|
+
<span class="md-ellipsis">
|
|
9699
|
+
v2.4.16 (2025-08-19)
|
|
9700
|
+
</span>
|
|
9701
|
+
</a>
|
|
9702
|
+
|
|
9703
|
+
<nav class="md-nav" aria-label="v2.4.16 (2025-08-19)">
|
|
9704
|
+
<ul class="md-nav__list">
|
|
9705
|
+
|
|
9706
|
+
<li class="md-nav__item">
|
|
9707
|
+
<a href="#fixed-in-v2416" class="md-nav__link">
|
|
9708
|
+
<span class="md-ellipsis">
|
|
9709
|
+
Fixed in v2.4.16
|
|
9710
|
+
</span>
|
|
9711
|
+
</a>
|
|
9712
|
+
|
|
9713
|
+
</li>
|
|
9714
|
+
|
|
9715
|
+
<li class="md-nav__item">
|
|
9716
|
+
<a href="#housekeeping-in-v2416" class="md-nav__link">
|
|
9717
|
+
<span class="md-ellipsis">
|
|
9718
|
+
Housekeeping in v2.4.16
|
|
9719
|
+
</span>
|
|
9720
|
+
</a>
|
|
9721
|
+
|
|
9722
|
+
</li>
|
|
9723
|
+
|
|
9724
|
+
</ul>
|
|
9725
|
+
</nav>
|
|
9726
|
+
|
|
9694
9727
|
</li>
|
|
9695
9728
|
|
|
9696
9729
|
<li class="md-nav__item">
|
|
@@ -11635,6 +11668,39 @@
|
|
|
11635
11668
|
</ul>
|
|
11636
11669
|
</nav>
|
|
11637
11670
|
|
|
11671
|
+
</li>
|
|
11672
|
+
|
|
11673
|
+
<li class="md-nav__item">
|
|
11674
|
+
<a href="#v2416-2025-08-19" class="md-nav__link">
|
|
11675
|
+
<span class="md-ellipsis">
|
|
11676
|
+
v2.4.16 (2025-08-19)
|
|
11677
|
+
</span>
|
|
11678
|
+
</a>
|
|
11679
|
+
|
|
11680
|
+
<nav class="md-nav" aria-label="v2.4.16 (2025-08-19)">
|
|
11681
|
+
<ul class="md-nav__list">
|
|
11682
|
+
|
|
11683
|
+
<li class="md-nav__item">
|
|
11684
|
+
<a href="#fixed-in-v2416" class="md-nav__link">
|
|
11685
|
+
<span class="md-ellipsis">
|
|
11686
|
+
Fixed in v2.4.16
|
|
11687
|
+
</span>
|
|
11688
|
+
</a>
|
|
11689
|
+
|
|
11690
|
+
</li>
|
|
11691
|
+
|
|
11692
|
+
<li class="md-nav__item">
|
|
11693
|
+
<a href="#housekeeping-in-v2416" class="md-nav__link">
|
|
11694
|
+
<span class="md-ellipsis">
|
|
11695
|
+
Housekeeping in v2.4.16
|
|
11696
|
+
</span>
|
|
11697
|
+
</a>
|
|
11698
|
+
|
|
11699
|
+
</li>
|
|
11700
|
+
|
|
11701
|
+
</ul>
|
|
11702
|
+
</nav>
|
|
11703
|
+
|
|
11638
11704
|
</li>
|
|
11639
11705
|
|
|
11640
11706
|
<li class="md-nav__item">
|
|
@@ -12829,6 +12895,15 @@
|
|
|
12829
12895
|
|
|
12830
12896
|
<!-- towncrier release notes start -->
|
|
12831
12897
|
|
|
12898
|
+
<h2 id="v2416-2025-08-19">v2.4.16 (2025-08-19)<a class="headerlink" href="#v2416-2025-08-19" title="Permanent link">¶</a></h2>
|
|
12899
|
+
<h3 id="fixed-in-v2416">Fixed in v2.4.16<a class="headerlink" href="#fixed-in-v2416" title="Permanent link">¶</a></h3>
|
|
12900
|
+
<ul>
|
|
12901
|
+
<li><a href="https://github.com/nautobot/nautobot/issues/7699">#7699</a> - Fixed breakage of the "Apps Marketplace" view in Nautobot v2.4.15.</li>
|
|
12902
|
+
</ul>
|
|
12903
|
+
<h3 id="housekeeping-in-v2416">Housekeeping in v2.4.16<a class="headerlink" href="#housekeeping-in-v2416" title="Permanent link">¶</a></h3>
|
|
12904
|
+
<ul>
|
|
12905
|
+
<li><a href="https://github.com/nautobot/nautobot/issues/7643">#7643</a> - Refactored SecretsGroup model related UI views to use <code>UI component framework</code>.</li>
|
|
12906
|
+
</ul>
|
|
12832
12907
|
<h2 id="v2415-2025-08-18">v2.4.15 (2025-08-18)<a class="headerlink" href="#v2415-2025-08-18" title="Permanent link">¶</a></h2>
|
|
12833
12908
|
<h3 id="added-in-v2415">Added in v2.4.15<a class="headerlink" href="#added-in-v2415" title="Permanent link">¶</a></h3>
|
|
12834
12909
|
<ul>
|