Skip to content

Commit 831e2ef

Browse files
committed
Use consistent response types throughout
1 parent 599cc3f commit 831e2ef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+141
-233
lines changed

atr/admin/__init__.py

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import asfquart.session
3333
import quart
3434
import sqlalchemy.orm as orm
35-
import werkzeug.wrappers.response as response
3635

3736
import atr.blueprints.admin as admin
3837
import atr.config as config
@@ -114,16 +113,16 @@ async def all_releases(session: web.Committer) -> str:
114113

115114

116115
@admin.get("/browse-as")
117-
async def browse_as_get(session: web.Committer) -> str | response.Response:
116+
async def browse_as_get(session: web.Committer) -> str | web.WerkzeugResponse:
118117
return await _browse_as(session)
119118

120119

121120
@admin.post("/browse-as")
122-
async def browse_as_post(session: web.Committer) -> str | response.Response:
121+
async def browse_as_post(session: web.Committer) -> str | web.WerkzeugResponse:
123122
return await _browse_as(session)
124123

125124

126-
async def _browse_as(session: web.Committer) -> str | response.Response:
125+
async def _browse_as(session: web.Committer) -> str | web.WerkzeugResponse:
127126
"""Allows an admin to browse as another user."""
128127
# TODO: Enable this in debugging mode only?
129128
import atr.get.root as root
@@ -172,7 +171,7 @@ async def _browse_as(session: web.Committer) -> str | response.Response:
172171

173172

174173
@admin.get("/configuration")
175-
async def configuration(session: web.Committer) -> quart.wrappers.response.Response:
174+
async def configuration(session: web.Committer) -> web.QuartResponse:
176175
"""Display the current application configuration values."""
177176

178177
conf = config.get()
@@ -299,7 +298,7 @@ async def _data(session: web.Committer, model: str = "Committee") -> str:
299298

300299

301300
@admin.get("/delete-test-openpgp-keys")
302-
async def delete_test_openpgp_keys_get(session: web.Committer) -> quart.Response | response.Response:
301+
async def delete_test_openpgp_keys_get(session: web.Committer) -> web.Response:
303302
if not config.get().ALLOW_TESTS:
304303
raise base.ASFQuartException("Test operations are disabled in this environment", errorcode=403)
305304

@@ -309,7 +308,7 @@ async def delete_test_openpgp_keys_get(session: web.Committer) -> quart.Response
309308

310309

311310
@admin.post("/delete-test-openpgp-keys")
312-
async def delete_test_openpgp_keys_post(session: web.Committer) -> quart.Response | response.Response:
311+
async def delete_test_openpgp_keys_post(session: web.Committer) -> web.Response:
313312
"""Delete all test user OpenPGP keys and their links."""
314313
if not config.get().ALLOW_TESTS:
315314
raise base.ASFQuartException("Test operations are disabled in this environment", errorcode=403)
@@ -328,16 +327,16 @@ async def delete_test_openpgp_keys_post(session: web.Committer) -> quart.Respons
328327

329328

330329
@admin.get("/delete-committee-keys")
331-
async def delete_committee_keys_get(session: web.Committer) -> str | response.Response:
330+
async def delete_committee_keys_get(session: web.Committer) -> str | web.WerkzeugResponse:
332331
return await _delete_committee_keys(session)
333332

334333

335334
@admin.post("/delete-committee-keys")
336-
async def delete_committee_keys_post(session: web.Committer) -> str | response.Response:
335+
async def delete_committee_keys_post(session: web.Committer) -> str | web.WerkzeugResponse:
337336
return await _delete_committee_keys(session)
338337

339338

340-
async def _delete_committee_keys(session: web.Committer) -> str | response.Response:
339+
async def _delete_committee_keys(session: web.Committer) -> str | web.WerkzeugResponse:
341340
form = await DeleteCommitteeKeysForm.create_form()
342341
async with db.session() as data:
343342
all_committees = await data.committee(_public_signing_keys=True).order_by(sql.Committee.name).all()
@@ -389,16 +388,16 @@ async def _delete_committee_keys(session: web.Committer) -> str | response.Respo
389388

390389

391390
@admin.get("/delete-release")
392-
async def delete_release_get(session: web.Committer) -> str | response.Response:
391+
async def delete_release_get(session: web.Committer) -> str | web.WerkzeugResponse:
393392
return await _delete_release(session)
394393

395394

396395
@admin.post("/delete-release")
397-
async def delete_release_post(session: web.Committer) -> str | response.Response:
396+
async def delete_release_post(session: web.Committer) -> str | web.WerkzeugResponse:
398397
return await _delete_release(session)
399398

