Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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')
Exemplo n.º 5
0
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')
Exemplo n.º 6
0
def test_blank_by_default():
    raises(AttributeError, lambda: Request(None).version)
Exemplo n.º 7
0
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