mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-02-15 02:10:29 +01:00
* 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
This commit is contained in:
parent
7667a2ae4a
commit
0ae9f138ad
6 changed files with 56 additions and 10 deletions
20
ChangeLog
20
ChangeLog
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
reply = _dispatch_dbus_method_call(target_methods, self, args, message)
|
||||
|
||||
self._connection.send(reply)
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ***********"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue