diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-01-09 14:05:28 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-01-09 14:05:28 +0000 |
commit | 26ce68b8de3f48187091d3686cb30b75375b84d0 (patch) | |
tree | 361164563e3eb88d5fdcc5baca9570eb92f79c4e /examples | |
parent | 9ede20248d690d9bb2cb9fba6b75955770930a94 (diff) |
Add an example of asynchronous calls. Run the examples during 'make check'.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/example-async-client.py | 109 | ||||
-rw-r--r-- | examples/example-client.py | 6 | ||||
-rw-r--r-- | examples/example-service.py | 10 | ||||
-rw-r--r-- | examples/example-signal-recipient.py | 1 |
4 files changed, 125 insertions, 1 deletions
diff --git a/examples/example-async-client.py b/examples/example-async-client.py new file mode 100644 index 0000000..0c324e0 --- /dev/null +++ b/examples/example-async-client.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python + +usage = """Usage: +python example-service.py & +python example-async-client.py +python example-async-client.py --exit-service +""" + +import sys +import traceback + +import gobject + +import dbus +import dbus.mainloop.glib + +# Callbacks for asynchronous calls + +def handle_hello_reply(r): + global hello_replied + hello_replied = True + + print str(r) + + if hello_replied and raise_replied: + loop.quit() + +def handle_hello_error(e): + global failed + global hello_replied + hello_replied = True + failed = True + + print "HelloWorld raised an exception! That's not meant to happen..." + print "\t", str(e) + + if hello_replied and raise_replied: + loop.quit() + +def handle_hello_error(e): + global failed + global hello_replied + hello_replied = True + failed = True + + print "HelloWorld raised an exception! That's not meant to happen..." + print "\t", str(e) + + if hello_replied and raise_replied: + loop.quit() + +def handle_raise_reply(): + global failed + global raise_replied + raise_replied = True + failed = True + + print "RaiseException returned normally! That's not meant to happen..." + + if hello_replied and raise_replied: + loop.quit() + +def handle_raise_error(e): + global raise_replied + raise_replied = True + + print "RaiseException raised an exception as expected:" + print "\t", str(e) + + if hello_replied and raise_replied: + loop.quit() + +def make_calls(): + # To make an async call, use the reply_handler and error_handler kwargs + remote_object.HelloWorld("Hello from example-async-client.py!", + dbus_interface='com.example.SampleInterface', + reply_handler=handle_hello_reply, + error_handler=handle_hello_error) + + # Interface objects also support async calls + iface = dbus.Interface(remote_object, 'com.example.SampleInterface') + + iface.RaiseException(reply_handler=handle_raise_reply, + error_handler=handle_raise_error) + + return False + +if __name__ == '__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + bus = dbus.SessionBus() + try: + remote_object = bus.get_object("com.example.SampleService","/SomeObject") + except dbus.DBusException: + traceback.print_exc() + print usage + sys.exit(1) + + # Make the method call after a short delay + gobject.timeout_add(1000, make_calls) + + failed = False + hello_replied = False + raise_replied = False + + loop = gobject.MainLoop() + loop.run() + if failed: + raise SystemExit("Example async client failed!") diff --git a/examples/example-client.py b/examples/example-client.py index aae4c3f..7effb04 100644 --- a/examples/example-client.py +++ b/examples/example-client.py @@ -40,6 +40,12 @@ def main(): print hello_reply_dict + # D-Bus exceptions are mapped to Python exceptions + try: + iface.RaiseException() + except dbus.DBusException, e: + print str(e) + # introspection is automatically supported print remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable") diff --git a/examples/example-service.py b/examples/example-service.py index fc3ded5..5dca9a5 100644 --- a/examples/example-service.py +++ b/examples/example-service.py @@ -3,6 +3,7 @@ usage = """Usage: python example-service.py & python example-client.py +python example-async-client.py python example-client.py --exit-service """ @@ -12,6 +13,9 @@ import dbus import dbus.service import dbus.mainloop.glib +class DemoException(dbus.DBusException): + _dbus_error_name = 'com.example.DemoException' + class SomeObject(dbus.service.Object): @dbus.service.method("com.example.SampleInterface", @@ -22,6 +26,12 @@ class SomeObject(dbus.service.Object): session_bus.get_unique_name()] @dbus.service.method("com.example.SampleInterface", + in_signature='', out_signature='') + def RaiseException(self): + raise DemoException('The RaiseException method does what you might ' + 'expect') + + @dbus.service.method("com.example.SampleInterface", in_signature='', out_signature='(ss)') def GetTuple(self): return ("Hello Tuple", " from example-service.py") diff --git a/examples/example-signal-recipient.py b/examples/example-signal-recipient.py index 3d8a190..65c6466 100644 --- a/examples/example-signal-recipient.py +++ b/examples/example-signal-recipient.py @@ -12,7 +12,6 @@ import traceback import gobject import dbus -import dbus.decorators import dbus.mainloop.glib def handle_reply(msg): |