Bokeh Tooltip UnsetValueError

Hello everyone,
I’m facing an issue with tooltips in my application. Here’s an example of one of them:

hlp_topic_list_tooltip = Tooltip(content=HTML(HELP_TEXT_TOPIC_LIST),
                 position="right",
                 styles = {"width":"400px", "background-color": "#d3d3d3"}
                )
hlp_topic_list = pn.widgets.TooltipIcon(value = hlp_topic_list_tooltip)
topic_list = pn.Column(pn.Row("# Topic List", hlp_topic_list), topiclist_widget)

The app was deployed on Hugging Face. When initiating a new session, the application generates an exception. How to fix it?
Exception:

2023-08-19 10:56:14,190 Error running application handler <bokeh.application.handlers.script.ScriptHandler object at 0x7f7af30588e0>: Tooltip(id='p1003', ...).content doesn't have a value set
File 'descriptors.py', line 283, in __get__:
raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set") Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/bokeh/application/handlers/code_runner.py", line 229, in run
    exec(self._code, module.__dict__)
  File "/code/app.py", line 270, in <module>
    app_template.servable()
  File "/usr/local/lib/python3.10/site-packages/panel/template/base.py", line 517, in servable
    return super().servable(title, location, area, target)
  File "/usr/local/lib/python3.10/site-packages/panel/viewable.py", line 391, in servable
    self.server_doc(title=title, location=location) # type: ignore
  File "/usr/local/lib/python3.10/site-packages/panel/template/base.py", line 480, in server_doc
    return self._init_doc(doc, title=title, location=location)
  File "/usr/local/lib/python3.10/site-packages/panel/template/base.py", line 726, in _init_doc
    document = super()._init_doc(doc, comm, title, notebook, location)
  File "/usr/local/lib/python3.10/site-packages/panel/template/base.py", line 244, in _init_doc
    add_to_doc(model, document, hold=bool(comm))
  File "/usr/local/lib/python3.10/site-packages/panel/io/model.py", line 112, in add_to_doc
    remove_root(obj)
  File "/usr/local/lib/python3.10/site-packages/panel/io/model.py", line 99, in remove_root
    for model in obj.select({'type': Model}):
  File "/usr/local/lib/python3.10/site-packages/bokeh/model/model.py", line 485, in select
    return find(self.references(), selector)
  File "/usr/local/lib/python3.10/site-packages/bokeh/model/model.py", line 471, in references
    return set(collect_models(self))
  File "/usr/local/lib/python3.10/site-packages/bokeh/model/util.py", line 139, in collect_models
    return collect_filtered_models(None, *input_values)
  File "/usr/local/lib/python3.10/site-packages/bokeh/model/util.py", line 119, in collect_filtered_models
    visit_immediate_value_references(obj, queue_one)
  File "/usr/local/lib/python3.10/site-packages/bokeh/model/util.py", line 185, in visit_immediate_value_references
    child = getattr(value, attr)
  File "/usr/local/lib/python3.10/site-packages/bokeh/core/property/descriptors.py", line 283, in __get__
    raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set")
bokeh.core.property.descriptors.UnsetValueError: Tooltip(id='p1003', ...).content doesn't have a value set

Hello everyone,

Sorry for digging up an old post but I’m still encountering the same issue with Bokeh Tooltips.
I’m serving multiple apps, one being the documentation and the other is my app.
Here is a minimal example :

import panel as pn
from bokeh.models import Tooltip

pn.extension()

def create_doc():
    return pn.pane.Markdown("# This is the doc")

checkbox = pn.widgets.Checkbox(name='Disable button', value=False)
BUTTON_TOOLTIP = {'disabled': Tooltip(content='The button is disabled', position='bottom'),
                  'enabled': Tooltip(content='The button is enabled', position='bottom')}
button = pn.widgets.Button(name='Click me', description=BUTTON_TOOLTIP['enabled'])

def update_button(checkbox):
    if checkbox:
        button.disabled = True
        button.description = BUTTON_TOOLTIP['disabled']
    else:
        button.disabled = False
        button.description = BUTTON_TOOLTIP['enabled']

pn.bind(update_button, checkbox)

layout = pn.Column(checkbox, button)

ROUTES = {'doc': create_doc,
          'app': layout}
