blob: 0f5ab46cb9ac911f12093dc97856de5274df6a4d [file] [log] [blame]
#!/usr/bin/python -u
#
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
'''Wrappers to convert Unicode strings to UTF-8 strings.'''
import types
def UnicodeToString(obj):
'''Converts any Unicode strings in obj to UTF-8 strings.
Recurses into lists, dicts, and tuples in obj.
'''
if isinstance(obj, list):
return [UnicodeToString(x) for x in obj]
elif isinstance(obj, dict):
return dict((UnicodeToString(k), UnicodeToString(v))
for k, v in obj.iteritems())
elif isinstance(obj, unicode):
return obj.encode('utf-8')
elif isinstance(obj, tuple):
return tuple(UnicodeToString(x) for x in obj)
elif isinstance(obj, set):
return set(UnicodeToString(x) for x in obj)
else:
return obj
def UnicodeToStringArgs(function):
'''A function decorator that converts function's arguments from
Unicode to strings using UnicodeToString.
'''
return (lambda *args, **kwargs:
function(*UnicodeToString(args),
**UnicodeToString(kwargs)))
def UnicodeToStringClass(cls):
'''A class decorator that converts all arguments of all
methods in class from Unicode to strings using UnicodeToStringArgs.'''
for k, v in cls.__dict__.items():
if type(v) == types.FunctionType:
setattr(cls, k, UnicodeToStringArgs(v))
return cls