summaryrefslogtreecommitdiff
path: root/tests/fixtureapps/echo.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fixtureapps/echo.py')
-rw-r--r--tests/fixtureapps/echo.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/fixtureapps/echo.py b/tests/fixtureapps/echo.py
new file mode 100644
index 0000000..813bdac
--- /dev/null
+++ b/tests/fixtureapps/echo.py
@@ -0,0 +1,56 @@
+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)