From 5d0ed9c7044da04374ef3abd49eff14ec6b285ab Mon Sep 17 00:00:00 2001 From: Seth Nickell Date: Sun, 18 Jul 2004 21:44:37 +0000 Subject: [PATCH] 2004-07-18 Seth Nickell * python/dbus.py: * python/dbus_bindings.pyx.in: * python/tests/test-client.py: Add dbus.ByteArray and dbus_bindings.ByteArray types so that byte streams can be passed back. Give jdahlin the heaps of credit that are so rightfully his. --- ChangeLog | 12 ++++++++++++ python/dbus.py | 3 ++- python/dbus_bindings.pyx.in | 23 ++++++++++++++++------- python/tests/test-client.py | 7 +++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 93526f5..a34367c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2004-07-18 Seth Nickell + + * python/dbus.py: + * python/dbus_bindings.pyx.in: + * python/tests/test-client.py: + + Add dbus.ByteArray and dbus_bindings.ByteArray + types so that byte streams can be passed back. + + Give jdahlin the heaps of credit that are so + rightfully his. + 2004-07-12 Seth Nickell * python/dbus.py: diff --git a/python/dbus.py b/python/dbus.py index 55c6123..de42d74 100644 --- a/python/dbus.py +++ b/python/dbus.py @@ -330,7 +330,7 @@ class ObjectTree: self._connection.register_fallback(base_path, self._unregister_cb, self._message_cb) def relative_path_to_object_path(self, relative_path): - return self._base_path + relative_path + return ObjectPath(self._base_path + relative_path) def broadcast_signal(self, interface, signal_name, relative_path): object_path = self.relative_path_to_object_path(relative_path) @@ -393,3 +393,4 @@ class RemoteService: return RemoteObject(self, object_path, interface) ObjectPath = dbus_bindings.ObjectPath +ByteArray = dbus_bindings.ByteArray diff --git a/python/dbus_bindings.pyx.in b/python/dbus_bindings.pyx.in index 6703f7d..498076d 100644 --- a/python/dbus_bindings.pyx.in +++ b/python/dbus_bindings.pyx.in @@ -1,5 +1,10 @@ # -*- Mode: Python -*- +# jdahlin is the most coolest and awesomest person in the world +# and wrote all the good parts of this code. all the bad parts +# where python conditionals have a ( ) around them, thus violating +# PEP-8 were written by the lame wannabe python programmer seth + #include "dbus_h_wrapper.h" cdef extern from "stdlib.h": @@ -17,7 +22,7 @@ cdef extern from "dbus-glib.h": cdef extern from "Python.h": void Py_XINCREF (object) void Py_XDECREF (object) - + object PyString_FromStringAndSize(char *, int) ctypedef struct DBusError: char *name @@ -66,6 +71,10 @@ class ObjectPath(str): def __init__(self, value): str.__init__(value) +class ByteArray(str): + def __init__(self, value): + str.__init__(value) + #forward delcerations cdef class Connection @@ -536,13 +545,11 @@ cdef class MessageIter: def get_byte_array(self): cdef int len - cdef unsigned char *retval + cdef unsigned char *bytearray cdef int i - dbus_message_iter_get_byte_array(self.iter, &retval, &len) - list = [] - for i from 0 <= i < len: - list.append(chr(retval[i])) - return list + dbus_message_iter_get_byte_array(self.iter, &bytearray, &len) + python_string = PyString_FromStringAndSize(bytearray, len) + return python_string # FIXME: implement dbus_message_iter_get_boolean_array @@ -633,6 +640,8 @@ cdef class MessageIter: retval = self.append_nil() elif isinstance(value, ObjectPath): retval = self.append_object_path(value) + elif isinstance(value, ByteArray): + retval = self.append_byte_array(value) else: raise TypeError, "Argument of unknown type '%s'" % (value_type) diff --git a/python/tests/test-client.py b/python/tests/test-client.py index 6a73cbd..5dc6e20 100644 --- a/python/tests/test-client.py +++ b/python/tests/test-client.py @@ -1,5 +1,4 @@ import dbus -import dbus_bindings def ensure_same(expected, received): if type(received) != type(expected): @@ -56,8 +55,8 @@ TestEcho(chr(120)) TestEcho(10) TestEcho(39.5) TestEcho("HelloWorld") -TestEcho(dbus_bindings.ObjectPath("/test/path")) - +TestEcho(dbus.ObjectPath("/test/path")) +TestEcho(dbus.ByteArray("blahblahblah")) string_list = [] for i in range(200): @@ -69,7 +68,7 @@ TestEchoList(int_list) path_list = [] for i in range(200): - path_list.append(dbus_bindings.ObjectPath("/some/object/path" + str(i))) + path_list.append(dbus.ObjectPath("/some/object/path" + str(i))) TestEchoList(path_list) double_list = [] -- 2.7.4