comparison sat/bridge/bridge_constructor/constructors/dbus/constructor.py @ 3042:964abd07dc03

bridge (dbus): AsyncIO version of D-Bus bridge: The frontends D-Bus bridge has now an AIOBridge version which can be instantiated to use asyncio (the loop must be managed by frontends).
author Goffi <goffi@goffi.org>
date Tue, 01 Oct 2019 22:49:10 +0200
parents ab2696e34d29
children 9d0df638c8b4
comparison
equal deleted inserted replaced
3041:72583524cfd3 3042:964abd07dc03
44 FRONTEND_TEMPLATE = "dbus_frontend_template.py" 44 FRONTEND_TEMPLATE = "dbus_frontend_template.py"
45 FRONTEND_DEST = CORE_DEST 45 FRONTEND_DEST = CORE_DEST
46 FRONTEND_FORMATS = { 46 FRONTEND_FORMATS = {
47 "methods": """\ 47 "methods": """\
48 def {name}(self, {args}{async_comma}{async_args}): 48 def {name}(self, {args}{async_comma}{async_args}):
49 {error_handler}{blocking_call}{debug}return {result}\n""" 49 {error_handler}{blocking_call}{debug}return {result}\n""",
50 "async_methods": """\
51 def {name}(self{async_comma}{args}):
52 loop = asyncio.get_running_loop()
53 fut = loop.create_future()
54 reply_handler = lambda ret=None: loop.call_soon_threadsafe(fut.set_result, ret)
55 error_handler = lambda err: loop.call_soon_threadsafe(fut.set_exception, dbus_to_bridge_exception(err))
56 self.db_{category}_iface.{name}({args_result}{async_comma}timeout=const_TIMEOUT, reply_handler=reply_handler, error_handler=error_handler)
57 {debug}return fut\n""",
50 } 58 }
51 59
52 def core_completion_signal(self, completion, function, default, arg_doc, async_): 60 def core_completion_signal(self, completion, function, default, arg_doc, async_):
53 completion["category"] = completion["category"].upper() 61 completion["category"] = completion["category"].upper()
54 completion["body"] = ( 62 completion["body"] = (