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 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 %}{% block page_heading %}</h1>
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 "generic/object_retrieve.html" %}
2
- {% load helpers %}
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">&para;</a></h2>
12899
+ <h3 id="fixed-in-v2416">Fixed in v2.4.16<a class="headerlink" href="#fixed-in-v2416" title="Permanent link">&para;</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">&para;</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">&para;</a></h2>
12833
12908
  <h3 id="added-in-v2415">Added in v2.4.15<a class="headerlink" href="#added-in-v2415" title="Permanent link">&para;</a></h3>
12834
12909
  <ul>