Skip to content

Commit 3dfb321

Browse files
committed
Maintainers data in json api. Fixes pypi#9978
1 parent 0d7cb20 commit 3dfb321

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

Diff for: tests/unit/legacy/api/test_json.py

+3
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ def test_renders(self, pyramid_config, db_request, db_session):
250250
"license": None,
251251
"maintainer": None,
252252
"maintainer_email": None,
253+
"maintainers": [],
253254
"name": project.name,
254255
"package_url": "/the/fake/url/",
255256
"platform": None,
@@ -574,6 +575,7 @@ def test_detail_renders(self, pyramid_config, db_request, db_session):
574575
"license": None,
575576
"maintainer": None,
576577
"maintainer_email": None,
578+
"maintainers": [],
577579
"name": project.name,
578580
"package_url": "/the/fake/url/",
579581
"platform": None,
@@ -666,6 +668,7 @@ def test_minimal_renders(self, pyramid_config, db_request):
666668
"license": None,
667669
"maintainer": None,
668670
"maintainer_email": None,
671+
"maintainers": [],
669672
"name": project.name,
670673
"package_url": "/the/fake/url/",
671674
"platform": None,

Diff for: warehouse/legacy/api/json.py

+21
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
Project,
2626
Release,
2727
ReleaseURL,
28+
Role,
29+
User,
2830
)
2931
from warehouse.utils.cors import _CORS_HEADERS
3032

@@ -144,6 +146,24 @@ def _json_data(request, project, release, *, all_releases):
144146
for vulnerability_record in release.vulnerabilities
145147
]
146148

149+
# Serialize maintainers and their project role.
150+
maintainers = [
151+
{
152+
"username": maintainer.username,
153+
"name": maintainer.name,
154+
"role_name": maintainer.role_name,
155+
}
156+
for maintainer in (
157+
request.db.query(Role)
158+
.join(User)
159+
.filter(Role.project == project)
160+
.distinct(User.username)
161+
.order_by(User.username)
162+
.with_entities(User.username, User.name, Role.role_name)
163+
.all()
164+
)
165+
]
166+
147167
data = {
148168
"info": {
149169
"name": project.name,
@@ -158,6 +178,7 @@ def _json_data(request, project, release, *, all_releases):
158178
"author_email": release.author_email,
159179
"maintainer": release.maintainer,
160180
"maintainer_email": release.maintainer_email,
181+
"maintainers": maintainers,
161182
"requires_python": release.requires_python,
162183
"platform": release.platform,
163184
"downloads": {"last_day": -1, "last_week": -1, "last_month": -1},

0 commit comments

Comments
 (0)