hat.juggler - Python juggler library¶
This library provides Python implementation of Juggler communication protocol.
Client¶
hat.juggler.connect coroutine creates client:
NotifyCb = aio.AsyncCallable[['Client', str, json.Data], None]
async def connect(address: str,
notify_cb: typing.Optional[NotifyCb] = None
) -> 'Client':
class Client(aio.Resource):
@property
def async_group(self) -> aio.Group: ...
@property
def state(self) -> json.Storage: ...
async def send(self,
name: str,
data: json.Data
) -> json.Data: ...
Server¶
hat.juggler.listen coroutine creates server listening for incomming juggler connections:
ConnectionCb = aio.AsyncCallable[['Connection'], None]
RequestCb = aio.AsyncCallable[['Connection', str, json.Data], json.Data]
async def listen(host: str,
port: int,
connection_cb: ConnectionCb,
request_cb: typing.Optional[RequestCb] = None, *,
ws_path: str = '/ws',
static_dir: typing.Optional[pathlib.PurePath] = None,
index_path: typing.Optional[str] = '/index.html',
pem_file: typing.Optional[pathlib.PurePath] = None,
autoflush_delay: typing.Optional[float] = 0.2,
shutdown_timeout: float = 0.1
) -> 'Server':
class Server(aio.Resource):
@property
def async_group(self) -> aio.Group: ...
class Connection(aio.Resource):
@property
def async_group(self) -> aio.Group: ...
@property
def state(self) -> json.Storage: ...
async def flush(self): ...
async def notify(self,
name: str,
data: json.Data): ...
Example¶
from hat import aio
from hat import juggler
from hat import util
port = util.get_unused_tcp_port()
host = '127.0.0.1'
conns = aio.Queue()
server = await juggler.listen(host, port, conns.put_nowait,
autoflush_delay=0)
client = await juggler.connect(f'ws://{host}:{port}/ws')
conn = await conns.get()
data = aio.Queue()
client.state.register_change_cb(data.put_nowait)
conn.state.set([], 123)
data = await data.get()
assert data == 123
await server.async_close()
await conn.wait_closed()
await client.wait_closed()
API¶
API reference is available as part of generated documentation: