From ef47e01f7593c4844f927752c0462dae7722ff9e Mon Sep 17 00:00:00 2001 From: Robert McQueen Date: Mon, 24 Oct 2005 18:29:50 +0000 Subject: 2005-10-24 Robert McQueen * python/dbus_bindings.pyx (String, MessageIter): make D-Bus strings derive from unicode instead of str, and encode/decode UTF-8 when marshalling/unmarshalling bus messages * python/introspect_parser.py: encode introspection data as UTF-8 before passing the buffer into libxml2 * test/python/test-client.py: add unicode test strings * test/data/valid-service-files/.cvsignore, test/python/.cvsignore: ignore generated python test files --- python/dbus_bindings.pyx | 16 +++++++++------- python/introspect_parser.py | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'python') diff --git a/python/dbus_bindings.pyx b/python/dbus_bindings.pyx index f7c88006..4bf0893c 100644 --- a/python/dbus_bindings.pyx +++ b/python/dbus_bindings.pyx @@ -123,9 +123,9 @@ class Double(float): def __init__(self, value): float.__init__(self, value) -class String(str): +class String(unicode): def __init__(self, value): - str.__init__(self, value) + unicode.__init__(self, value) class Array(list): def __init__(self, value, type=None, signature=None): @@ -733,8 +733,9 @@ cdef class MessageIter: def get_string(self): cdef char *c_str dbus_message_iter_get_basic(self.iter, &c_str) + ret = c_str.decode('utf8') - return c_str + return ret def get_object_path(self): object_path_string = self.get_string() @@ -836,7 +837,7 @@ cdef class MessageIter: elif ptype == long: ret = TYPE_INT64 ret = str(chr(ret)) - elif ptype == str: + elif (ptype == str or ptype == unicode): ret = TYPE_STRING ret = str(chr(ret)) elif ptype == float: @@ -1042,7 +1043,7 @@ cdef class MessageIter: retval = self.append_int32(value) elif value_type == long: retval = self.append_int64(value) - elif value_type == str: + elif (value_type == str or value_type == unicode): retval = self.append_string(value) elif value_type == float: retval = self.append_double(value) @@ -1146,8 +1147,9 @@ cdef class MessageIter: def append_string(self, value): cdef char *c_value - c_value = value - return dbus_message_iter_append_basic(self.iter, TYPE_STRING, &c_value) + tmp = value.encode('utf8') + c_value = tmp + return dbus_message_iter_append_basic(self.iter, TYPE_STRING, &c_value) def append_object_path(self, value): cdef char *c_value diff --git a/python/introspect_parser.py b/python/introspect_parser.py index 6e94cccf..40cae1e7 100644 --- a/python/introspect_parser.py +++ b/python/introspect_parser.py @@ -8,7 +8,7 @@ def process_introspection_data(data): XMLREADER_START_ELEMENT_NODE_TYPE = 1 XMLREADER_END_ELEMENT_NODE_TYPE = 15 - stream = cStringIO.StringIO(data) + stream = cStringIO.StringIO(data.encode('utf-8')) input_source = libxml2.inputBuffer(stream) reader = input_source.newTextReader("urn:introspect") -- cgit