Skip to content

Commit f576abf

Browse files
authored
HTML embed fix: fallback to nglview-js-widgets 3.0.8 (working) for now. (#1112)
1 parent e9f66de commit f576abf

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

nglview/tests/test_widget.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ def test_show_pymatgen():
527527
def test_show_qcelemental():
528528
import qcelemental as qcel
529529

530-
mol = qcel.models.Molecule.from_data("He 0 0 0")
530+
mol = qcel.models.Molecule.from_data("He 0 0 0")
531531
view = nv.show_qcelemental(mol)
532532
view
533533

@@ -1025,15 +1025,17 @@ def test_write_html(mock_unset):
10251025
display(view)
10261026
fp = StringIO()
10271027

1028-
with patch.object(embed, 'embed_snippet') as mock_embed:
1028+
with patch.object(embed, 'embed_snippet') as mock_embed_snippet:
1029+
mock_embed_snippet.return_value = 'ok'
10291030
nv.write_html(fp, [view], frame_range=(0, 3))
1030-
mock_embed.assert_called_with([tm, cm, view])
1031+
mock_embed_snippet.assert_called_with([tm, cm, view])
10311032
mock_unset.assert_called_with()
10321033
assert len(view._ngl_coordinate_resource[0]) == 3
10331034
assert len(view._ngl_coordinate_resource[1]) == 3
10341035

10351036
# box
1036-
with patch.object(embed, 'embed_snippet') as mock_embed:
1037+
with patch.object(embed, 'embed_snippet') as mock_embed_snippet:
1038+
mock_embed_snippet.return_value = 'ok'
10371039
nv.write_html(fp, [HBox([view])], frame_range=(0, 3))
10381040
# FIXME: assertion?
10391041

nglview/widget.py

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import base64
22
import json
3+
import re
34
import threading
45
import time
56
import uuid
67
from logging import getLogger
78

89
import ipywidgets as widgets
9-
import ipywidgets.embed
10+
from ipywidgets import embed
1011
import numpy as np
1112
from IPython.display import display
1213
from ipywidgets import (Image, Box, DOMWidget, HBox, VBox, IntSlider, Output, Play, Widget,
@@ -84,9 +85,6 @@ def write_html(fp, views, frame_range=None):
8485
>>> nglview.write_html('index.html', [view], frame_range=(0, 5)) # doctest: +SKIP
8586
"""
8687
views = isinstance(views, DOMWidget) and [views] or views
87-
embed = ipywidgets.embed
88-
color = None
89-
theme = None
9088

9189
for _, v in _INIT_VIEWS.items():
9290
views.insert(0, v)
@@ -110,6 +108,12 @@ def _unset_serialization(views):
110108
snippet = '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css">\n'
111109
snippet += '<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">\n'
112110
snippet += embed.embed_snippet(views)
111+
# hacky thing for https://github.com/nglviewer/nglview/issues/1107
112+
# NGL must be fixed before we can remove this hack
113+
_frontend = {'__frontend_version__': __frontend_version__}
114+
pattern = r'("model_module":\s*"nglview-js-widgets",\s*"model_module_version":\s*)"' + re.escape(_frontend['__frontend_version__']) + '",'
115+
replacement = r'\g<1>"3.0.8",'
116+
snippet = re.sub(pattern, replacement, snippet)
113117
html_code = embed.html_template.format(title='nglview-demo',
114118
snippet=snippet)
115119

@@ -332,7 +336,7 @@ def camera(self):
332336
@camera.setter
333337
def camera(self, value):
334338
"""
335-
339+
336340
Parameters
337341
----------
338342
value : str, {'perspective', 'orthographic'}
@@ -694,7 +698,7 @@ def _update_repr_dict(self):
694698

695699
def set_representations(self, representations, component=0):
696700
"""
697-
701+
698702
Parameters
699703
----------
700704
representations : list of dict
@@ -840,7 +844,7 @@ def _add_shape(self, shapes, name='shape'):
840844
Notes
841845
-----
842846
Supported shape: 'mesh', 'sphere', 'ellipsoid', 'cylinder', 'cone', 'arrow'.
843-
847+
844848
See also
845849
--------
846850
{ngl_url}
@@ -983,7 +987,7 @@ def render_image(self,
983987
--------
984988
# tell NGL to render send image data to notebook.
985989
view.render_image()
986-
990+
987991
# make sure to call `get_image` method
988992
view.get_image()
989993
@@ -1183,7 +1187,7 @@ def add_pdbid(self, pdbid, **kwargs):
11831187
>>> import nglview
11841188
>>> view = nglview.NGLWidget()
11851189
>>> c = view.add_pdbid('1tsu')
1186-
>>> # which is equal to
1190+
>>> # which is equal to
11871191
>>> # view.add_component('rcsb://1tsu.pdb')
11881192
'''
11891193
return self.add_component(f'rcsb://{pdbid}.pdb', **kwargs)
@@ -1331,7 +1335,7 @@ def _get_remote_call_msg(self,
13311335
kwargs=None,
13321336
**other_kwargs):
13331337
"""call NGL's methods from Python.
1334-
1338+
13351339
Parameters
13361340
----------
13371341
method_name : str

notebooks/nglview-js-widgets.js

-1
This file was deleted.

0 commit comments

Comments
 (0)