diff --git a/nglview/tests/test_widget.py b/nglview/tests/test_widget.py index a7ab11b5..8cb5b893 100644 --- a/nglview/tests/test_widget.py +++ b/nglview/tests/test_widget.py @@ -527,7 +527,7 @@ def test_show_pymatgen(): def test_show_qcelemental(): import qcelemental as qcel - mol = qcel.models.Molecule.from_data("He 0 0 0") + mol = qcel.models.Molecule.from_data("He 0 0 0") view = nv.show_qcelemental(mol) view @@ -1025,15 +1025,17 @@ def test_write_html(mock_unset): display(view) fp = StringIO() - with patch.object(embed, 'embed_snippet') as mock_embed: + with patch.object(embed, 'embed_snippet') as mock_embed_snippet: + mock_embed_snippet.return_value = 'ok' nv.write_html(fp, [view], frame_range=(0, 3)) - mock_embed.assert_called_with([tm, cm, view]) + mock_embed_snippet.assert_called_with([tm, cm, view]) mock_unset.assert_called_with() assert len(view._ngl_coordinate_resource[0]) == 3 assert len(view._ngl_coordinate_resource[1]) == 3 # box - with patch.object(embed, 'embed_snippet') as mock_embed: + with patch.object(embed, 'embed_snippet') as mock_embed_snippet: + mock_embed_snippet.return_value = 'ok' nv.write_html(fp, [HBox([view])], frame_range=(0, 3)) # FIXME: assertion? diff --git a/nglview/widget.py b/nglview/widget.py index 58a14ece..b9a3c954 100644 --- a/nglview/widget.py +++ b/nglview/widget.py @@ -1,12 +1,13 @@ import base64 import json +import re import threading import time import uuid from logging import getLogger import ipywidgets as widgets -import ipywidgets.embed +from ipywidgets import embed import numpy as np from IPython.display import display from ipywidgets import (Image, Box, DOMWidget, HBox, VBox, IntSlider, Output, Play, Widget, @@ -84,9 +85,6 @@ def write_html(fp, views, frame_range=None): >>> nglview.write_html('index.html', [view], frame_range=(0, 5)) # doctest: +SKIP """ views = isinstance(views, DOMWidget) and [views] or views - embed = ipywidgets.embed - color = None - theme = None for _, v in _INIT_VIEWS.items(): views.insert(0, v) @@ -110,6 +108,12 @@ def _unset_serialization(views): snippet = '\n' snippet += '\n' snippet += embed.embed_snippet(views) + # hacky thing for https://github.com/nglviewer/nglview/issues/1107 + # NGL must be fixed before we can remove this hack + _frontend = {'__frontend_version__': __frontend_version__} + pattern = r'("model_module":\s*"nglview-js-widgets",\s*"model_module_version":\s*)"' + re.escape(_frontend['__frontend_version__']) + '",' + replacement = r'\g<1>"3.0.8",' + snippet = re.sub(pattern, replacement, snippet) html_code = embed.html_template.format(title='nglview-demo', snippet=snippet) @@ -332,7 +336,7 @@ def camera(self): @camera.setter def camera(self, value): """ - + Parameters ---------- value : str, {'perspective', 'orthographic'} @@ -694,7 +698,7 @@ def _update_repr_dict(self): def set_representations(self, representations, component=0): """ - + Parameters ---------- representations : list of dict @@ -840,7 +844,7 @@ def _add_shape(self, shapes, name='shape'): Notes ----- Supported shape: 'mesh', 'sphere', 'ellipsoid', 'cylinder', 'cone', 'arrow'. - + See also -------- {ngl_url} @@ -983,7 +987,7 @@ def render_image(self, -------- # tell NGL to render send image data to notebook. view.render_image() - + # make sure to call `get_image` method view.get_image() @@ -1183,7 +1187,7 @@ def add_pdbid(self, pdbid, **kwargs): >>> import nglview >>> view = nglview.NGLWidget() >>> c = view.add_pdbid('1tsu') - >>> # which is equal to + >>> # which is equal to >>> # view.add_component('rcsb://1tsu.pdb') ''' return self.add_component(f'rcsb://{pdbid}.pdb', **kwargs) @@ -1331,7 +1335,7 @@ def _get_remote_call_msg(self, kwargs=None, **other_kwargs): """call NGL's methods from Python. - + Parameters ---------- method_name : str diff --git a/notebooks/nglview-js-widgets.js b/notebooks/nglview-js-widgets.js deleted file mode 120000 index f78500ca..00000000 --- a/notebooks/nglview-js-widgets.js +++ /dev/null @@ -1 +0,0 @@ -../nglview/static/index.js \ No newline at end of file