400399

401-
async def _delete_release(session: web.Committer) -> str | response.Response:
400+
async def _delete_release(session: web.Committer) -> str | web.WerkzeugResponse:
402401
"""Page to delete selected releases and their associated data and files."""
403402
form = await DeleteReleaseForm.create_form()
404403

@@ -428,7 +427,7 @@ async def _delete_release(session: web.Committer) -> str | response.Response:
428427

429428

430429
@admin.get("/env")
431-
async def env(session: web.Committer) -> quart.wrappers.response.Response:
430+
async def env(session: web.Committer) -> web.QuartResponse:
432431
"""Display the environment variables."""
433432
env_vars = []
434433
for key, value in os.environ.items():
@@ -437,16 +436,16 @@ async def env(session: web.Committer) -> quart.wrappers.response.Response:
437436

438437

439438
@admin.get("/keys/check")
440-
async def keys_check_get(session: web.Committer) -> quart.Response:
439+
async def keys_check_get(session: web.Committer) -> web.QuartResponse:
441440
return await _keys_check(session)
442441

443442

444443
@admin.post("/keys/check")
445-
async def keys_check_post(session: web.Committer) -> quart.Response:
444+
async def keys_check_post(session: web.Committer) -> web.QuartResponse:
446445
return await _keys_check(session)
447446

448447

449-
async def _keys_check(session: web.Committer) -> quart.Response:
448+
async def _keys_check(session: web.Committer) -> web.QuartResponse:
450449
"""Check public signing key details."""
451450
if quart.request.method != "POST":
452451
check_form = await CheckKeysForm.create_form()
@@ -462,16 +461,16 @@ async def _keys_check(session: web.Committer) -> quart.Response:
462461

463462

464463
@admin.get("/keys/regenerate-all")
465-
async def keys_regenerate_all_get(session: web.Committer) -> quart.Response:
464+
async def keys_regenerate_all_get(session: web.Committer) -> web.QuartResponse:
466465
return await _keys_regenerate_all(session)
467466

468467

469468
@admin.post("/keys/regenerate-all")
470-
async def keys_regenerate_all_post(session: web.Committer) -> quart.Response:
469+
async def keys_regenerate_all_post(session: web.Committer) -> web.QuartResponse:
471470
return await _keys_regenerate_all(session)
472471

473472

474-
async def _keys_regenerate_all(session: web.Committer) -> quart.Response:
473+
async def _keys_regenerate_all(session: web.Committer) -> web.QuartResponse:
475474
"""Regenerate the KEYS file for all committees."""
476475
if quart.request.method != "POST":
477476
regenerate_form = await RegenerateKeysForm.create_form()
@@ -500,16 +499,16 @@ async def _keys_regenerate_all(session: web.Committer) -> quart.Response:
500499

501500

