Source code for juju.client.runner

# Copyright 2023 Canonical Ltd.
# Licensed under the Apache V2, see LICENCE file for details.


[docs]class AsyncRunner: async def __call__(self, facade_method, *args, **kwargs): await self.connection.rpc(facade_method(*args, **kwargs))
[docs]class ThreadedRunner: pass
# Methods are descriptors?? # get is called with params # set gets called with the result? # This could let us fake the protocol we want # while decoupling the protocol from the RPC and the IO/Process context # The problem is leaking the runtime impl details to the top levels of the API # with async def By handling the Marshal/Unmarshal side of RPC as a protocol we # can leave the RPC running to a specific delegate without altering the method # signatures. This still isn't quite right though as async is co-op # multitasking and the methods still need to know not to block or they will # pause other execution