Skip to content

Commit 2775f1b

Browse files
committed
Add pkgbases export endpoint to developer reports
1 parent 459a71d commit 2775f1b

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

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: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,22 @@ def change_profile(request):
265265
'profile_form': profile_form})
266266

267267

268+
@login_required
269+
def report_pkgbases(request, report_name: str, username: str | None = None) -> HttpResponse:
270+
report = {report.slug: report for report in available_reports()}.get(report_name, None)
271+
if report is None:
272+
raise Http404
273+
274+
packages = Package.objects.normal()
275+
if report.slug in ('uncompressed-man', 'uncompressed-info'):
276+
packages = report.packages(packages, username)
277+
else:
278+
packages = report.packages(packages)
279+
280+
pkgbases = sorted({pkg.pkgbase for pkg in packages})
281+
return HttpResponse('\n'.join(pkgbases), content_type='text/plain')
282+
283+
268284
@login_required
269285
def report(request, report_name, username=None):
270286
available = {report.slug: report for report in available_reports()}

0 commit comments

Comments
 (0)