diff --git a/nbconvert/preprocessors/execute.py b/nbconvert/preprocessors/execute.py index d764bd744..1bf771c86 100644 --- a/nbconvert/preprocessors/execute.py +++ b/nbconvert/preprocessors/execute.py @@ -281,26 +281,29 @@ def start_new_kernel(startup_timeout=60, kernel_name='python', **kwargs): finally: self.kc.stop_channels() self.km.shutdown_kernel(now=self.shutdown_kernel == 'immediate') - if self.widget_state: - self.nb.metadata.widgets = { - 'application/vnd.jupyter.widget-state+json': { - 'state': { - model_id: _serialize_widget_state(state) - for model_id, state in self.widget_state.items() if '_model_name' in state - }, - 'version_major': 2, - 'version_minor': 0, - } - } - for key, widget in self.nb.metadata.widgets['application/vnd.jupyter.widget-state+json']['state'].items(): - buffers = self.widget_buffers.get(key) - if buffers: - widget['buffers'] = buffers + self.set_widgets_metadata() delattr(self, 'nb') return nb, resources + def set_widgets_metadata(self): + if self.widget_state: + self.nb.metadata.widgets = { + 'application/vnd.jupyter.widget-state+json': { + 'state': { + model_id: _serialize_widget_state(state) + for model_id, state in self.widget_state.items() if '_model_name' in state + }, + 'version_major': 2, + 'version_minor': 0, + } + } + for key, widget in self.nb.metadata.widgets['application/vnd.jupyter.widget-state+json']['state'].items(): + buffers = self.widget_buffers.get(key) + if buffers: + widget['buffers'] = buffers + def preprocess_cell(self, cell, resources, cell_index): """ Executes a single code cell. See base.py for details. diff --git a/setup.py b/setup.py index 39af9dece..5aec4f312 100644 --- a/setup.py +++ b/setup.py @@ -199,7 +199,7 @@ def run(self): ] extra_requirements = { - 'test': ['pytest', 'pytest-cov', 'ipykernel', 'jupyter_client>=4.2', 'ipywidgets'], + 'test': ['pytest', 'pytest-cov', 'ipykernel', 'jupyter_client>=4.2', 'ipywidgets>=7'], 'serve': ['tornado>=4.0'], 'execute': ['jupyter_client>=4.2'], }