Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes for bokeh server widgets #2218

Merged
merged 2 commits into from Dec 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions holoviews/plotting/bokeh/widgets.py
Expand Up @@ -68,7 +68,7 @@ def __init__(self, plot, renderer=None, **params):
self.renderer = renderer
# Create mock NdMapping to hold the common dimensions and keys
self.mock_obj = NdMapping([(k, None) for k in self.keys],
kdims=self.dimensions)
kdims=list(self.dimensions))
self.widgets, self.lookups = self.get_widgets()
self.reverse_lookups = {d: {v: k for k, v in item.items()}
for d, item in self.lookups.items()}
Expand Down Expand Up @@ -195,11 +195,10 @@ def update(self):
Handle update events on bokeh server.
"""
if not self._queue:
self._active = False
return
self._queue = []

dim, widget_type, attr, old, new = self._queue[-1]
self._queue = []
dim_label = dim.pprint_label

label, widget = self.widgets[dim_label]
Expand Down Expand Up @@ -232,6 +231,7 @@ def update(self):
key = wrap_tuple_streams(tuple(key), self.plot.dimensions,
self.plot.streams)
self.plot.update(key)
self._active = False



Expand Down
15 changes: 14 additions & 1 deletion tests/testbokehwidgets.py
Expand Up @@ -2,7 +2,9 @@

import numpy as np

from holoviews.core import Dimension, NdMapping
from holoviews import renderer
from holoviews.core import Dimension, NdMapping, DynamicMap
from holoviews.element import Curve
from holoviews.element.comparison import ComparisonTestCase

try:
Expand All @@ -18,6 +20,17 @@ def setUp(self):
if not BokehServerWidgets:
raise SkipTest("Bokeh required to test BokehServerWidgets")

def test_bokeh_widgets_server_mode(self):
dmap = DynamicMap(lambda X: Curve([]), kdims=['X']).redim.range(X=(0, 5))
widgets = renderer('bokeh').instance(mode='server').get_widget(dmap, None)
div, widget = widgets.widgets['X']
self.assertIsInstance(widget, Slider)
self.assertEqual(widget.value, 0)
self.assertEqual(widget.start, 0)
self.assertEqual(widget.end, 5)
self.assertEqual(widget.step, 1)
self.assertEqual(widgets.state.sizing_mode, 'fixed')

def test_bokeh_server_dynamic_range_int(self):
dim = Dimension('x', range=(3, 11))
widget, label, mapping = BokehServerWidgets.create_widget(dim, editable=True)
Expand Down