import io
import itertools
+import sys
import typing
from urllib.parse import unquote
raise_app_exceptions: bool = True,
script_name: str = "",
remote_addr: str = "127.0.0.1",
+ wsgi_errors: typing.Optional[typing.TextIO] = None,
) -> None:
self.app = app
self.raise_app_exceptions = raise_app_exceptions
self.script_name = script_name
self.remote_addr = remote_addr
+ self.wsgi_errors = wsgi_errors
def handle_request(
self,
"wsgi.version": (1, 0),
"wsgi.url_scheme": scheme.decode("ascii"),
"wsgi.input": wsgi_input,
- "wsgi.errors": io.BytesIO(),
+ "wsgi.errors": self.wsgi_errors or sys.stderr,
"wsgi.multithread": True,
"wsgi.multiprocess": False,
"wsgi.run_once": False,
import sys
import wsgiref.validate
from functools import partial
+from io import StringIO
import pytest
return [output]
+def log_to_wsgi_log_buffer(environ, start_response):
+ print("test1", file=environ["wsgi.errors"])
+ environ["wsgi.errors"].write("test2")
+ return echo_body(environ, start_response)
+
+
def test_wsgi():
client = httpx.Client(app=application_factory([b"Hello, World!"]))
response = client.get("http://www.example.org/")
assert response.text == ""
+def test_logging():
+ buffer = StringIO()
+ transport = httpx.WSGITransport(app=log_to_wsgi_log_buffer, wsgi_errors=buffer)
+ client = httpx.Client(transport=transport)
+ response = client.post("http://www.example.org/", content=b"example")
+ assert response.status_code == 200 # no errors
+ buffer.seek(0)
+ assert buffer.read() == "test1\ntest2"
+
+
@pytest.mark.parametrize(
"url, expected_server_port",
[