Skip to content

Commit 2560da2

Browse files
committed
Switch from ResponseTypes to ResponseReturnValue
As suggested in pallets/quart#288
1 parent 84b0c47 commit 2560da2

File tree

1 file changed

+32
-34
lines changed

1 file changed

+32
-34
lines changed

dummyserver/app.py

+32-34
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@
1212
from typing import Iterator
1313

1414
import trio
15-
from quart import make_response, request
16-
17-
# TODO switch to Response if https://github.com/pallets/quart/issues/288 is fixed
18-
from quart.typing import ResponseTypes
15+
from quart import Response, make_response, request
16+
from quart.typing import ResponseReturnValue
1917
from quart_trio import QuartTrio
2018

2119
hypercorn_app = QuartTrio(__name__)
@@ -39,19 +37,19 @@
3937
@hypercorn_app.route("/")
4038
@pyodide_testing_app.route("/")
4139
@pyodide_testing_app.route("/index")
42-
async def index() -> ResponseTypes:
40+
async def index() -> ResponseReturnValue:
4341
return await make_response("Dummy server!")
4442

4543

4644
@hypercorn_app.route("/alpn_protocol")
47-
async def alpn_protocol() -> ResponseTypes:
45+
async def alpn_protocol() -> ResponseReturnValue:
4846
"""Return the requester's certificate."""
4947
alpn_protocol = request.scope["extensions"]["tls"]["alpn_protocol"]
5048
return await make_response(alpn_protocol)
5149

5250

5351
@hypercorn_app.route("/certificate")
54-
async def certificate() -> ResponseTypes:
52+
async def certificate() -> ResponseReturnValue:
5553
"""Return the requester's certificate."""
5654
print("scope", request.scope)
5755
subject = request.scope["extensions"]["tls"]["client_cert_name"]
@@ -61,7 +59,7 @@ async def certificate() -> ResponseTypes:
6159

6260
@hypercorn_app.route("/specific_method", methods=["GET", "POST", "PUT"])
6361
@pyodide_testing_app.route("/specific_method", methods=["GET", "POST", "PUT"])
64-
async def specific_method() -> ResponseTypes:
62+
async def specific_method() -> ResponseReturnValue:
6563
"Confirm that the request matches the desired method type"
6664
method_param = (await request.values).get("method", "")
6765

@@ -74,7 +72,7 @@ async def specific_method() -> ResponseTypes:
7472

7573

7674
@hypercorn_app.route("/upload", methods=["POST"])
77-
async def upload() -> ResponseTypes:
75+
async def upload() -> ResponseReturnValue:
7876
"Confirm that the uploaded file conforms to specification"
7977
params = await request.form
8078
param = params.get("upload_param")
@@ -105,7 +103,7 @@ async def upload() -> ResponseTypes:
105103

106104

107105
@hypercorn_app.route("/chunked")
108-
async def chunked() -> ResponseTypes:
106+
async def chunked() -> ResponseReturnValue:
109107
def generate() -> Iterator[str]:
110108
for _ in range(4):
111109
yield "123"
@@ -114,7 +112,7 @@ def generate() -> Iterator[str]:
114112

115113

116114
@hypercorn_app.route("/chunked_gzip")
117-
async def chunked_gzip() -> ResponseTypes:
115+
async def chunked_gzip() -> ResponseReturnValue:
118116
def generate() -> Iterator[bytes]:
119117
compressor = zlib.compressobj(6, zlib.DEFLATED, 16 + zlib.MAX_WBITS)
120118

@@ -126,7 +124,7 @@ def generate() -> Iterator[bytes]:
126124

127125

128126
@hypercorn_app.route("/keepalive")
129-
async def keepalive() -> ResponseTypes:
127+
async def keepalive() -> ResponseReturnValue:
130128
if request.args.get("close", b"0") == b"1":
131129
headers = [("Connection", "close")]
132130
return await make_response("Closing", 200, headers)
@@ -136,7 +134,7 @@ async def keepalive() -> ResponseTypes:
136134

137135

