From 0ae9f138ad4dfacbbd28abd39ce3dee66333539a Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Fri, 14 Oct 2005 21:44:00 +0000 Subject: * python/dbus_bindings.pyx (MessageIter::append_strict): check for STRUCT_BEGIN not TYPE_STRUCT in indicate we are marshalling a struct * python/service.py (Object::_message_cb): handle exceptions correctly by sending them over the wire to the calling app. This makes sure the client returns immediately instead of waiting the 15 seconds to timeout. * test/python/test-client.py (TestDBusBindings::testBenchmarkIntrospect): Add a test to benchmark how long it takes to introspect a service and call a method which returns a large element (pretty fast) * test/python/test-service.py (TestObject::GetComplexArray): new test method which pushes a lot of data --- python/dbus_bindings.pyx | 3 +-- python/service.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) (limited to 'python') diff --git a/python/dbus_bindings.pyx b/python/dbus_bindings.pyx index 00603734..35ad492b 100644 --- a/python/dbus_bindings.pyx +++ b/python/dbus_bindings.pyx @@ -978,7 +978,6 @@ cdef class MessageIter: return (sig, remainder) def append_strict(self, value, sig): - if sig == TYPE_INVALID or sig == None: raise TypeError, 'Invalid arg type sent to append_strict' @@ -1023,7 +1022,7 @@ cdef class MessageIter: retval = self.append_array(Array(value, signature=tmp_sig)) elif sig_type == TYPE_OBJECT_PATH: retval = self.append_object_path(value) - elif sig_type == TYPE_STRUCT: + elif sig_type == STRUCT_BEGIN: tmp_sig = sig[1:-1] retval = self.append_struct(value, signature = tmp_sig) elif sig_type == TYPE_VARIANT: diff --git a/python/service.py b/python/service.py index a4391837..0cc2ed9f 100644 --- a/python/service.py +++ b/python/service.py @@ -168,13 +168,19 @@ class Object: print ("Unregister") def _message_cb(self, connection, message): - target_method_name = message.get_member() - target_methods = self._dbus_method_vtable[target_method_name] - args = message.get_args_list() + try: + target_method_name = message.get_member() + target_methods = self._dbus_method_vtable[target_method_name] + args = message.get_args_list() - reply = _dispatch_dbus_method_call(target_methods, self, args, message) - - self._connection.send(reply) + reply = _dispatch_dbus_method_call(target_methods, self, args, message) + + self._connection.send(reply) + except Exception, e: + error_reply = dbus_bindings.Error(message, + "org.freedesktop.DBus.Python.%s" % e.__class__.__name__, + str(e)) + self._connection.send(error_reply) @method('org.freedesktop.DBus.Introspectable') def Introspect(self): -- cgit