diff options
| -rw-r--r-- | ChangeLog | 20 | ||||
| -rw-r--r-- | python/dbus_bindings.pyx | 3 | ||||
| -rw-r--r-- | python/service.py | 18 | ||||
| -rwxr-xr-x | test/python/run-test.sh | 4 | ||||
| -rwxr-xr-x | test/python/test-client.py | 14 | ||||
| -rwxr-xr-x | test/python/test-service.py | 9 | 
6 files changed, 57 insertions, 11 deletions
@@ -1,6 +1,24 @@ +2005-10-14  John (J5) Palmieri  <johnp@redhat.com> + +	* 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 +  2005-10-13  John (J5) Palmieri  <johnp@redhat.com> -	* python/service.py(ObjectType::_reflect_on_signal, _reflect_on_method): 	reclaim memory outside of the loop and use del istead of just setting +	* python/service.py(ObjectType::_reflect_on_signal, _reflect_on_method): 	 +	reclaim memory outside of the loop and use del istead of just setting  	the key to None  2005-10-13  John (J5) Palmieri  <johnp@redhat.com> 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): diff --git a/test/python/run-test.sh b/test/python/run-test.sh index 600eb6d7..aa6bd366 100755 --- a/test/python/run-test.sh +++ b/test/python/run-test.sh @@ -29,6 +29,10 @@ fi  ln -s $DBUS_TOP_BUILDDIR/python $DBUS_TOP_BUILDDIR/python/dbus  echo "running test-client.py" +#uncomment this if you need to see the output from the service for debugging +#otherwise keep it commented so we can test activation +#libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/python/test-service.py & +  libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/python/test-client.py || die "test-client.py failed"  rm $DBUS_TOP_BUILDDIR/python/dbus diff --git a/test/python/test-client.py b/test/python/test-client.py index 08c547fd..f90ce13c 100755 --- a/test/python/test-client.py +++ b/test/python/test-client.py @@ -2,6 +2,7 @@  import sys  import os  import unittest +import time  builddir = os.environ["DBUS_TOP_BUILDDIR"]  pydir = builddir + "/python" @@ -29,7 +30,6 @@ test_types_vals = [1, 12323231, 3.14159265, 99999999.99,                   ([1,2,3],"c", 1.2, ["a","b","c"], {"a": (1,"v"), "b": (2,"d")})                   ] -  class TestDBusBindings(unittest.TestCase):      def setUp(self):          self.bus = dbus.SessionBus() @@ -57,7 +57,17 @@ class TestDBusBindings(unittest.TestCase):              print "Testing %s"% str(send_val)              recv_val = self.iface.Echo(send_val)              self.assertEquals(send_val, recv_val) -    + +    def testBenchmarkIntrospect(self): +        print "\n********* Benchmark Introspect ************" +	a = time.time() +	print a +        print self.iface.GetComplexArray() +	b = time.time() +	print b +	print "Delta: %f" % (b - a) +        self.assert_(True) +      def testAsyncCalls(self):          #test sending python types and getting them back async          print "\n********* Testing Async Calls ***********" diff --git a/test/python/test-service.py b/test/python/test-service.py index 8f3cb7af..36c2df7c 100755 --- a/test/python/test-service.py +++ b/test/python/test-service.py @@ -16,6 +16,7 @@ if not dbus.__file__.startswith(pydir):  import dbus.service  import dbus.glib  import gobject +import random  class TestObject(dbus.service.Object):      def __init__(self, bus_name, object_path="/org/freedesktop/DBus/TestSuitePythonObject"): @@ -27,6 +28,14 @@ class TestObject(dbus.service.Object):      def Echo(self, arg):          return arg +    @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface") +    def GetComplexArray(self): +        ret = [] +        for i in range(0,100): +            ret.append((random.randint(0,100), random.randint(0,100), str(random.randint(0,100)))) + +        return dbus.Array(ret, signature="(uus)") +  session_bus = dbus.SessionBus()  name = dbus.service.BusName("org.freedesktop.DBus.TestSuitePythonService", bus=session_bus)  object = TestObject(name)  | 
