SyntheticResponse.py (1792B)
1 from urllib.parse import unquote 2 3 from wptserve.utils import isomorphic_decode, isomorphic_encode 4 5 import importlib 6 sleep = importlib.import_module("resource-timing.sleep") 7 8 def main(request, response): 9 index = isomorphic_encode(request.request_path).index(b"?") 10 args = isomorphic_encode(request.request_path[index+1:]).split(b"&") 11 headers = [] 12 statusSent = False 13 headersSent = False 14 for arg in args: 15 if arg.startswith(b"ignored"): 16 continue 17 elif arg.endswith(b"ms"): 18 sleep.sleep_at_least(float(arg[0:-2])) 19 elif arg.startswith(b"redirect:"): 20 return (302, u"WEBPERF MARKETING"), [(b"Location", unquote(isomorphic_decode(arg[9:])))], u"TEST" 21 22 elif arg.startswith(b"mime:"): 23 headers.append((b"Content-Type", unquote(isomorphic_decode(arg[5:])))) 24 25 elif arg.startswith(b"send:"): 26 text = unquote(isomorphic_decode(arg[5:])) 27 28 if not statusSent: 29 # Default to a 200 status code. 30 response.writer.write_status(200) 31 statusSent = True 32 if not headersSent: 33 for key, value in headers: 34 response.writer.write_header(key, value) 35 response.writer.end_headers() 36 headersSent = True 37 38 response.writer.write_content(text) 39 elif arg.startswith(b"status:"): 40 code = int(unquote(isomorphic_decode(arg[7:]))) 41 response.writer.write_status(code) 42 if code // 100 == 1: 43 # Terminate informational 1XX responses with an empty line. 44 response.writer.end_headers() 45 else: 46 statusSent = True 47 48 # else: 49 # error " INVALID ARGUMENT %s" % arg