Skip to content

Commit 5d80f07

Browse files
benmezgerjelly
andcommitted
Add pkgbases export endpoint to developer reports
Co-Authored-By: Jelle van der Waa <jelle@archlinux.org>
1 parent 163cb83 commit 5d80f07

4 files changed

Lines changed: 43 additions & 5 deletions

File tree

devel/tests/test_reports.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,18 @@ def test_reports_mismatched_signature(self):
5858
def test_reports_signature_time(self):
5959
response = self.client.get('/devel/reports/signature-time', follow=True)
6060
self.assertEqual(response.status_code, 200)
61+
62+
def test_reports_pkgbases(self):
63+
response = self.client.get('/devel/reports/old/pkgbases/')
64+
self.assertEqual(response.status_code, 200)
65+
self.assertEqual(response['Content-Type'], 'text/plain')
66+
67+
def test_reports_pkgbases_with_username(self):
68+
response = self.client.get(
69+
f'/devel/reports/uncompressed-man/{self.user.username}/pkgbases/')
70+
self.assertEqual(response.status_code, 200)
71+
self.assertEqual(response['Content-Type'], 'text/plain')
72+
73+
def test_reports_pkgbases_invalid_report(self):
74+
response = self.client.get('/devel/reports/nonexistent/pkgbases/')
75+
self.assertEqual(response.status_code, 404)

devel/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
path('stats/', views.stats, name='devel-stats'),
1313
path('newuser/', views.new_user_form),
1414
path('profile/', views.change_profile),
15+
re_path(r'^reports/(?P<report_name>.*)/(?P<username>.*)/pkgbases/$',
16+
views.report_pkgbases),
17+
re_path(r'^reports/(?P<report_name>.*)/pkgbases/$', views.report_pkgbases),
1518
re_path(r'^reports/(?P<report_name>.*)/(?P<username>.*)/$', views.report),
1619
re_path(r'^reports/(?P<report_name>.*)/$', views.report),
1720
]

devel/views.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,27 @@ def change_profile(request):
265265
'profile_form': profile_form})
266266

267267

268+
def get_report_packages(report, username):
269+
packages = Package.objects.normal()
270+
if report.slug in ('uncompressed-man', 'uncompressed-info'):
271+
packages = report.packages(packages, username)
272+
else:
273+
packages = report.packages(packages)
274+
275+
return packages
276+
277+
278+
@login_required
279+
def report_pkgbases(request, report_name: str, username: str | None = None) -> HttpResponse:
280+
report = {report.slug: report for report in available_reports()}.get(report_name, None)
281+
if report is None:
282+
raise Http404
283+
284+
packages = get_report_packages(report, username)
285+
pkgbases = sorted({pkg.pkgbase for pkg in packages})
286+
return HttpResponse('\n'.join(pkgbases), content_type='text/plain')
287+
288+
268289
@login_required
269290
def report(request, report_name, username=None):
270291
available = {report.slug: report for report in available_reports()}
@@ -283,11 +304,7 @@ def report(request, report_name, username=None):
283304
maints = User.objects.filter(id__in=PackageRelation.objects.filter(
284305
type=PackageRelation.MAINTAINER).values('user'))
285306

286-
if report.slug == 'uncompressed-man' or report.slug == 'uncompressed-info':
287-
packages = report.packages(packages, username)
288-
else:
289-
packages = report.packages(packages)
290-
307+
packages = get_report_packages(report, username)
291308
arches = {pkg.arch for pkg in packages}
292309
repos = {pkg.repo for pkg in packages}
293310
context = {

templates/devel/packages.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ <h2>{{ title }}{% if maintainer %},
1313
{% if maintainer %}This report only includes packages maintained by
1414
{{ maintainer.get_full_name }} ({{ maintainer.username }}).{% endif %}
1515
</p>
16+
<p>
17+
<a href="pkgbases">Link to list of pkgbases values</a>
18+
</p>
1619

1720
<div class="box filter-criteria">
1821
<h3>Filter Packages</h3>

0 commit comments

Comments
 (0)