Skip to content

Commit 52dc65f

Browse files
authored
skip export retry on pyodide (#823)
1 parent 4eedfe0 commit 52dc65f

File tree

4 files changed

+18
-7
lines changed

4 files changed

+18
-7
lines changed

logfire/_internal/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import functools
66
import json
77
import os
8-
import platform
98
import re
109
import sys
1110
import time
@@ -92,6 +91,7 @@
9291
UnexpectedResponse,
9392
ensure_data_dir_exists,
9493
handle_internal_errors,
94+
platform_is_emscripten,
9595
read_toml_file,
9696
suppress_instrumentation,
9797
)
@@ -709,7 +709,7 @@ def _initialize(self) -> None:
709709
if self._initialized: # pragma: no cover
710710
return
711711

712-
emscripten = platform.system().lower() == 'emscripten'
712+
emscripten = platform_is_emscripten()
713713

714714
with suppress_instrumentation():
715715
otel_resource_attributes: dict[str, Any] = {

logfire/_internal/exporters/otlp.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import logfire
2020

2121
from ..stack_info import STACK_INFO_KEYS
22-
from ..utils import logger, truncate_string
22+
from ..utils import logger, platform_is_emscripten, truncate_string
2323
from .wrapper import WrapperSpanExporter
2424

2525

@@ -50,7 +50,9 @@ def post(self, url: str, data: bytes, **kwargs: Any): # type: ignore
5050
# If we do this we must measure and limit the amount of time spent requesting and retrying.
5151
# TODO consider increasing the BatchSpanProcessor export delay here
5252
# to reduce the number of small inefficient requests.
53-
self.retryer.add_task(data, {'url': url, **kwargs})
53+
# No threads in Emscripten, we can't add a task to try later, just raise
54+
if not platform_is_emscripten(): # pragma: no branch
55+
self.retryer.add_task(data, {'url': url, **kwargs})
5456
raise
5557

5658
return response
@@ -133,7 +135,7 @@ def add_task(self, data: bytes, kwargs: dict[str, Any]):
133135
if self._should_log():
134136
logger.error('Export and retry failed: %s', e)
135137

136-
def _should_log(self):
138+
def _should_log(self) -> bool:
137139
result = time.monotonic() - self.last_log_time >= self.LOG_INTERVAL
138140
if result:
139141
self.last_log_time = time.monotonic()

logfire/_internal/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
import logging
66
import os
7+
import platform
78
import random
89
import sys
910
from contextlib import contextmanager
@@ -396,3 +397,11 @@ def generate_trace_id(self) -> int:
396397
while trace_id == trace_api.INVALID_TRACE_ID: # pragma: no cover
397398
trace_id = ulid(self.random, self._ms_timestamp_generator)
398399
return trace_id
400+
401+
402+
def platform_is_emscripten() -> bool:
403+
"""Return True if the platform is Emscripten, e.g. Pyodide.
404+
405+
Threads cannot be created on Emscripten, so we need to avoid any code that creates threads.
406+
"""
407+
return platform.system().lower() == 'emscripten'

uv.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)