/
_render_widget.py
48 lines (38 loc) · 1.49 KB
/
_render_widget.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from __future__ import annotations
from typing import TYPE_CHECKING
from htmltools import Tag
if TYPE_CHECKING:
from altair import JupyterChart # pyright: ignore[reportMissingTypeStubs]
from jupyter_bokeh import BokehModel # pyright: ignore[reportMissingTypeStubs]
from plotly.graph_objects import ( # pyright: ignore[reportMissingTypeStubs]
FigureWidget,
)
from pydeck.widget import DeckGLWidget # pyright: ignore[reportMissingTypeStubs]
else:
JupyterChart = BokehModel = FigureWidget = DeckGLWidget = object
from ._dependencies import bokeh_dependency
from ._render_widget_base import ValueT, WidgetT, render_widget_base
__all__ = (
"render_widget",
"render_altair",
"render_bokeh",
"render_plotly",
"render_pydeck",
)
# In the generic case, just relay whatever the user's return type is
# since we're not doing any coercion
class render_widget(render_widget_base[WidgetT, WidgetT]):
...
# Package specific renderers that require coercion (via as_widget())
# NOTE: the types on these classes should mirror what as_widget() does
class render_altair(render_widget_base[ValueT, JupyterChart]):
...
class render_bokeh(render_widget_base[ValueT, BokehModel]):
def auto_output_ui(self, id: str) -> Tag:
res = super().auto_output_ui(id)
res.children.append(bokeh_dependency())
return res
class render_plotly(render_widget_base[ValueT, FigureWidget]):
...
class render_pydeck(render_widget_base[ValueT, DeckGLWidget]):
...