add type hinting for plotly

This commit is contained in:
Khaleel Al-Adhami 2024-10-30 20:02:24 -07:00
parent 4254eadce3
commit a62184d3d8
2 changed files with 124 additions and 103 deletions

View File

@ -2,12 +2,13 @@
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict, List from typing import Any, Dict, List, Tuple, Union
from typing_extensions import TypedDict, TypeVar
from reflex.base import Base
from reflex.components.component import Component, NoSSRComponent from reflex.components.component import Component, NoSSRComponent
from reflex.components.core.cond import color_mode_cond from reflex.components.core.cond import color_mode_cond
from reflex.event import EventHandler from reflex.event import EventHandler, empty_event
from reflex.utils import console from reflex.utils import console
from reflex.vars.base import LiteralVar, Var from reflex.vars.base import LiteralVar, Var
@ -21,19 +22,7 @@ except ImportError:
Template = Any # type: ignore Template = Any # type: ignore
def _event_data_signature(e0: Var) -> List[Any]: def _event_points_data_signature(e0: Var) -> Tuple[Var[List[Point]]]:
"""For plotly events with event data and no points.
Args:
e0: The event data.
Returns:
The event key extracted from the event data (if defined).
"""
return [Var(_js_expr=f"{e0}?.event")]
def _event_points_data_signature(e0: Var) -> List[Any]:
"""For plotly events with event data containing a point array. """For plotly events with event data containing a point array.
Args: Args:
@ -42,51 +31,63 @@ def _event_points_data_signature(e0: Var) -> List[Any]:
Returns: Returns:
The event data and the extracted points. The event data and the extracted points.
""" """
return [ return (Var(_js_expr=f"extractPoints({e0}?.points)"),)
Var(_js_expr=f"{e0}?.event"),
Var(_js_expr=f"extractPoints({e0}?.points)"),
T = TypeVar("T")
ItemOrList = Union[T, List[T]]
class BBox(TypedDict):
"""Bounding box for a point in a plotly graph."""
x0: Union[float, int, None]
x1: Union[float, int, None]
y0: Union[float, int, None]
y1: Union[float, int, None]
z0: Union[float, int, None]
z1: Union[float, int, None]
class Point(TypedDict):
"""A point in a plotly graph."""
x: Union[float, int, None]
y: Union[float, int, None]
z: Union[float, int, None]
lat: Union[float, int, None]
lon: Union[float, int, None]
curveNumber: Union[int, None]
pointNumber: Union[int, None]
pointNumbers: Union[List[int], None]
pointIndex: Union[int, None]
markerColor: Union[
ItemOrList[
ItemOrList[
Union[
float,
int,
str,
None,
]
]
],
None,
] ]
markerSize: Union[
ItemOrList[
class _ButtonClickData(Base): ItemOrList[
"""Event data structure for plotly UI buttons.""" Union[
float,
menu: Any int,
button: Any None,
active: Any ]
]
],
def _button_click_signature(e0: _ButtonClickData) -> List[Any]: None,
"""For plotly button click events. ]
bbox: Union[BBox, None]
Args:
e0: The button click data.
Returns:
The menu, button, and active state.
"""
return [e0.menu, e0.button, e0.active]
def _passthrough_signature(e0: Var) -> List[Any]:
"""For plotly events with arbitrary serializable data, passed through directly.
Args:
e0: The event data.
Returns:
The event data.
"""
return [e0]
def _null_signature() -> List[Any]:
"""For plotly events with no data or non-serializable data. Nothing passed through.
Returns:
An empty list (nothing passed through).
"""
return []
class Plotly(NoSSRComponent): class Plotly(NoSSRComponent):
@ -116,49 +117,49 @@ class Plotly(NoSSRComponent):
use_resize_handler: Var[bool] = LiteralVar.create(True) use_resize_handler: Var[bool] = LiteralVar.create(True)
# Fired after the plot is redrawn. # Fired after the plot is redrawn.
on_after_plot: EventHandler[_passthrough_signature] on_after_plot: EventHandler[empty_event]
# Fired after the plot was animated. # Fired after the plot was animated.
on_animated: EventHandler[_null_signature] on_animated: EventHandler[empty_event]
# Fired while animating a single frame (does not currently pass data through). # Fired while animating a single frame (does not currently pass data through).
on_animating_frame: EventHandler[_null_signature] on_animating_frame: EventHandler[empty_event]
# Fired when an animation is interrupted (to start a new animation for example). # Fired when an animation is interrupted (to start a new animation for example).
on_animation_interrupted: EventHandler[_null_signature] on_animation_interrupted: EventHandler[empty_event]
# Fired when the plot is responsively sized. # Fired when the plot is responsively sized.
on_autosize: EventHandler[_event_data_signature] on_autosize: EventHandler[empty_event]
# Fired whenever mouse moves over a plot. # Fired whenever mouse moves over a plot.
on_before_hover: EventHandler[_event_data_signature] on_before_hover: EventHandler[empty_event]
# Fired when a plotly UI button is clicked. # Fired when a plotly UI button is clicked.
on_button_clicked: EventHandler[_button_click_signature] on_button_clicked: EventHandler[empty_event]
# Fired when the plot is clicked. # Fired when the plot is clicked.
on_click: EventHandler[_event_points_data_signature] on_click: EventHandler[_event_points_data_signature]
# Fired when a selection is cleared (via double click). # Fired when a selection is cleared (via double click).
on_deselect: EventHandler[_null_signature] on_deselect: EventHandler[empty_event]
# Fired when the plot is double clicked. # Fired when the plot is double clicked.
on_double_click: EventHandler[_passthrough_signature] on_double_click: EventHandler[empty_event]
# Fired when a plot element is hovered over. # Fired when a plot element is hovered over.
on_hover: EventHandler[_event_points_data_signature] on_hover: EventHandler[_event_points_data_signature]
# Fired after the plot is layed out (zoom, pan, etc). # Fired after the plot is layed out (zoom, pan, etc).
on_relayout: EventHandler[_passthrough_signature] on_relayout: EventHandler[empty_event]
# Fired while the plot is being layed out. # Fired while the plot is being layed out.
on_relayouting: EventHandler[_passthrough_signature] on_relayouting: EventHandler[empty_event]
# Fired after the plot style is changed. # Fired after the plot style is changed.
on_restyle: EventHandler[_passthrough_signature] on_restyle: EventHandler[empty_event]
# Fired after the plot is redrawn. # Fired after the plot is redrawn.
on_redraw: EventHandler[_event_data_signature] on_redraw: EventHandler[empty_event]
# Fired after selecting plot elements. # Fired after selecting plot elements.
on_selected: EventHandler[_event_points_data_signature] on_selected: EventHandler[_event_points_data_signature]
@ -167,10 +168,10 @@ class Plotly(NoSSRComponent):
on_selecting: EventHandler[_event_points_data_signature] on_selecting: EventHandler[_event_points_data_signature]
# Fired while an animation is occuring. # Fired while an animation is occuring.
on_transitioning: EventHandler[_event_data_signature] on_transitioning: EventHandler[empty_event]
# Fired when a transition is stopped early. # Fired when a transition is stopped early.
on_transition_interrupted: EventHandler[_event_data_signature] on_transition_interrupted: EventHandler[empty_event]
# Fired when a hovered element is no longer hovered. # Fired when a hovered element is no longer hovered.
on_unhover: EventHandler[_event_points_data_signature] on_unhover: EventHandler[_event_points_data_signature]
@ -216,8 +217,8 @@ const extractPoints = (points) => {
pointNumber: point.pointNumber, pointNumber: point.pointNumber,
pointNumbers: point.pointNumbers, pointNumbers: point.pointNumbers,
pointIndex: point.pointIndex, pointIndex: point.pointIndex,
'marker.color': point['marker.color'], markerColor: point['marker.color'],
'marker.size': point['marker.size'], markerSize: point['marker.size'],
bbox: bbox, bbox: bbox,
}) })
}) })

