diff --git a/panel/io/model.py b/panel/io/model.py index e810c5e882..21f9064850 100644 --- a/panel/io/model.py +++ b/panel/io/model.py @@ -9,6 +9,7 @@ from bokeh.models import Box, ColumnDataSource, Model from bokeh.protocol import Protocol +from ..util import bokeh_version from .state import state #--------------------------------------------------------------------- @@ -20,6 +21,11 @@ def diff(doc, binary=True, events=None): Returns a json diff required to update an existing plot with the latest plot data. """ + if events is None: + if bokeh_version >= '2.4': + events = list(doc.callbacks._held_events) + else: + events = list(doc._held_events) events = list(doc._held_events) if events is None else events if not events or state._hold: return None @@ -54,12 +60,19 @@ def add_to_doc(obj, doc, hold=False): # Add new root remove_root(obj) doc.add_root(obj) - if doc._hold is None and hold: + if bokeh_version >= '2.4': + doc_hold = doc.callbacks.hold_value + else: + doc_hold = doc._hold + if doc_hold is None and hold: doc.hold() @contextmanager def hold(doc, policy='combine', comm=None): - held = doc._hold + if bokeh_version >= '2.4': + held = doc.callbacks.hold_value + else: + held = doc._hold try: if policy is None: doc.unhold() @@ -68,7 +81,10 @@ def hold(doc, policy='combine', comm=None): yield finally: if held: - doc._hold = held + if bokeh_version >= '2.4': + doc.callbacks._hold = held + else: + doc._hold = held else: if comm is not None: from .notebook import push diff --git a/panel/io/server.py b/panel/io/server.py index e39fef36b4..cca3a53547 100644 --- a/panel/io/server.py +++ b/panel/io/server.py @@ -446,7 +446,10 @@ def unlocked(): return connections = curdoc.session_context.session._subscribed_connections - hold = curdoc._hold + if bokeh_version >= '2.4': + hold = curdoc.callbacks.hold_value + else: + hold = curdoc._hold if hold: old_events = list(curdoc._held_events) else: diff --git a/panel/pane/plot.py b/panel/pane/plot.py index 5c84556e47..847199cdaf 100644 --- a/panel/pane/plot.py +++ b/panel/pane/plot.py @@ -14,7 +14,7 @@ from ..io import remove_root from ..io.notebook import push -from ..util import escape +from ..util import escape, bokeh_version from ..viewable import Layoutable from .base import PaneBase from .ipywidget import IPyWidget @@ -32,7 +32,10 @@ def _wrap_callback(cb, wrapped, doc, comm, callbacks): replaces the wrapped callback with the real one while the callback is exectuted to ensure the callback can be removed as usual. """ - hold = doc._hold + if bokeh_version >= '2.4': + hold = doc.callbacks.hold_value + else: + hold = doc._hold doc.hold('combine') if wrapped in callbacks: index = callbacks.index(wrapped) diff --git a/panel/reactive.py b/panel/reactive.py index 57da12e39e..b1944d7385 100644 --- a/panel/reactive.py +++ b/panel/reactive.py @@ -1487,7 +1487,7 @@ def _set_on_model(self, msg, root, model): model.update(**msg) finally: if old: - self._chaning[root.ref['id']] = old + self._changing[root.ref['id']] = old else: del self._changing[root.ref['id']] diff --git a/panel/viewable.py b/panel/viewable.py index 49d66cc9ac..9912388952 100644 --- a/panel/viewable.py +++ b/panel/viewable.py @@ -32,7 +32,7 @@ from .io.save import save from .io.state import state from .io.server import init_doc, serve -from .util import escape, param_reprs +from .util import bokeh_version, escape, param_reprs class Layoutable(param.Parameterized): @@ -266,7 +266,10 @@ def _on_msg(self, ref, manager, msg): """ root, doc, comm = state._views[ref][1:] patch_cds_msg(root, msg) - held = doc._hold + if bokeh_version >= '2.4': + held = doc.callbacks.hold_value + else: + held = doc._hold patch = manager.assemble(msg) doc.hold() patch.apply_to_document(doc, comm.id)