You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bazarr/libs/waitress/tests/fixtureapps/echo.py

57 lines
1.7 KiB

from collections import namedtuple
import json
def app_body_only(environ, start_response): # pragma: no cover
cl = environ.get("CONTENT_LENGTH", None)
if cl is not None:
cl = int(cl)
body = environ["wsgi.input"].read(cl)
cl = str(len(body))
start_response("200 OK", [("Content-Length", cl), ("Content-Type", "text/plain"),])
return [body]
def app(environ, start_response): # pragma: no cover
cl = environ.get("CONTENT_LENGTH", None)
if cl is not None:
cl = int(cl)
request_body = environ["wsgi.input"].read(cl)
cl = str(len(request_body))
meta = {
"method": environ["REQUEST_METHOD"],
"path_info": environ["PATH_INFO"],
"script_name": environ["SCRIPT_NAME"],
"query_string": environ["QUERY_STRING"],
"content_length": cl,
"scheme": environ["wsgi.url_scheme"],
"remote_addr": environ["REMOTE_ADDR"],
"remote_host": environ["REMOTE_HOST"],
"server_port": environ["SERVER_PORT"],
"server_name": environ["SERVER_NAME"],
"headers": {
k[len("HTTP_") :]: v for k, v in environ.items() if k.startswith("HTTP_")
},
}
response = json.dumps(meta).encode("utf8") + b"\r\n\r\n" + request_body
start_response(
"200 OK",
[("Content-Length", str(len(response))), ("Content-Type", "text/plain"),],
)
return [response]
Echo = namedtuple(
"Echo",
(
"method path_info script_name query_string content_length scheme "
"remote_addr remote_host server_port server_name headers body"
),
)
def parse_response(response):
meta, body = response.split(b"\r\n\r\n", 1)
meta = json.loads(meta.decode("utf8"))
return Echo(body=body, **meta)