def make_body(harness, raw, headers=None, content_type=WWWFORM): if not isinstance(raw, bytes): raw = raw.encode('ascii') if headers is None: defaults = { FORMDATA: b"multipart/form-data; boundary=AaB03x", WWWFORM: b"application/x-www-form-urlencoded" } headers = {b"Content-Type": defaults.get(content_type, content_type)} if not b'Content-Length' in headers: headers[b'Content-Length'] = str(len(raw)).encode('ascii') headers[b'Host'] = b'Blah' website = harness.client.website request = Request(website, body=BytesIO(raw), headers=headers) return request.body
def test_from_wsgi_tolerates_non_ascii_environ(): environ = {} environ[b'REQUEST_METHOD'] = b'GET' environ[b'HTTP_HOST'] = b'localhost' environ[b'SERVER_PROTOCOL'] = b'HTTP/1.0' environ[b'wsgi.input'] = None environ[b'HTTP_\xff'] = b'\xdead\xbeef' environ['HTTP_À'] = 'µ' headers = Request.from_wsgi(None, environ).headers assert headers[b'\xff'] is environ[b'HTTP_\xff'] if str is bytes: assert headers['À'] is environ['HTTP_À'] else: assert 'À' not in headers
def test_from_wsgi_tolerates_unicode_environ(harness): environ = {} environ['REQUEST_METHOD'] = 'GET' environ['HTTP_HOST'] = 'µ.example.com'.encode('utf8').decode('latin1') environ['SERVER_PROTOCOL'] = 'HTTP/1.0' environ['wsgi.input'] = None environ[b'HTTP_\xff'] = b'\xdead\xbeef' environ['HTTP_À'] = 'µ'.encode('utf8').decode('latin1') environ['PATH_INFO'] = '/µ'.encode('utf8').decode('latin1') environ['QUERY_STRING'] = 'µ=µ'.encode('utf8').decode('latin1') request = Request.from_wsgi(harness.client.website, environ) assert request.line.uri == b'/%C2%B5?%C2%B5=%C2%B5' headers = request.headers assert headers[b'Host'] == b'\xc2\xb5.example.com' assert headers[b'\xff'] is environ[b'HTTP_\xff'] assert headers['À'.encode('latin1')] == 'µ'.encode('utf8')
def test_blank_by_default(): raises(AttributeError, lambda: Request(None).version)
def test_raw_is_raw(): request = Request(None) expected = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n" actual = str(request) assert actual == expected