22
33from __future__ import annotations
44
5+ import asyncio
56import multiprocessing
67import platform
78
@@ -157,17 +158,7 @@ def _send_event(event_data: dict) -> bool:
157158 return False
158159
159160
160- def send (event : str , telemetry_enabled : bool | None = None , ** kwargs ) -> bool :
161- """Send anonymous telemetry for Reflex.
162-
163- Args:
164- event: The event name.
165- telemetry_enabled: Whether to send the telemetry (If None, get from config).
166- kwargs: Additional data to send with the event.
167-
168- Returns:
169- Whether the telemetry was sent successfully.
170- """
161+ def _send (event , telemetry_enabled , ** kwargs ):
171162 from reflex .config import get_config
172163
173164 # Get the telemetry_enabled from the config if it is not specified.
@@ -182,3 +173,36 @@ def send(event: str, telemetry_enabled: bool | None = None, **kwargs) -> bool:
182173 if not event_data :
183174 return False
184175 return _send_event (event_data )
176+
177+
178+ def send (event : str , telemetry_enabled : bool | None = None , ** kwargs ):
179+ """Send anonymous telemetry for Reflex.
180+
181+ Args:
182+ event: The event name.
183+ telemetry_enabled: Whether to send the telemetry (If None, get from config).
184+ kwargs: Additional data to send with the event.
185+ """
186+
187+ async def async_send (event , telemetry_enabled , ** kwargs ):
188+ return _send (event , telemetry_enabled , ** kwargs )
189+
190+ try :
191+ # Within an event loop context, send the event asynchronously.
192+ asyncio .create_task (async_send (event , telemetry_enabled , ** kwargs ))
193+ except RuntimeError :
194+ # If there is no event loop, send the event synchronously.
195+ _send (event , telemetry_enabled , ** kwargs )
196+
197+
198+ def send_error (error : Exception , context : str ):
199+ """Send an error event.
200+
201+ Args:
202+ error: The error to send.
203+ context: The context of the error (e.g. "frontend" or "backend")
204+
205+ Returns:
206+ Whether the telemetry was sent successfully.
207+ """
208+ return send ("error" , detail = type (error ).__name__ , context = context )
0 commit comments