502501
@admin.get("/keys/update")
503-
async def keys_update_get(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
502+
async def keys_update_get(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
504503
return await _keys_update(session)
505504

506505

507506
@admin.post("/keys/update")
508-
async def keys_update_post(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
507+
async def keys_update_post(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
509508
return await _keys_update(session)
510509

511510

512-
async def _keys_update(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
511+
async def _keys_update(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
513512
"""Update keys from remote data."""
514513
if quart.request.method != "POST":
515514
empty_form = await forms.Empty.create_form()
@@ -582,20 +581,20 @@ async def _ldap(session: web.Committer) -> str:
582581
@admin.get("/ongoing-tasks/<project_name>/<version_name>/<revision>")
583582
async def ongoing_tasks_get(
584583
session: web.Committer, project_name: str, version_name: str, revision: str
585-
) -> quart.wrappers.response.Response:
584+
) -> web.QuartResponse:
586585
return await _ongoing_tasks(session, project_name, version_name, revision)
587586

588587

589588
@admin.post("/ongoing-tasks/<project_name>/<version_name>/<revision>")
590589
async def ongoing_tasks_post(
591590
session: web.Committer, project_name: str, version_name: str, revision: str
592-
) -> quart.wrappers.response.Response:
591+
) -> web.QuartResponse:
593592
return await _ongoing_tasks(session, project_name, version_name, revision)
594593

595594

596595
async def _ongoing_tasks(
597596
session: web.Committer, project_name: str, version_name: str, revision: str
598-
) -> quart.wrappers.response.Response:
597+
) -> web.QuartResponse:
599598
try:
600599
ongoing = await interaction.tasks_ongoing(project_name, version_name, revision)
601600
return web.TextResponse(str(ongoing))
@@ -686,16 +685,16 @@ def one_total_mean(x: tuple[str, dict]) -> float:
686685

687686

688687
@admin.get("/projects/update")
689-
async def projects_update_get(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
688+
async def projects_update_get(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
690689
return await _projects_update(session)
691690

692691

693692
@admin.post("/projects/update")
694-
async def projects_update_post(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
693+
async def projects_update_post(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
695694
return await _projects_update(session)
696695

697696

698-
async def _projects_update(session: web.Committer) -> str | response.Response | tuple[Mapping[str, Any], int]:
697+
async def _projects_update(session: web.Committer) -> str | web.WerkzeugResponse | tuple[Mapping[str, Any], int]:
699698
"""Update projects from remote data."""
700699
if quart.request.method == "POST":
701700
try:
@@ -724,7 +723,7 @@ async def tasks_(session: web.Committer) -> str:
724723
@admin.get("/task-times/<project_name>/<version_name>/<revision_number>")
725724
async def task_times(
726725
session: web.Committer, project_name: str, version_name: str, revision_number: str
727-
) -> quart.wrappers.response.Response:
726+
) -> web.QuartResponse:
728727
values = []
729728
async with db.session() as data:
730729
tasks = await data.task(
@@ -740,7 +739,7 @@ async def task_times(
740739

741740

742741
@admin.get("/test")
743-
async def test(session: web.Committer) -> quart.wrappers.response.Response:
742+
async def test(session: web.Committer) -> web.QuartResponse:
744743
"""Test the storage layer."""
745744
import atr.storage as storage
746745

@@ -780,7 +779,7 @@ async def toggle_view_get(session: web.Committer) -> str:
780779

781780

782781
@admin.post("/toggle-view")
783-
async def toggle_view_post(session: web.Committer) -> response.Response:
782+
async def toggle_view_post(session: web.Committer) -> web.WerkzeugResponse:
784783
await util.validate_empty_form()
785784

786785
app = asfquart.APP

atr/api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ async def checks_ongoing(
154154
ongoing_tasks_count, _latest_revision = await interaction.tasks_ongoing_revision(project, version, revision)
155155
# TODO: Is there a way to return just an int?
156156
# The ResponseReturnValue type in quart does not allow int
157-
# And if we use quart.jsonify, we must return quart.Response which quart_schema tries to validate
157+
# And if we use quart.jsonify, we must return web.QuartResponse which quart_schema tries to validate
158158
# ResponseValue = Union[
159159
# "Response",
160160
# "WerkzeugResponse",

atr/get/announce.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717

18-
import werkzeug.wrappers.response as response
1918

2019
# TODO: Improve upon the routes_release pattern
2120
import atr.blueprints.get as get
@@ -29,7 +28,7 @@
2928

3029

3130
@get.committer("/announce/<project_name>/<version_name>")
32-
async def selected(session: web.Committer, project_name: str, version_name: str) -> str | response.Response:
31+
async def selected(session: web.Committer, project_name: str, version_name: str) -> str | web.WerkzeugResponse:
3332
"""Allow the user to announce a release preview."""
3433
await session.check_access(project_name)
3534

atr/get/candidate.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
"""candidate.py"""
1919

2020
import asfquart.base as base
21-
import werkzeug.wrappers.response as response
2221

2322
import atr.blueprints.get as get
2423
import atr.db as db
@@ -30,7 +29,7 @@
3029

3130

3231
@get.committer("/candidate/view/<project_name>/<version_name>")
33-
async def view(session: web.Committer, project_name: str, version_name: str) -> response.Response | str:
32+
async def view(session: web.Committer, project_name: str, version_name: str) -> web.WerkzeugResponse | str:
3433
"""View all the files in the rsync upload directory for a release."""
3534
await session.check_access(project_name)
3635

@@ -67,7 +66,7 @@ async def view(session: web.Committer, project_name: str, version_name: str) ->
6766
@get.committer("/candidate/view/<project_name>/<version_name>/<path:file_path>")
6867
async def view_path(
6968
session: web.Committer, project_name: str, version_name: str, file_path: str
70-
) -> response.Response | str:
69+
) -> web.WerkzeugResponse | str:
7170
"""View the content of a specific file in the release candidate."""
7271
await session.check_access(project_name)
7372

atr/get/compose.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
# under the License.
1717

1818
import asfquart.base as base
19-
import werkzeug.wrappers.response as response
2019

2120
import atr.blueprints.get as get
2221
import atr.db as db
@@ -27,7 +26,7 @@
2726

2827

2928
@get.committer("/compose/<project_name>/<version_name>")
30-
async def selected(session: web.Committer, project_name: str, version_name: str) -> response.Response | str:
29+
async def selected(session: web.Committer, project_name: str, version_name: str) -> web.WerkzeugResponse | str:
3130
"""Show the contents of the release candidate draft."""
3231
await session.check_access(project_name)
3332

atr/get/download.py

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import aiofiles.os
2323
import asfquart.base as base
2424
import quart
25-
import werkzeug.wrappers.response as response
2625
import zipstream
2726

2827
import atr.blueprints.get as get
@@ -37,7 +36,7 @@
3736

3837

3938
@get.committer("/download/all/<project_name>/<version_name>")
40-
async def all_selected(session: web.Committer, project_name: str, version_name: str) -> response.Response | str:
39+
async def all_selected(session: web.Committer, project_name: str, version_name: str) -> web.WerkzeugResponse | str:
4140
"""Display download commands for a release."""
4241
import atr.get.root as root
4342

@@ -64,25 +63,19 @@ async def all_selected(session: web.Committer, project_name: str, version_name:
6463

6564

6665
@get.public("/download/path/<project_name>/<version_name>/<path:file_path>")
67-
async def path(
68-
session: web.Committer | None, project_name: str, version_name: str, file_path: str
69-
) -> response.Response | quart.Response:
66+
async def path(session: web.Committer | None, project_name: str, version_name: str, file_path: str) -> web.Response:
7067
"""Download a file or list a directory from a release in any phase."""
7168
return await _download_or_list(project_name, version_name, file_path)
7269

7370

7471
@get.public("/download/path/<project_name>/<version_name>/")
75-
async def path_empty(
76-
session: web.Committer | None, project_name: str, version_name: str
77-
) -> response.Response | quart.Response:
72+
async def path_empty(session: web.Committer | None, project_name: str, version_name: str) -> web.Response:
7873
"""List files at the root of a release directory for download."""
7974
return await _download_or_list(project_name, version_name, ".")
8075

8176

8277
@get.public("/download/sh/<project_name>/<version_name>")
83-
async def sh_selected(
84-
session: web.Committer | None, project_name: str, version_name: str
85-
) -> response.Response | quart.Response:
78+
async def sh_selected(session: web.Committer | None, project_name: str, version_name: str) -> web.Response:
8679
"""Shell script to download a release."""
8780
conf = config.get()
8881
app_host = conf.APP_HOST
@@ -97,9 +90,7 @@ async def sh_selected(
9790

9891

9992
@get.public("/download/urls/<project_name>/<version_name>")
100-
async def urls_selected(
101-
session: web.Committer | None, project_name: str, version_name: str
102-
) -> response.Response | quart.Response:
93+
async def urls_selected(session: web.Committer | None, project_name: str, version_name: str) -> web.Response:
10394
try:
10495
async with db.session() as data:
10596
release = await data.release(project_name=project_name, version=version_name).demand(
@@ -114,9 +105,7 @@ async def urls_selected(
114105

115106

116107
@get.committer("/download/zip/<project_name>/<version_name>")
117-
async def zip_selected(
118-
session: web.Committer, project_name: str, version_name: str
119-
) -> response.Response | quart.wrappers.response.Response:
108+
async def zip_selected(session: web.Committer, project_name: str, version_name: str) -> web.Response:
120109
try:
121110
release = await session.release(project_name=project_name, version_name=version_name, phase=None)
122111
except ValueError as e:
@@ -146,7 +135,7 @@ async def stream_zip(file_list: list[dict[str, str]]) -> AsyncGenerator[bytes]:
146135
return web.ZipResponse(stream_zip(files_to_zip), headers=headers)
147136

148137

149-
async def _download_or_list(project_name: str, version_name: str, file_path: str) -> response.Response | quart.Response:
138+
async def _download_or_list(project_name: str, version_name: str, file_path: str) -> web.Response:
150139
"""Download a file or list a directory from a release in any phase."""
151140
import atr.get.root as root
152141

@@ -200,7 +189,7 @@ async def _generate_file_url_list(release: sql.Release) -> str:
200189

201190
async def _list(
202191
original_path: pathlib.Path, full_path: pathlib.Path, project_name: str, version_name: str, file_path: str
203-
) -> response.Response | quart.Response:
192+
) -> web.Response:
204193
# Build a list of files in the directory
205194
files: list[pathlib.Path] = []
206195
for file in await aiofiles.os.listdir(full_path):

0 commit comments

Comments
 (0)