138136
@hypercorn_app.route("/echo", methods=["GET", "POST", "PUT"])
139-
async def echo() -> ResponseTypes:
137+
async def echo() -> ResponseReturnValue:
140138
"Echo back the params"
141139
if request.method == "GET":
142140
return await make_response(request.query_string)
@@ -146,7 +144,7 @@ async def echo() -> ResponseTypes:
146144

147145
@hypercorn_app.route("/echo_json", methods=["POST"])
148146
@pyodide_testing_app.route("/echo_json", methods=["POST", "OPTIONS"])
149-
async def echo_json() -> ResponseTypes:
147+
async def echo_json() -> ResponseReturnValue:
150148
"Echo back the JSON"
151149
if request.method == "OPTIONS":
152150
return await make_response("", 200)
@@ -156,27 +154,27 @@ async def echo_json() -> ResponseTypes:
156154

157155
@hypercorn_app.route("/echo_uri/<path:rest>")
158156
@hypercorn_app.route("/echo_uri", defaults={"rest": ""})
159-
async def echo_uri(rest: str) -> ResponseTypes:
157+
async def echo_uri(rest: str) -> ResponseReturnValue:
160158
"Echo back the requested URI"
161159
assert request.full_path is not None
162160
return await make_response(request.full_path)
163161

164162

165163
@hypercorn_app.route("/echo_params")
166-
async def echo_params() -> ResponseTypes:
164+
async def echo_params() -> ResponseReturnValue:
167165
"Echo back the query parameters"
168166
await request.get_data()
169167
echod = sorted((k, v) for k, v in request.args.items())
170168
return await make_response(repr(echod))
171169

172170

173171
@hypercorn_app.route("/headers", methods=["GET", "POST"])
174-
async def headers() -> ResponseTypes:
172+
async def headers() -> ResponseReturnValue:
175173
return await make_response(dict(request.headers.items()))
176174

177175

