From ddda9c31c76272b8b7e0ee813144abb0bf4dfe56 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Thu, 15 Mar 2018 14:44:06 +0100 Subject: [PATCH] #751 support for converting buffered data in widgets --- nbconvert/preprocessors/execute.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/nbconvert/preprocessors/execute.py b/nbconvert/preprocessors/execute.py index 382b336e7..d8e552130 100644 --- a/nbconvert/preprocessors/execute.py +++ b/nbconvert/preprocessors/execute.py @@ -3,7 +3,7 @@ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. - +import base64 from textwrap import dedent from contextlib import contextmanager @@ -335,6 +335,7 @@ def preprocess(self, nb, resources, km=None): Preprocess notebook executing each code cell. The input argument `nb` is modified in-place. + self.widget_buffers = {} Parameters ---------- @@ -489,7 +490,10 @@ def run_cell(self, cell, cell_index=0): cell_map[cell_index] = [] continue elif msg_type.startswith('comm'): - self.widget_state.setdefault(content['comm_id'], {}).update(content['data']['state']) + data = content['data'] + self.widget_state.setdefault(content['comm_id'], {}).update(data['state']) + if 'buffer_paths' in data and data['buffer_paths']: + self.widget_buffers[content['comm_id']] = _get_buffer_data(msg) continue display_id = None @@ -553,3 +557,15 @@ def _serialize_widget_state(state): 'model_module_version': state.get('_model_module_version'), 'state': state, } + + +def _get_buffer_data(msg): + buffers = [] + path = msg['content']['data']['buffer_paths'] + for buffer in msg['buffers']: + buffers.append({ + 'data': base64.b64encode(buffer.obj).decode('utf-8'), + 'encoding': 'base64', + 'path': path + }) + return buffers