Skip to content

Commit

Permalink
Fixed event scheduling on server
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Mar 1, 2019
1 parent 791d0fd commit 439c39a
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 14 deletions.
28 changes: 19 additions & 9 deletions panel/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import sys

import param as _param
from bokeh.document import Document as _Document

from . import holoviews # noqa
from . import layout # noqa
from . import param # noqa
from . import pipeline # noqa
from . import plotly # noqa
from . import vega # noqa
Expand All @@ -17,11 +21,17 @@
from .util import load_notebook as _load_nb
from .viewable import Viewable

import param
from pyviz_comms import JupyterCommManager, extension as _pyviz_extension
from pyviz_comms import JupyterCommManager as _JupyterCommManager, Comm as _Comm, extension as _pyviz_extension

__version__ = str(_param.version.Version(
fpath=__file__, archive_commit="$Format:%h$", reponame="panel"))


class state(_param.Parameterized):

curdoc = _param.ClassSelector(class_=_Document)

__version__ = str(param.version.Version(fpath=__file__, archive_commit="$Format:%h$",
reponame="panel"))
comm = _param.ClassSelector(class_=_Comm)


class extension(_pyviz_extension):
Expand All @@ -30,7 +40,7 @@ class extension(_pyviz_extension):
bokeh and enable comms.
"""

inline = param.Boolean(default=True, doc="""
inline = _param.Boolean(default=True, doc="""
Whether to inline JS and CSS resources.
If disabled, resources are loaded from CDN if one is available.""")

Expand All @@ -43,16 +53,16 @@ def __call__(self, *args, **params):
except:
return

p = param.ParamOverrides(self, params)
p = _param.ParamOverrides(self, params)
if hasattr(ip, 'kernel') and not self._loaded:
# TODO: JLab extension and pyviz_comms should be changed
# to allow multiple cleanup comms to be registered
JupyterCommManager.get_client_comm(self._process_comm_msg,
"hv-extension-comm")
_JupyterCommManager.get_client_comm(self._process_comm_msg,
"hv-extension-comm")
_load_nb(p.inline)
self._loaded = True

Viewable._comm_manager = JupyterCommManager
Viewable._comm_manager = _JupyterCommManager

if 'holoviews' in sys.modules:
import holoviews as hv
Expand Down
5 changes: 3 additions & 2 deletions panel/holoviews.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ def _get_model(self, doc, root=None, parent=None, comm=None):
return model

def _link_widgets(self, pane, root, comm):
from . import state

def update_plot(change):
from holoviews.core.util import cross_index
Expand All @@ -135,11 +136,11 @@ def update_plot(change):
if comm:
plot.update(key)
plot.push()
elif state.curdoc:
plot.update(key)
else:

def update_plot():
plot.update(key)

plot.document.add_next_tick_callback(update_plot)
else:
plot.update(key)
Expand Down
3 changes: 3 additions & 0 deletions panel/layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def __init__(self, *objects, **params):
super(Panel, self).__init__(objects=objects, **params)

def _link_params(self, model, params, doc, root, comm=None):
from . import state
def set_value(*events):
msg = {event.name: event.new for event in events}
events = {event.name: event for event in events}
Expand All @@ -54,6 +55,8 @@ def update_model():
if comm:
update_model()
push(doc, comm)
elif state.curdoc:
update_model()
else:
doc.add_next_tick_callback(update_model)

Expand Down
3 changes: 3 additions & 0 deletions panel/pane.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ def _link_object(self, doc, root, parent, comm=None):
Links the object parameter to the rendered Bokeh model, triggering
an update when the object changes.
"""
from . import state
ref = root.ref['id']

def update_pane(change):
Expand Down Expand Up @@ -197,6 +198,8 @@ def update_models():
if comm:
update_models()
push(doc, comm)
elif state.curdoc:
update_models()
else:
doc.add_next_tick_callback(update_models)

Expand Down
11 changes: 8 additions & 3 deletions panel/viewable.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,7 @@ def _process_param_change(self, msg):
return properties

def _link_params(self, model, params, doc, root, comm=None):
from . import state
def param_change(*events):
msgs = []
for event in events:
Expand Down Expand Up @@ -629,6 +630,8 @@ def update_model():
raise
else:
self._expecting = self._expecting[:-len(msg)]
elif state.curdoc:
update_model()
else:
doc.add_next_tick_callback(update_model)

Expand Down Expand Up @@ -658,17 +661,19 @@ def _comm_change(self, msg):
def _server_change(self, doc, attr, old, new):
self._events.update({attr: new})
if not self._active:
doc.add_timeout_callback(self._change_event, self._debounce)
self._active = list(self._events)
doc.add_timeout_callback(partial(self._change_event, doc), self._debounce)

def _change_event(self):
def _change_event(self, doc=None):
from . import state
try:
state.curdoc = doc
self.set_param(**self._process_property_change(self._events))
except:
raise
finally:
self._events = {}
self._active = []
state.curdoc = None

def _get_customjs(self, change, client_comm, plot_id):
"""
Expand Down
4 changes: 4 additions & 0 deletions panel/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,8 @@ def _get_model(self, doc, root=None, parent=None, comm=None):
return model

def _link_params(self, model, slider, div, params, doc, root, comm=None):
from . import state

def param_change(*events):
combined_msg = {}
for event in events:
Expand All @@ -687,6 +689,8 @@ def update_model():
if comm:
update_model()
push(doc, comm)
elif state.curdoc:
update_model()
else:
doc.add_next_tick_callback(update_model)

Expand Down

0 comments on commit 439c39a

Please sign in to comment.