View File

@ -3,9 +3,10 @@
# ------------------- DO NOT EDIT ---------------------- # ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`! # This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------ # ------------------------------------------------------
from typing import Any, Dict, Optional, Union, overload from typing import Any, Dict, List, Optional, Union, overload
from typing_extensions import TypedDict, TypeVar
from reflex.base import Base
from reflex.components.component import NoSSRComponent from reflex.components.component import NoSSRComponent
from reflex.event import EventType from reflex.event import EventType
from reflex.style import Style from reflex.style import Style
@ -20,11 +21,30 @@ except ImportError:
console.warn("Plotly is not installed. Please run `pip install plotly`.") console.warn("Plotly is not installed. Please run `pip install plotly`.")
Figure = Any Figure = Any
Template = Any Template = Any
T = TypeVar("T")
ItemOrList = Union[T, List[T]]
class _ButtonClickData(Base): class BBox(TypedDict):
menu: Any x0: Union[float, int, None]
button: Any x1: Union[float, int, None]
active: Any y0: Union[float, int, None]
y1: Union[float, int, None]
z0: Union[float, int, None]
z1: Union[float, int, None]
class Point(TypedDict):
x: Union[float, int, None]
y: Union[float, int, None]
z: Union[float, int, None]
lat: Union[float, int, None]
lon: Union[float, int, None]
curveNumber: Union[int, None]
pointNumber: Union[int, None]
pointNumbers: Union[List[int], None]
pointIndex: Union[int, None]
markerColor: Union[ItemOrList[ItemOrList[Union[float, int, str, None]]], None]
markerSize: Union[ItemOrList[ItemOrList[Union[float, int, None]]], None]
bbox: Union[BBox, None]
class Plotly(NoSSRComponent): class Plotly(NoSSRComponent):
def add_imports(self) -> dict[str, str]: ... def add_imports(self) -> dict[str, str]: ...
@ -45,20 +65,20 @@ class Plotly(NoSSRComponent):
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_after_plot: Optional[EventType] = None, on_after_plot: Optional[EventType[[]]] = None,
on_animated: Optional[EventType] = None, on_animated: Optional[EventType[[]]] = None,
on_animating_frame: Optional[EventType] = None, on_animating_frame: Optional[EventType[[]]] = None,
on_animation_interrupted: Optional[EventType] = None, on_animation_interrupted: Optional[EventType[[]]] = None,
on_autosize: Optional[EventType] = None, on_autosize: Optional[EventType[[]]] = None,
on_before_hover: Optional[EventType] = None, on_before_hover: Optional[EventType[[]]] = None,
on_blur: Optional[EventType[[]]] = None, on_blur: Optional[EventType[[]]] = None,
on_button_clicked: Optional[EventType] = None, on_button_clicked: Optional[EventType[[]]] = None,
on_click: Optional[EventType] = None, on_click: Optional[EventType[List[Point]]] = None,
on_context_menu: Optional[EventType[[]]] = None, on_context_menu: Optional[EventType[[]]] = None,
on_deselect: Optional[EventType] = None, on_deselect: Optional[EventType[[]]] = None,
on_double_click: Optional[EventType] = None, on_double_click: Optional[EventType[[]]] = None,
on_focus: Optional[EventType[[]]] = None, on_focus: Optional[EventType[[]]] = None,
on_hover: Optional[EventType] = None, on_hover: Optional[EventType[List[Point]]] = None,
on_mount: Optional[EventType[[]]] = None, on_mount: Optional[EventType[[]]] = None,
on_mouse_down: Optional[EventType[[]]] = None, on_mouse_down: Optional[EventType[[]]] = None,
on_mouse_enter: Optional[EventType[[]]] = None, on_mouse_enter: Optional[EventType[[]]] = None,
@ -67,16 +87,16 @@ class Plotly(NoSSRComponent):
on_mouse_out: Optional[EventType[[]]] = None, on_mouse_out: Optional[EventType[[]]] = None,
on_mouse_over: Optional[EventType[[]]] = None, on_mouse_over: Optional[EventType[[]]] = None,
on_mouse_up: Optional[EventType[[]]] = None, on_mouse_up: Optional[EventType[[]]] = None,
on_redraw: Optional[EventType] = None, on_redraw: Optional[EventType[[]]] = None,
on_relayout: Optional[EventType] = None, on_relayout: Optional[EventType[[]]] = None,
on_relayouting: Optional[EventType] = None, on_relayouting: Optional[EventType[[]]] = None,
on_restyle: Optional[EventType] = None, on_restyle: Optional[EventType[[]]] = None,
on_scroll: Optional[EventType[[]]] = None, on_scroll: Optional[EventType[[]]] = None,
on_selected: Optional[EventType] = None, on_selected: Optional[EventType[List[Point]]] = None,
on_selecting: Optional[EventType] = None, on_selecting: Optional[EventType[List[Point]]] = None,
on_transition_interrupted: Optional[EventType] = None, on_transition_interrupted: Optional[EventType[[]]] = None,
on_transitioning: Optional[EventType] = None, on_transitioning: Optional[EventType[[]]] = None,
on_unhover: Optional[EventType] = None, on_unhover: Optional[EventType[List[Point]]] = None,
on_unmount: Optional[EventType[[]]] = None, on_unmount: Optional[EventType[[]]] = None,
**props, **props,
) -> "Plotly": ) -> "Plotly":