diff --git a/lbrynet/extras/daemon/comment_client.py b/lbrynet/extras/daemon/comment_client.py new file mode 100644 index 000000000..b83b477b7 --- /dev/null +++ b/lbrynet/extras/daemon/comment_client.py @@ -0,0 +1,31 @@ +import logging +import aiohttp + +log = logging.getLogger(__name__) + + +def rpc_body(method: str, rpc_id: any, **params) -> dict: + return {'jsonrpc': '2.0', 'id': rpc_id, 'method': method, 'params': {**params}} + + +async def jsonrpc_post(url: str, method: str, **params) -> any: + clean = params.pop('clean', True) + response = (await jsonrpc_batch(url, [rpc_body(method, 1, **params)]))[0] + if clean: + if 'error' in response: + return response['error'] + return response['result'] + else: + return response + + +async def jsonrpc_batch(url: str, calls: list, batch_size: int = 50, clean: bool = False) -> list: + headers = {'Content-Type': 'application/json'} + complete = [] + batch_size = max(batch_size, 50) + for i in range(0, len(calls), batch_size): + async with aiohttp.request('POST', url, headers=headers, json=calls[i:i+batch_size]) as response: + complete += await response.json() + if clean: + complete = [body['result'] if 'result' in body else None for body in complete] + return complete