From e354508a9cdd9d478750a4dec3dba0b2e84255d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Abdelkader=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 1 Apr 2019 14:38:10 +0200 Subject: [PATCH] Implemented response/stream/lines to read line by line. raw views to expose raw values. --- kapow.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/kapow.py b/kapow.py index 734272b..bc0fe14 100644 --- a/kapow.py +++ b/kapow.py @@ -116,7 +116,15 @@ def get_manager(resource, context): @contextlib.asynccontextmanager async def manager(): - if view == 'value': + if view == 'raw': + if not is_readable(path): + raise ValueError(f'Non-readable path "{path}".') + else: + value = await get_value(context, path) + yield ResourceManager( + shell_repr=value.decode('utf-8'), + coro=asyncio.sleep(0)) + elif view == 'value': if not is_readable(path): raise ValueError(f'Non-readable path "{path}".') else: @@ -130,13 +138,16 @@ def get_manager(resource, context): filename = tempfile.mktemp() os.mkfifo(filename) - if path == 'response/stream': + if path.startswith('response/stream'): async def manage_fifo(): initialized = False try: async with aiofiles.open(filename, 'rb') as fifo: while True: - chunk = await fifo.read(128) + if path.endswith('/lines'): + chunk = await fifo.readline() + else: + chunk = await fifo.read(128) if chunk: if not initialized: # Give a chance to other coroutines