blob: c9ae7d3c8991ef999f4695f0f2d9682f860aaf3e [file] [edit]
from datetime import tzinfo
from datetime import timedelta
import pytest
from webob.compat import (
native_,
text_,
)
from webob.request import Request
class GMT(tzinfo):
"""UTC"""
ZERO = timedelta(0)
def utcoffset(self, dt):
return self.ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return self.ZERO
class MockDescriptor:
_val = 'avalue'
def __get__(self, obj, type=None):
return self._val
def __set__(self, obj, val):
self._val = val
def __delete__(self, obj):
self._val = None
def test_environ_getter_docstring():
from webob.descriptors import environ_getter
desc = environ_getter('akey')
assert desc.__doc__ == "Gets and sets the ``akey`` key in the environment."
def test_environ_getter_nodefault_keyerror():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey')
with pytest.raises(KeyError):
desc.fget(req)
def test_environ_getter_nodefault_fget():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey')
desc.fset(req, 'bar')
assert req.environ['akey'] == 'bar'
def test_environ_getter_nodefault_fdel():
from webob.descriptors import environ_getter
desc = environ_getter('akey')
assert desc.fdel is None
def test_environ_getter_default_fget():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey', default='the_default')
assert desc.fget(req) == 'the_default'
def test_environ_getter_default_fset():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey', default='the_default')
desc.fset(req, 'bar')
assert req.environ['akey'] == 'bar'
def test_environ_getter_default_fset_none():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey', default='the_default')
desc.fset(req, 'baz')
desc.fset(req, None)
assert 'akey' not in req.environ
def test_environ_getter_default_fdel():
from webob.descriptors import environ_getter
req = Request.blank('/')
desc = environ_getter('akey', default='the_default')
desc.fset(req, 'baz')
assert 'akey' in req.environ
desc.fdel(req)
assert 'akey' not in req.environ
def test_environ_getter_rfc_section():
from webob.descriptors import environ_getter
desc = environ_getter('HTTP_X_AKEY', rfc_section='14.3')
assert desc.__doc__ == "Gets and sets the ``X-Akey`` header "\
"(`HTTP spec section 14.3 "\
"<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>`_)."
def test_upath_property_fget():
from webob.descriptors import upath_property
req = Request.blank('/')
desc = upath_property('akey')
assert desc.fget(req) == ''
def test_upath_property_fset():
from webob.descriptors import upath_property
req = Request.blank('/')
desc = upath_property('akey')
desc.fset(req, 'avalue')
assert desc.fget(req) == 'avalue'
def test_header_getter_doc():
from webob.descriptors import header_getter
desc = header_getter('X-Header', '14.3')
assert('http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3'
in desc.__doc__)
assert '``X-Header`` header' in desc.__doc__
def test_header_getter_fget():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
assert desc.fget(resp) is None
def test_header_getter_fset():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue')
assert desc.fget(resp) == 'avalue'
def test_header_getter_fset_none():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue')
desc.fset(resp, None)
assert desc.fget(resp) is None
def test_header_getter_fset_text():
from webob.compat import text_
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, text_('avalue'))
assert desc.fget(resp) == 'avalue'
def test_header_getter_fset_text_control_chars():
from webob.compat import text_
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
with pytest.raises(ValueError):
desc.fset(resp, text_('\n'))
def test_header_getter_fdel():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue2')
desc.fdel(resp)
assert desc.fget(resp) is None
def test_header_getter_unicode_fget_none():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
assert desc.fget(resp) is None
def test_header_getter_unicode_fget():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue')
assert desc.fget(resp) == 'avalue'
def test_header_getter_unicode_fset_none():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, None)
assert desc.fget(resp) is None
def test_header_getter_unicode_fset():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue2')
assert desc.fget(resp) == 'avalue2'
def test_header_getter_unicode_fdel():
from webob.descriptors import header_getter
from webob import Response
resp = Response('aresp')
desc = header_getter('AHEADER', '14.3')
desc.fset(resp, 'avalue3')
desc.fdel(resp)
assert desc.fget(resp) is None
def test_converter_not_prop():
from webob.descriptors import converter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
with pytest.raises(AssertionError):
converter(
('CONTENT_LENGTH', None, '14.13'),
parse_int_safe, serialize_int,
'int')
def test_converter_with_name_docstring():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int, 'int')
assert 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13' in desc.__doc__
assert '``Content-Length`` header' in desc.__doc__
def test_converter_with_name_fget():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int, 'int')
assert desc.fget(req) == 666
def test_converter_with_name_fset():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int, 'int')
desc.fset(req, '999')
assert desc.fget(req) == 999
def test_converter_without_name_fget():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int)
assert desc.fget(req) == 666
def test_converter_without_name_fset():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int)
desc.fset(req, '999')
assert desc.fget(req) == 999
def test_converter_none_for_wrong_type():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', 'sixsixsix', '14.13'),
parse_int_safe, serialize_int, 'int')
assert desc.fget(req) is None
def test_converter_delete():
from webob.descriptors import converter
from webob.descriptors import environ_getter
from webob.descriptors import parse_int_safe
from webob.descriptors import serialize_int
req = Request.blank('/')
desc = converter(
environ_getter('CONTENT_LENGTH', '666', '14.13'),
parse_int_safe, serialize_int, 'int')
with pytest.raises(KeyError):
desc.fdel(req)
def test_list_header():
from webob.descriptors import list_header
desc = list_header('CONTENT_LENGTH', '14.13')
assert type(desc) == property
def test_parse_list_single():
from webob.descriptors import parse_list
result = parse_list('avalue')
assert result == ('avalue',)
def test_parse_list_multiple():
from webob.descriptors import parse_list
result = parse_list('avalue,avalue2')
assert result == ('avalue', 'avalue2')
def test_parse_list_none():
from webob.descriptors import parse_list
result = parse_list(None)
assert result is None
def test_parse_list_unicode_single():
from webob.descriptors import parse_list
result = parse_list('avalue')
assert result == ('avalue',)
def test_parse_list_unicode_multiple():
from webob.descriptors import parse_list
result = parse_list('avalue,avalue2')
assert result == ('avalue', 'avalue2')
def test_serialize_list():
from webob.descriptors import serialize_list
result = serialize_list(('avalue', 'avalue2'))
assert result == 'avalue, avalue2'
def test_serialize_list_string():
from webob.descriptors import serialize_list
result = serialize_list('avalue')
assert result == 'avalue'
def test_serialize_list_unicode():
from webob.descriptors import serialize_list
result = serialize_list('avalue')
assert result == 'avalue'
def test_converter_date():
import datetime
from webob.descriptors import converter_date
from webob.descriptors import environ_getter
req = Request.blank('/')
UTC = GMT()
desc = converter_date(environ_getter(
"HTTP_DATE", "Tue, 15 Nov 1994 08:12:31 GMT", "14.8"))
assert desc.fget(req) == datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC)
def test_converter_date_docstring():
from webob.descriptors import converter_date
from webob.descriptors import environ_getter
desc = converter_date(environ_getter(
"HTTP_DATE", "Tue, 15 Nov 1994 08:12:31 GMT", "14.8"))
assert 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8' in desc.__doc__
assert '``Date`` header' in desc.__doc__
def test_date_header_fget_none():
from webob import Response
from webob.descriptors import date_header
resp = Response('aresponse')
desc = date_header('HTTP_DATE', "14.8")
assert desc.fget(resp) is None
def test_date_header_fset_fget():
import datetime
from webob import Response
from webob.descriptors import date_header
resp = Response('aresponse')
UTC = GMT()
desc = date_header('HTTP_DATE', "14.8")
desc.fset(resp, "Tue, 15 Nov 1994 08:12:31 GMT")
assert desc.fget(resp) == datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC)
def test_date_header_fdel():
from webob import Response
from webob.descriptors import date_header
resp = Response('aresponse')
desc = date_header('HTTP_DATE', "14.8")
desc.fset(resp, "Tue, 15 Nov 1994 08:12:31 GMT")
desc.fdel(resp)
assert desc.fget(resp) is None
def test_deprecated_property():
from webob.descriptors import deprecated_property
class Foo(object):
pass
Foo.attr = deprecated_property('attr', 'attr', 'whatever', '1.2')
foo = Foo()
with pytest.raises(DeprecationWarning):
getattr(foo, 'attr')
with pytest.raises(DeprecationWarning):
setattr(foo, 'attr', {})
with pytest.raises(DeprecationWarning):
delattr(foo, 'attr')
def test_parse_etag_response():
from webob.descriptors import parse_etag_response
etresp = parse_etag_response("etag")
assert etresp == "etag"
def test_parse_etag_response_quoted():
from webob.descriptors import parse_etag_response
etresp = parse_etag_response('"etag"')
assert etresp == "etag"
def test_parse_etag_response_is_none():
from webob.descriptors import parse_etag_response
etresp = parse_etag_response(None)
assert etresp is None
def test_serialize_etag_response():
from webob.descriptors import serialize_etag_response
etresp = serialize_etag_response("etag")
assert etresp == '"etag"'
def test_serialize_if_range_string():
from webob.descriptors import serialize_if_range
val = serialize_if_range("avalue")
assert val == "avalue"
def test_serialize_if_range_unicode():
from webob.descriptors import serialize_if_range
val = serialize_if_range("avalue")
assert val == "avalue"
def test_serialize_if_range_datetime():
import datetime
from webob.descriptors import serialize_if_range
UTC = GMT()
val = serialize_if_range(datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC))
assert val, "Tue == 15 Nov 1994 08:12:31 GMT"
def test_serialize_if_range_other():
from webob.descriptors import serialize_if_range
val = serialize_if_range(123456)
assert val == '123456'
def test_parse_range_none():
from webob.descriptors import parse_range
assert parse_range(None) is None
def test_parse_range_type():
from webob.byterange import Range
from webob.descriptors import parse_range
val = parse_range("bytes=1-500")
assert type(val) is type(Range.parse("bytes=1-500"))
def test_parse_range_values():
from webob.byterange import Range
range = Range.parse("bytes=1-500")
assert range.start == 1
assert range.end == 501
def test_serialize_range_none():
from webob.descriptors import serialize_range
val = serialize_range(None)
assert val is None
def test_serialize_range():
from webob.descriptors import serialize_range
val = serialize_range((1, 500))
assert val == 'bytes=1-499'
def test_parse_int_none():
from webob.descriptors import parse_int
val = parse_int(None)
assert val is None
def test_parse_int_emptystr():
from webob.descriptors import parse_int
val = parse_int('')
assert val is None
def test_parse_int():
from webob.descriptors import parse_int
val = parse_int('123')
assert val == 123
def test_parse_int_invalid():
from webob.descriptors import parse_int
with pytest.raises(ValueError):
parse_int('abc')
def test_parse_int_safe_none():
from webob.descriptors import parse_int_safe
assert parse_int_safe(None) is None
def test_parse_int_safe_emptystr():
from webob.descriptors import parse_int_safe
assert parse_int_safe('') is None
def test_parse_int_safe():
from webob.descriptors import parse_int_safe
assert parse_int_safe('123') == 123
def test_parse_int_safe_invalid():
from webob.descriptors import parse_int_safe
assert parse_int_safe('abc') is None
def test_serialize_int():
from webob.descriptors import serialize_int
assert serialize_int is str
def test_parse_content_range_none():
from webob.descriptors import parse_content_range
assert parse_content_range(None) is None
def test_parse_content_range_emptystr():
from webob.descriptors import parse_content_range
assert parse_content_range(' ') is None
def test_parse_content_range_length():
from webob.byterange import ContentRange
from webob.descriptors import parse_content_range
val = parse_content_range("bytes 0-499/1234")
assert val.length == ContentRange.parse("bytes 0-499/1234").length
def test_parse_content_range_start():
from webob.byterange import ContentRange
from webob.descriptors import parse_content_range
val = parse_content_range("bytes 0-499/1234")
assert val.start == ContentRange.parse("bytes 0-499/1234").start
def test_parse_content_range_stop():
from webob.byterange import ContentRange
from webob.descriptors import parse_content_range
val = parse_content_range("bytes 0-499/1234")
assert val.stop == ContentRange.parse("bytes 0-499/1234").stop
def test_serialize_content_range_none():
from webob.descriptors import serialize_content_range
assert serialize_content_range(None) == 'None' ### XXX: Seems wrong
def test_serialize_content_range_emptystr():
from webob.descriptors import serialize_content_range
assert serialize_content_range('') is None
def test_serialize_content_range_invalid():
from webob.descriptors import serialize_content_range
with pytest.raises(ValueError):
serialize_content_range((1,))
def test_serialize_content_range_asterisk():
from webob.descriptors import serialize_content_range
assert serialize_content_range((0, 500)) == 'bytes 0-499/*'
def test_serialize_content_range_defined():
from webob.descriptors import serialize_content_range
assert serialize_content_range((0, 500, 1234)) == 'bytes 0-499/1234'
def test_parse_auth_params_leading_capital_letter():
from webob.descriptors import parse_auth_params
val = parse_auth_params('Basic Realm=WebOb')
assert val == {'ealm': 'WebOb'}
def test_parse_auth_params_trailing_capital_letter():
from webob.descriptors import parse_auth_params
val = parse_auth_params('Basic realM=WebOb')
assert val == {}
def test_parse_auth_params_doublequotes():
from webob.descriptors import parse_auth_params
val = parse_auth_params('Basic realm="Web Object"')
assert val == {'realm': 'Web Object'}
def test_parse_auth_params_multiple_values():
from webob.descriptors import parse_auth_params
val = parse_auth_params("foo='blah &&234', qop=foo, nonce='qwerty1234'")
assert val == {'nonce': "'qwerty1234'", 'foo': "'blah &&234'", 'qop': 'foo'}
def test_parse_auth_params_truncate_on_comma():
from webob.descriptors import parse_auth_params
val = parse_auth_params("Basic realm=WebOb,this_will_truncate")
assert val == {'realm': 'WebOb'}
def test_parse_auth_params_emptystr():
from webob.descriptors import parse_auth_params
assert parse_auth_params('') == {}
def test_parse_auth_params_bad_whitespace():
from webob.descriptors import parse_auth_params
assert parse_auth_params('a= "2 ", b =3, c=4 ') == {
'a': '2 ',
'b': '3',
'c': '4'
}
def test_authorization2():
from webob.descriptors import parse_auth_params
for s, d in [
('x=y', {'x': 'y'}),
('x="y"', {'x': 'y'}),
('x=y,z=z', {'x': 'y', 'z': 'z'}),
('x=y, z=z', {'x': 'y', 'z': 'z'}),
('x="y",z=z', {'x': 'y', 'z': 'z'}),
('x="y", z=z', {'x': 'y', 'z': 'z'}),
('x="y,x", z=z', {'x': 'y,x', 'z': 'z'}),
]:
assert parse_auth_params(s) == d
def test_parse_auth_none():
from webob.descriptors import parse_auth
assert parse_auth(None) is None
def test_parse_auth_emptystr():
from webob.descriptors import parse_auth
assert parse_auth('') == ('', '')
def test_parse_auth_bearer():
from webob.descriptors import parse_auth
assert parse_auth('Bearer token').authtype == 'Bearer'
assert parse_auth('Bearer token').params == 'token'
def test_parse_auth_unknown_nospace():
from webob.descriptors import parse_auth
assert parse_auth('NoSpace') == ('NoSpace', '')
def test_parse_auth_known_nospace():
from webob.descriptors import parse_auth
assert parse_auth('Digest') == ('Digest', {})
def test_parse_auth_basic():
from webob.descriptors import parse_auth
assert parse_auth("Basic realm=WebOb") == ('Basic', 'realm=WebOb')
def test_parse_auth_basic_quoted():
from webob.descriptors import parse_auth
assert parse_auth('Basic realm="Web Ob"') == ('Basic', {'realm': 'Web Ob'})
def test_parse_auth_basic_quoted_multiple_unknown():
from webob.descriptors import parse_auth
assert parse_auth("foo='blah &&234', qop=foo, nonce='qwerty1234'") == (
"foo='blah",
"&&234', qop=foo, nonce='qwerty1234'"
)
def test_parse_auth_basic_quoted_known_multiple():
from webob.descriptors import parse_auth
assert parse_auth("Basic realm='blah &&234', qop=foo, nonce='qwerty1234'") == (
'Basic',
"realm='blah &&234', qop=foo, nonce='qwerty1234'"
)
def test_serialize_auth_none():
from webob.descriptors import serialize_auth
assert serialize_auth(None) is None
def test_serialize_auth_emptystr():
from webob.descriptors import serialize_auth
assert serialize_auth('') == ''
def test_serialize_auth_str():
from webob.descriptors import serialize_auth
assert serialize_auth('some string') == 'some string'
def test_serialize_auth_parsed_emptystr():
from webob.descriptors import serialize_auth
assert serialize_auth(('', '')) == ' '
def test_serialize_auth_parsed_unknown_nospace():
from webob.descriptors import serialize_auth
assert serialize_auth(('NoSpace', '')) == 'NoSpace '
def test_serialize_auth_parsed_known_nospace():
from webob.descriptors import serialize_auth
assert serialize_auth(('Digest', {})) == 'Digest '
def test_serialize_auth_basic_quoted():
from webob.descriptors import serialize_auth
val = serialize_auth(('Basic', 'realm="WebOb"'))
assert val == 'Basic realm="WebOb"'
def test_serialize_auth_digest_multiple():
from webob.descriptors import serialize_auth
val = serialize_auth(('Digest', 'realm="WebOb", nonce=abcde12345, qop=foo'))
flags = val[len('Digest'):]
result = sorted([ x.strip() for x in flags.split(',') ])
assert result == ['nonce=abcde12345', 'qop=foo', 'realm="WebOb"']
def test_serialize_auth_digest_tuple():
from webob.descriptors import serialize_auth
val = serialize_auth(('Digest', {'realm':'"WebOb"', 'nonce':'abcde12345', 'qop':'foo'}))
flags = val[len('Digest'):]
result = sorted([ x.strip() for x in flags.split(',') ])
assert result == ['nonce="abcde12345"', 'qop="foo"', 'realm=""WebOb""']
_nodefault = object()
class _TestEnvironDecoder(object):
def _callFUT(self, key, default=_nodefault, rfc_section=None,
encattr=None):
from webob.descriptors import environ_decoder
if default is _nodefault:
return environ_decoder(key, rfc_section=rfc_section,
encattr=encattr)
else:
return environ_decoder(key, default=default,
rfc_section=rfc_section, encattr=encattr)
def test_docstring(self):
desc = self._callFUT('akey')
assert desc.__doc__ == "Gets and sets the ``akey`` key in the environment."
def test_nodefault_keyerror(self):
req = self._makeRequest()
desc = self._callFUT('akey')
with pytest.raises(KeyError):
desc.fget(req)
def test_nodefault_fget(self):
req = self._makeRequest()
desc = self._callFUT('akey')
desc.fset(req, 'bar')
assert req.environ['akey'] == 'bar'
def test_nodefault_fdel(self):
desc = self._callFUT('akey')
assert desc.fdel is None
def test_default_fget(self):
req = self._makeRequest()
desc = self._callFUT('akey', default='the_default')
assert desc.fget(req) == 'the_default'
def test_default_fset(self):
req = self._makeRequest()
desc = self._callFUT('akey', default='the_default')
desc.fset(req, 'bar')
assert req.environ['akey'] == 'bar'
def test_default_fset_none(self):
req = self._makeRequest()
desc = self._callFUT('akey', default='the_default')
desc.fset(req, 'baz')
desc.fset(req, None)
assert 'akey' not in req.environ
def test_default_fdel(self):
req = self._makeRequest()
desc = self._callFUT('akey', default='the_default')
desc.fset(req, 'baz')
assert 'akey' in req.environ
desc.fdel(req)
assert 'akey' not in req.environ
def test_rfc_section(self):
desc = self._callFUT('HTTP_X_AKEY', rfc_section='14.3')
assert desc.__doc__ == "Gets and sets the ``X-Akey`` header "\
"(`HTTP spec section 14.3 "\
"<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>`_)."
def test_fset_nonascii(self):
desc = self._callFUT('HTTP_X_AKEY', encattr='url_encoding')
req = self._makeRequest()
desc.fset(req, text_(b'\xc3\xab', 'utf-8'))
assert req.environ['HTTP_X_AKEY'] == native_(b'\xc3\xab', 'latin-1')
class TestEnvironDecoder(_TestEnvironDecoder):
def _makeRequest(self):
from webob.request import BaseRequest
req = BaseRequest.blank('/')
return req
def test_fget_nonascii(self):
desc = self._callFUT('HTTP_X_AKEY', encattr='url_encoding')
req = self._makeRequest()
req.environ['HTTP_X_AKEY'] = native_(b'\xc3\xab')
result = desc.fget(req)
assert result == text_(b'\xc3\xab', 'utf-8')
class TestEnvironDecoderLegacy(_TestEnvironDecoder):
def _makeRequest(self):
from webob.request import LegacyRequest
req = LegacyRequest.blank('/')
return req
def test_fget_nonascii(self):
desc = self._callFUT('HTTP_X_AKEY', encattr='url_encoding')
req = self._makeRequest()
req.environ['HTTP_X_AKEY'] = native_(b'\xc3\xab', 'latin-1')
result = desc.fget(req)
assert result == native_(b'\xc3\xab', 'latin-1')
def test_default_fget_nonascii(self):
req = self._makeRequest()
desc = self._callFUT('akey', default=b'the_default')
assert desc.fget(req).__class__ == bytes