Blame examples/example-async-client.py

Packit 130fc8
#!/usr/bin/env python
Packit 130fc8
Packit 130fc8
usage = """Usage:
Packit 130fc8
python example-service.py &
Packit 130fc8
python example-async-client.py
Packit 130fc8
python example-client.py --exit-service
Packit 130fc8
"""
Packit 130fc8
Packit 130fc8
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
Packit 130fc8
# Copyright (C) 2005-2007 Collabora Ltd. <http://www.collabora.co.uk/>
Packit 130fc8
#
Packit 130fc8
# Permission is hereby granted, free of charge, to any person
Packit 130fc8
# obtaining a copy of this software and associated documentation
Packit 130fc8
# files (the "Software"), to deal in the Software without
Packit 130fc8
# restriction, including without limitation the rights to use, copy,
Packit 130fc8
# modify, merge, publish, distribute, sublicense, and/or sell copies
Packit 130fc8
# of the Software, and to permit persons to whom the Software is
Packit 130fc8
# furnished to do so, subject to the following conditions:
Packit 130fc8
#
Packit 130fc8
# The above copyright notice and this permission notice shall be
Packit 130fc8
# included in all copies or substantial portions of the Software.
Packit 130fc8
#
Packit 130fc8
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit 130fc8
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit 130fc8
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit 130fc8
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
Packit 130fc8
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
Packit 130fc8
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Packit 130fc8
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Packit 130fc8
# DEALINGS IN THE SOFTWARE.
Packit 130fc8
Packit 130fc8
import sys
Packit 130fc8
import traceback
Packit 130fc8
Packit 130fc8
from gi.repository import GLib
Packit 130fc8
Packit 130fc8
import dbus
Packit 130fc8
import dbus.mainloop.glib
Packit 130fc8
Packit 130fc8
# Callbacks for asynchronous calls
Packit 130fc8
Packit 130fc8
def handle_hello_reply(r):
Packit 130fc8
    global hello_replied
Packit 130fc8
    hello_replied = True
Packit 130fc8
Packit 130fc8
    print str(r)
Packit 130fc8
Packit 130fc8
    if hello_replied and raise_replied:
Packit 130fc8
        loop.quit()
Packit 130fc8
Packit 130fc8
def handle_hello_error(e):
Packit 130fc8
    global failed
Packit 130fc8
    global hello_replied
Packit 130fc8
    hello_replied = True
Packit 130fc8
    failed = True
Packit 130fc8
Packit 130fc8
    print "HelloWorld raised an exception! That's not meant to happen..."
Packit 130fc8
    print "\t", str(e)
Packit 130fc8
Packit 130fc8
    if hello_replied and raise_replied:
Packit 130fc8
        loop.quit()
Packit 130fc8
Packit 130fc8
def handle_raise_reply():
Packit 130fc8
    global failed
Packit 130fc8
    global raise_replied
Packit 130fc8
    raise_replied = True
Packit 130fc8
    failed = True
Packit 130fc8
Packit 130fc8
    print "RaiseException returned normally! That's not meant to happen..."
Packit 130fc8
Packit 130fc8
    if hello_replied and raise_replied:
Packit 130fc8
        loop.quit()
Packit 130fc8
Packit 130fc8
def handle_raise_error(e):
Packit 130fc8
    global raise_replied
Packit 130fc8
    raise_replied = True
Packit 130fc8
Packit 130fc8
    print "RaiseException raised an exception as expected:"
Packit 130fc8
    print "\t", str(e)
Packit 130fc8
Packit 130fc8
    if hello_replied and raise_replied:
Packit 130fc8
        loop.quit()
Packit 130fc8
Packit 130fc8
def make_calls():
Packit 130fc8
    # To make an async call, use the reply_handler and error_handler kwargs
Packit 130fc8
    remote_object.HelloWorld("Hello from example-async-client.py!",
Packit 130fc8
                             dbus_interface='com.example.SampleInterface',
Packit 130fc8
                             reply_handler=handle_hello_reply,
Packit 130fc8
                             error_handler=handle_hello_error)
Packit 130fc8
Packit 130fc8
    # Interface objects also support async calls
Packit 130fc8
    iface = dbus.Interface(remote_object, 'com.example.SampleInterface')
Packit 130fc8
    
Packit 130fc8
    iface.RaiseException(reply_handler=handle_raise_reply,
Packit 130fc8
                         error_handler=handle_raise_error)
Packit 130fc8
Packit 130fc8
    return False
Packit 130fc8
Packit 130fc8
if __name__ == '__main__':
Packit 130fc8
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
Packit 130fc8
Packit 130fc8
    bus = dbus.SessionBus()
Packit 130fc8
    try:
Packit 130fc8
        remote_object = bus.get_object("com.example.SampleService","/SomeObject")
Packit 130fc8
    except dbus.DBusException:
Packit 130fc8
        traceback.print_exc()
Packit 130fc8
        print usage
Packit 130fc8
        sys.exit(1)
Packit 130fc8
Packit 130fc8
    # Make the method call after a short delay
Packit 130fc8
    GLib.timeout_add(1000, make_calls)
Packit 130fc8
Packit 130fc8
    failed = False
Packit 130fc8
    hello_replied = False
Packit 130fc8
    raise_replied = False
Packit 130fc8
Packit 130fc8
    loop = GLib.MainLoop()
Packit 130fc8
    loop.run()
Packit 130fc8
    if failed:
Packit 130fc8
        raise SystemExit("Example async client failed!")