50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from urllib.parse import unquote
|
|
|
|
from wptserve.utils import isomorphic_decode, isomorphic_encode
|
|
|
|
import importlib
|
|
sleep = importlib.import_module("resource-timing.sleep")
|
|
|
|
def main(request, response):
|
|
index = isomorphic_encode(request.request_path).index(b"?")
|
|
args = isomorphic_encode(request.request_path[index+1:]).split(b"&")
|
|
headers = []
|
|
statusSent = False
|
|
headersSent = False
|
|
for arg in args:
|
|
if arg.startswith(b"ignored"):
|
|
continue
|
|
elif arg.endswith(b"ms"):
|
|
sleep.sleep_at_least(float(arg[0:-2]))
|
|
elif arg.startswith(b"redirect:"):
|
|
return (302, u"WEBPERF MARKETING"), [(b"Location", unquote(isomorphic_decode(arg[9:])))], u"TEST"
|
|
|
|
elif arg.startswith(b"mime:"):
|
|
headers.append((b"Content-Type", unquote(isomorphic_decode(arg[5:]))))
|
|
|
|
elif arg.startswith(b"send:"):
|
|
text = unquote(isomorphic_decode(arg[5:]))
|
|
|
|
if not statusSent:
|
|
# Default to a 200 status code.
|
|
response.writer.write_status(200)
|
|
statusSent = True
|
|
if not headersSent:
|
|
for key, value in headers:
|
|
response.writer.write_header(key, value)
|
|
response.writer.end_headers()
|
|
headersSent = True
|
|
|
|
response.writer.write_content(text)
|
|
elif arg.startswith(b"status:"):
|
|
code = int(unquote(isomorphic_decode(arg[7:])))
|
|
response.writer.write_status(code)
|
|
if code // 100 == 1:
|
|
# Terminate informational 1XX responses with an empty line.
|
|
response.writer.end_headers()
|
|
else:
|
|
statusSent = True
|
|
|
|
# else:
|
|
# error " INVALID ARGUMENT %s" % arg
|
|
|