diff options
-rw-r--r-- | ipalib/util.py | 61 | ||||
-rw-r--r-- | tests/test_ipalib/test_util.py | 99 |
2 files changed, 0 insertions, 160 deletions
diff --git a/ipalib/util.py b/ipalib/util.py index 223422fe2..4a58d7fbc 100644 --- a/ipalib/util.py +++ b/ipalib/util.py @@ -59,67 +59,6 @@ def xmlrpc_unmarshal(*params): return (params[1:], kw) -def xmlrpc_wrap(value): - """ - Wrap all ``str`` in ``xmlrpclib.Binary``. - - Because ``xmlrpclib.dumps()`` will itself convert all ``unicode`` instances - into UTF-8 encoded ``str`` instances, we don't do it here. - - So in total, when encoding data for an XML-RPC request, the following - transformations occur: - - * All ``str`` instances are treated as binary data and are wrapped in - an ``xmlrpclib.Binary()`` instance. - - * Only ``unicode`` instances are treated as character data. They get - converted to UTF-8 encoded ``str`` instances (although as mentioned, - not by this function). - - Also see `xmlrpc_unwrap`. - """ - if type(value) in (list, tuple): - return tuple(xmlrpc_wrap(v) for v in value) - if type(value) is dict: - return dict( - (k, xmlrpc_wrap(v)) for (k, v) in value.iteritems() - ) - if type(value) is str: - return Binary(value) - assert type(value) in (unicode, int, float, bool, NoneType) - return value - - -def xmlrpc_unwrap(value, encoding='UTF-8'): - """ - Unwrap all ``xmlrpc.Binary``, decode all ``str`` into ``unicode``. - - When decoding data from an XML-RPC request, the following transformations - occur: - - * The binary payloads of all ``xmlrpclib.Binary`` instances are - returned as ``str`` instances. - - * All ``str`` instances are treated as UTF-8 encoded character data. - They are decoded and the resulting ``unicode`` instance is returned. - - Also see `xmlrpc_wrap`. - """ - if type(value) in (list, tuple): - return tuple(xmlrpc_unwrap(v, encoding) for v in value) - if type(value) is dict: - return dict( - (k, xmlrpc_unwrap(v, encoding)) for (k, v) in value.iteritems() - ) - if type(value) is str: - return value.decode(encoding) - if isinstance(value, Binary): - assert type(value.data) is str - return value.data - assert type(value) in (unicode, int, float, bool, NoneType) - return value - - def get_current_principal(): try: return krbV.default_context().default_ccache().principal().name diff --git a/tests/test_ipalib/test_util.py b/tests/test_ipalib/test_util.py index ef5627357..6729fcda5 100644 --- a/tests/test_ipalib/test_util.py +++ b/tests/test_ipalib/test_util.py @@ -21,109 +21,10 @@ Test the `ipalib.util` module. """ -# FIXME: Most of these tests are depreciated and have moved to test_rpc.py - -from xmlrpclib import Binary, dumps, loads -import struct from tests.util import raises from ipalib import util -# A string that should have bytes 'x\00' through '\xff': -BINARY_BYTES = ''.join(struct.pack('B', d) for d in xrange(256)) -assert '\x00' in BINARY_BYTES and '\xff' in BINARY_BYTES -assert type(BINARY_BYTES) is str and len(BINARY_BYTES) == 256 - -# A UTF-8 encoded str -UTF8_BYTES = '\xd0\x9f\xd0\xb0\xd0\xb2\xd0\xb5\xd0\xbb' - -# The same UTF-8 data decoded (a unicode instance) -UNICODE_CHARS = u'\u041f\u0430\u0432\u0435\u043b' -assert UTF8_BYTES.decode('UTF-8') == UNICODE_CHARS -assert UNICODE_CHARS.encode('UTF-8') == UTF8_BYTES - - -def dump_n_load(value): - (param, method) = loads( - dumps((value,)) - ) - return param[0] - - -def round_trip(value): - return util.xmlrpc_unwrap( - dump_n_load(util.xmlrpc_wrap(value)) - ) - - -def test_round_trip(): - """ - Test `ipalib.util.xmlrpc_wrap` and `ipalib.util.xmlrpc_unwrap`. - - This tests the two functions together with ``xmlrpclib.dumps()`` and - ``xmlrpclib.loads()`` in a full encode/dumps/loads/decode round trip. - """ - # We first test that our assumptions about xmlrpclib module in the Python - # standard library are correct: - assert dump_n_load(UTF8_BYTES) == UNICODE_CHARS - assert dump_n_load(UNICODE_CHARS) == UNICODE_CHARS - assert dump_n_load(Binary(BINARY_BYTES)).data == BINARY_BYTES - assert isinstance(dump_n_load(Binary(BINARY_BYTES)), Binary) - assert type(dump_n_load('hello')) is str - assert type(dump_n_load(u'hello')) is str - - # Now we test our wrap and unwrap methods in combination with dumps, loads: - # All str should come back str (because they get wrapped in - # xmlrpclib.Binary(). All unicode should come back unicode because str - # explicity get decoded by util.xmlrpc_unwrap() if they weren't already - # decoded by xmlrpclib.loads(). - assert round_trip(UTF8_BYTES) == UTF8_BYTES - assert round_trip(UNICODE_CHARS) == UNICODE_CHARS - assert round_trip(BINARY_BYTES) == BINARY_BYTES - assert type(round_trip('hello')) is str - assert type(round_trip(u'hello')) is unicode - assert round_trip('') == '' - assert round_trip(u'') == u'' - compound = [UTF8_BYTES, UNICODE_CHARS, BINARY_BYTES, - dict(utf8=UTF8_BYTES, chars=UNICODE_CHARS, data=BINARY_BYTES) - ] - assert round_trip(compound) == tuple(compound) - - -def test_xmlrpc_wrap(): - """ - Test the `ipalib.util.xmlrpc_wrap` function. - """ - f = util.xmlrpc_wrap - assert f([]) == tuple() - assert f({}) == dict() - b = f('hello') - assert isinstance(b, Binary) - assert b.data == 'hello' - u = f(u'hello') - assert type(u) is unicode - assert u == u'hello' - value = f([dict(one=False, two=u'hello'), None, 'hello']) - - -def test_xmlrpc_unwrap(): - """ - Test the `ipalib.util.xmlrpc_unwrap` function. - """ - f = util.xmlrpc_unwrap - assert f([]) == tuple() - assert f({}) == dict() - value = f(Binary(UTF8_BYTES)) - assert type(value) is str - assert value == UTF8_BYTES - assert f(UTF8_BYTES) == UNICODE_CHARS - assert f(UNICODE_CHARS) == UNICODE_CHARS - value = f([True, Binary('hello'), dict(one=1, two=UTF8_BYTES, three=None)]) - assert value == (True, 'hello', dict(one=1, two=UNICODE_CHARS, three=None)) - assert type(value[1]) is str - assert type(value[2]['two']) is unicode - - def test_xmlrpc_marshal(): """ Test the `ipalib.util.xmlrpc_marshal` function. |