178176
@hypercorn_app.route("/headers_and_params")
179-
async def headers_and_params() -> ResponseTypes:
177+
async def headers_and_params() -> ResponseReturnValue:
180178
return await make_response(
181179
{
182180
"headers": dict(request.headers),
@@ -186,12 +184,12 @@ async def headers_and_params() -> ResponseTypes:
186184

187185

188186
@hypercorn_app.route("/multi_headers", methods=["GET", "POST"])
189-
async def multi_headers() -> ResponseTypes:
187+
async def multi_headers() -> ResponseReturnValue:
190188
return await make_response({"headers": list(request.headers)})
191189

192190

193191
@hypercorn_app.route("/multi_redirect")
194-
async def multi_redirect() -> ResponseTypes:
192+
async def multi_redirect() -> ResponseReturnValue:
195193
"Performs a redirect chain based on ``redirect_codes``"
196194
params = request.args
197195
codes = params.get("redirect_codes", "200")
@@ -206,7 +204,7 @@ async def multi_redirect() -> ResponseTypes:
206204

207205

208206
@hypercorn_app.route("/encodingrequest")
209-
async def encodingrequest() -> ResponseTypes:
207+
async def encodingrequest() -> ResponseReturnValue:
210208
"Check for UA accepting gzip/deflate encoding"
211209
data = b"hello, world!"
212210
encoding = request.headers.get("Accept-Encoding", "")
@@ -230,7 +228,7 @@ async def encodingrequest() -> ResponseTypes:
230228

231229

232230
@hypercorn_app.route("/redirect", methods=["GET", "POST", "PUT"])
233-
async def redirect() -> ResponseTypes:
231+
async def redirect() -> ResponseReturnValue:
234232
"Perform a redirect to ``target``"
235233
values = await request.values
236234
target = values.get("target", "/")
@@ -242,7 +240,7 @@ async def redirect() -> ResponseTypes:
242240

243241

244242
@hypercorn_app.route("/redirect_after")
245-
async def redirect_after() -> ResponseTypes:
243+
async def redirect_after() -> ResponseReturnValue:
246244
"Perform a redirect to ``target``"
247245
params = request.args
248246
date = params.get("date")
@@ -258,7 +256,7 @@ async def redirect_after() -> ResponseTypes:
258256

259257

260258
@hypercorn_app.route("/retry_after")
261-
async def retry_after() -> ResponseTypes:
259+
async def retry_after() -> ResponseReturnValue:
262260
global LAST_RETRY_AFTER_REQ
263261
params = request.args
264262
if datetime.datetime.now() - LAST_RETRY_AFTER_REQ < datetime.timedelta(seconds=1):
@@ -273,21 +271,21 @@ async def retry_after() -> ResponseTypes:
273271

274272
@hypercorn_app.route("/status")
275273
@pyodide_testing_app.route("/status")
276-
async def status() -> ResponseTypes:
274+
async def status() -> ResponseReturnValue:
277275
values = await request.values
278276
status = values.get("status", "200 OK")
279277
status_code = status.split(" ")[0]
280278
return await make_response("", status_code)
281279

282280

283281
@hypercorn_app.route("/source_address")
284-
async def source_address() -> ResponseTypes:
282+
async def source_address() -> ResponseReturnValue:
285283
"""Return the requester's IP address."""
286284
return await make_response(request.remote_addr)
287285

288286

289287
@hypercorn_app.route("/successful_retry", methods=["GET", "PUT"])
290-
async def successful_retry() -> ResponseTypes:
288+
async def successful_retry() -> ResponseReturnValue:
291289
"""First return an error and then success
292290
293291
It's not currently very flexible as the number of retries is hard-coded.
@@ -305,35 +303,35 @@ async def successful_retry() -> ResponseTypes:
305303

306304

307305
@pyodide_testing_app.after_request
308-
def apply_caching(response: ResponseTypes) -> ResponseTypes:
306+
def apply_caching(response: Response) -> ResponseReturnValue:
309307
for header, value in DEFAULT_HEADERS:
310308
response.headers[header] = value
311309
return response
312310

313311

314312
@pyodide_testing_app.route("/slow")
315-
async def slow() -> ResponseTypes:
313+
async def slow() -> ResponseReturnValue:
316314
await trio.sleep(10)
317315
return await make_response("TEN SECONDS LATER", 200)
318316

319317

320318
@pyodide_testing_app.route("/bigfile")
321-
async def bigfile() -> ResponseTypes:
319+
async def bigfile() -> ResponseReturnValue:
322320
# great big text file, should force streaming
323321
# if supported
324322
bigdata = 1048576 * b"WOOO YAY BOOYAKAH"
325323
return await make_response(bigdata, 200)
326324

327325

328326
@pyodide_testing_app.route("/mediumfile")
329-
async def mediumfile() -> ResponseTypes:
327+
async def mediumfile() -> ResponseReturnValue:
330328
# quite big file
331329
bigdata = 1024 * b"WOOO YAY BOOYAKAH"
332330
return await make_response(bigdata, 200)
333331

334332

335333
@pyodide_testing_app.route("/upload", methods=["POST", "OPTIONS"])
336-
async def pyodide_upload() -> ResponseTypes:
334+
async def pyodide_upload() -> ResponseReturnValue:
337335
if request.method == "OPTIONS":
338336
return await make_response("", 200)
339337
spare_data = await request.get_data(parse_form_data=True)
@@ -356,7 +354,7 @@ async def pyodide_upload() -> ResponseTypes:
356354

357355

358356
@pyodide_testing_app.route("/pyodide/<py_file>")
359-
async def pyodide(py_file: str) -> ResponseTypes:
357+
async def pyodide(py_file: str) -> ResponseReturnValue:
360358
file_path = Path(pyodide_testing_app.config["pyodide_dist_dir"], py_file)
361359
if file_path.exists():
362360
mime_type, encoding = mimetypes.guess_type(file_path)
@@ -370,7 +368,7 @@ async def pyodide(py_file: str) -> ResponseTypes:
370368

371369

372370
@pyodide_testing_app.route("/wheel/dist.whl")
373-
async def wheel() -> ResponseTypes:
371+
async def wheel() -> ResponseReturnValue:
374372
# serve our wheel
375373
wheel_folder = Path(__file__).parent.parent / "dist"
376374
wheels = list(wheel_folder.glob("*.whl"))

0 commit comments

Comments
 (0)