pn.serve(ROUTES)

When I toggle between my app and the doc (via the ‘Previous’ button in the browser) or when I wait several minutes before going back to the app (looks like a time out), I’m getting this error:

ERROR: panel.reactive - Callback failed for object named 'Disable button' changing property {'value': False} 
Traceback (most recent call last):
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\reactive.py", line 387, in _process_events
    self.param.update(**self_params)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2318, in update
    restore = dict(self_._update(arg, **kwargs))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2351, in _update
    self_._batch_call_watchers()
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2545, in _batch_call_watchers
    self_._execute_watcher(watcher, events)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2505, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\param.py", line 882, in _replace_pane
    new_object = self.eval(self.object)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\param.py", line 1097, in eval
    return eval_function_with_deps(ref)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 165, in eval_function_with_deps
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\depends.py", line 53, in _depends
    return func(*args, **kw)
           ^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\reactive.py", line 594, in wrapped
    return eval_fn()(*combined_args, **combined_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\AppData\Local\Temp\ipykernel_6196\232170566.py", line 7, in update_button
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 528, in _f
    instance_param.__set__(obj, val)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 530, in _f
    return f(self, obj, val)
           ^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 1552, in __set__
    obj.param._call_watcher(watcher, event)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2525, in _call_watcher
    self_._execute_watcher(watcher, (event,))
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\param\parameterized.py", line 2505, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\reactive.py", line 375, in _param_change
    self._apply_update(named_events, properties, model, ref)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\reactive.py", line 303, in _apply_update
    self._update_model(events, msg, root, model, doc, comm)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\reactive.py", line 626, in _update_model
    super()._update_model(events, msg, root, model, doc, comm)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\reactive.py", line 331, in _update_model
    model.update(**msg)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\has_props.py", line 485, in update
    setattr(self, k, v)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\has_props.py", line 338, in __setattr__
    return super().__setattr__(name, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\property\descriptors.py", line 333, in __set__
    self._set(obj, old, value, setter=setter)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\property\descriptors.py", line 621, in _set
    self._trigger(obj, old, value, hint=hint, setter=setter)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\property\descriptors.py", line 699, in _trigger
    obj.trigger(self.name, old, value, hint, setter)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\model.py", line 568, in trigger
    self.document.models.invalidate()
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\document\models.py", line 195, in invalidate
    self.recompute()
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\document\models.py", line 215, in recompute
    new_models |= mr.references()
                  ^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\model.py", line 480, in references
    return set(collect_models(self))
               ^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 139, in collect_models
    return collect_filtered_models(None, *input_values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 119, in collect_filtered_models
    visit_immediate_value_references(obj, queue_one)
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 185, in visit_immediate_value_references
    child = getattr(value, attr)
            ^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\property\descriptors.py", line 283, in __get__
    raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set")
bokeh.core.property.descriptors.UnsetValueError: Tooltip(id='e37e4342-2433-4dfb-b051-fc27a94ca41c', ...).content doesn't have a value set

Also, let’s say the app runs some long calculations, if I refresh the page, I get this error:

Uncaught exception GET /app(::1)
HTTPServerRequest(protocol='http', host='localhost:56689', method='GET', uri='/app', version='HTTP/1.1', remote_ip='::1')
Traceback (most recent call last):
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\tornado\web.py", line 1790, in _execute
    result = await result
             ^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\server.py", line 527, in get
    session = await self.get_session()
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\server.py", line 416, in get_session
    session = await super().get_session()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\server\views\session_handler.py", line 145, in get_session
    session = await self.application_context.create_session_if_needed(session_id, self.request, token)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\server\contexts.py", line 240, in create_session_if_needed
    self._application.initialize_document(doc)
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\application.py", line 77, in initialize_document
    super().initialize_document(doc)
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\application\application.py", line 190, in initialize_document
    h.modify_document(doc)
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\application\handlers\function.py", line 140, in modify_document
    self._func(doc)
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\server.py", line 145, in _eval_panel
    doc = panel._modify_doc(server_id, title, doc, location)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\viewable.py", line 316, in _modify_doc
    return self.server_doc(doc, title, location) # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\template\base.py", line 501, in server_doc
    return self._init_doc(doc, title=title, location=location)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\template\base.py", line 756, in _init_doc
    document = super()._init_doc(doc, comm, title, notebook, location)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\template\base.py", line 252, in _init_doc
    tracked_models |= add_to_doc(model, document, hold=bool(comm), skip=tracked_models)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\model.py", line 117, in add_to_doc
    models = remove_root(obj, skip=skip)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\panel\io\model.py", line 100, in remove_root
    for model in obj.select({'type': Model}):
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\model.py", line 494, in select
    return find(self.references(), selector)
                ^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\model.py", line 480, in references
    return set(collect_models(self))
               ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 139, in collect_models
    return collect_filtered_models(None, *input_values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 119, in collect_filtered_models
    visit_immediate_value_references(obj, queue_one)
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\model\util.py", line 185, in visit_immediate_value_references
    child = getattr(value, attr)
            ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\.conda\envs\env_name\Lib\site-packages\bokeh\core\property\descriptors.py", line 283, in __get__
    raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set")
bokeh.core.property.descriptors.UnsetValueError: Tooltip(id='p1011', ...).content doesn't have a value set

The app crashes due to a time out I guess, is there a way to avoid the crash so I can have the hand on my app?

I’m using the bokeh Tooltip in the first place because there is no other way to set the tooltip position with panel’s TooltipIcon widget.

Versions :

  • panel : 1.4.4
  • bokeh : 3.4.1

I can’t seem to reproduce using Panel 1.5.0; can you try upgrading?

Also, I think you’re missing a watch=True
pn.bind(update_button, checkbox, watch=True)

Thank you for the quick reply.
I upgraded to Panel 1.5.0, Bokeh 3.5.2.

I also added the param but I get this warning:

WARNING:param.ParamFunction00123: The function supplied for Panel to display was declared with `watch=True`, which will cause the function to be called twice for any change in a dependent Parameter. `watch` should be False when Panel is responsible for displaying the result of the function call, while `watch=True` should be reserved for functions that work via side-effects, e.g. by modifying internal state of a class or global state in an application's namespace.

Here is the complete stacktrace:

2024-09-24 10:32:35,677 ERROR: panel.reactive - Callback failed for object named 'Disable button' changing property {'value': True} 
Traceback (most recent call last):
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 462, in _process_events
    self.param.update(**self_params)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2319, in update
    restore = dict(self_._update(arg, **kwargs))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2352, in _update
    self_._batch_call_watchers()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2546, in _batch_call_watchers
    self_._execute_watcher(watcher, events)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2506, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\depends.py", line 108, in cb
    return func(*args, **dep_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\reactive.py", line 594, in wrapped
    return eval_fn()(*combined_args, **combined_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\AppData\Local\Temp\ipykernel_13268\232170566.py", line 4, in update_button
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 528, in _f
    instance_param.__set__(obj, val)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 530, in _f
    return f(self, obj, val)
           ^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 1553, in __set__
    obj.param._call_watcher(watcher, event)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2526, in _call_watcher
    self_._execute_watcher(watcher, (event,))
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2506, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 443, in _param_change
    applied &= self._apply_update(named_events, properties, model, ref)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 331, in _apply_update
    self._update_model(events, msg, root, model, doc, comm)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 702, in _update_model
    super()._update_model(events, msg, root, model, doc, comm)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 371, in _update_model
    model.update(**msg)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\has_props.py", line 483, in update
    setattr(self, k, v)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\has_props.py", line 336, in __setattr__
    return super().__setattr__(name, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 332, in __set__
    self._set(obj, old, value, setter=setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 620, in _set
    self._trigger(obj, old, value, hint=hint, setter=setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 698, in _trigger
    obj.trigger(self.name, old, value, hint, setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\model.py", line 568, in trigger
    self.document.models.invalidate()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\document\models.py", line 195, in invalidate
    self.recompute()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\document\models.py", line 215, in recompute
    new_models |= mr.references()
                  ^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\model.py", line 480, in references
    return set(collect_models(self))
               ^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 139, in collect_models
    return collect_filtered_models(None, *input_values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 119, in collect_filtered_models
    visit_immediate_value_references(obj, queue_one)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 185, in visit_immediate_value_references
    child = getattr(value, attr)
            ^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 282, in __get__
    raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set")
bokeh.core.property.descriptors.UnsetValueError: Tooltip(id='06c71609-1013-4991-9870-aeea493d19ed', ...).content doesn't have a value set
2024-09-24 10:32:39,820 ERROR: panel.reactive - Callback failed for object named 'Disable button' changing property {'value': True} 
Traceback (most recent call last):
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 462, in _process_events
    self.param.update(**self_params)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2319, in update
    restore = dict(self_._update(arg, **kwargs))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2352, in _update
    self_._batch_call_watchers()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2546, in _batch_call_watchers
    self_._execute_watcher(watcher, events)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2506, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\depends.py", line 108, in cb
    return func(*args, **dep_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\reactive.py", line 594, in wrapped
    return eval_fn()(*combined_args, **combined_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\username\AppData\Local\Temp\ipykernel_13268\232170566.py", line 4, in update_button
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 528, in _f
    instance_param.__set__(obj, val)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 530, in _f
    return f(self, obj, val)
           ^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 1553, in __set__
    obj.param._call_watcher(watcher, event)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2526, in _call_watcher
    self_._execute_watcher(watcher, (event,))
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\param\parameterized.py", line 2506, in _execute_watcher
    watcher.fn(*args, **kwargs)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 443, in _param_change
    applied &= self._apply_update(named_events, properties, model, ref)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 331, in _apply_update
    self._update_model(events, msg, root, model, doc, comm)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 702, in _update_model
    super()._update_model(events, msg, root, model, doc, comm)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\panel\reactive.py", line 371, in _update_model
    model.update(**msg)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\has_props.py", line 483, in update
    setattr(self, k, v)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\has_props.py", line 336, in __setattr__
    return super().__setattr__(name, value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 332, in __set__
    self._set(obj, old, value, setter=setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 620, in _set
    self._trigger(obj, old, value, hint=hint, setter=setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 698, in _trigger
    obj.trigger(self.name, old, value, hint, setter)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\model.py", line 568, in trigger
    self.document.models.invalidate()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\document\models.py", line 195, in invalidate
    self.recompute()
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\document\models.py", line 215, in recompute
    new_models |= mr.references()
                  ^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\model.py", line 480, in references
    return set(collect_models(self))
               ^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 139, in collect_models
    return collect_filtered_models(None, *input_values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 119, in collect_filtered_models
    visit_immediate_value_references(obj, queue_one)
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\model\util.py", line 185, in visit_immediate_value_references
    child = getattr(value, attr)
            ^^^^^^^^^^^^^^^^^^^^
  File "c:\ProgramData\anaconda3\envs\LATEST_PANEL\Lib\site-packages\bokeh\core\property\descriptors.py", line 282, in __get__
    raise UnsetValueError(f"{obj}.{self.name} doesn't have a value set")
bokeh.core.property.descriptors.UnsetValueError: Tooltip(id='06c71609-1013-4991-9870-aeea493d19ed', ...).content doesn't have a value set


And I’m also adding the video of how I reproduce the error, I waited about 10 seconds before getting back to the app.
I am using a notebook in VS Code.

1 Like

Great detailed explanation! That is also one of the longest (and most detailed) warning messages I have seen.

Could you try to replicate using 1.51, both in your current emvironment and on Binder? To eliminate the possibility that it is an environment or VS Code related issue.

Please indicate if you have questions about using Panel with Binder.

Hi,

I upgraded to panel 1.5.2.
I still have the 500: Internal Server Error on my app after a time out but there is no stacktrace anymore.

The warning message is just about the watch=True parameter, this was suggested by Andrew but I think it is not needed here.

The long and detailed message was the stacktrace of the error occurring.
I tried running the small project in jupyterlab, with the “Python 3 (ipykernel)”, I got the same error by doing the same scenario as in the video (waiting 10 seconds on the doc before getting back to the app).
I couldn’t deploy my GitHub app on Binder using the documentation (MyBinder — Panel v1.5.2 (holoviz.org) I made an export of the environment using Anaconda Navigator.

Anyway, I was allowed to change the layout of the application so I moved the objects which needed a tooltip to another location where they can be seen. I haven’t solved the UnsetValueError.

I recommend posting a GitHub issue with your minimal reproducible example if this still occurs.