Skip to content

Commit 4316680

Browse files
authored
Fix patching of ProcessPoolExecutor (#690)
1 parent 5f4c632 commit 4316680

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

logfire/_internal/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,9 @@ def _load_configuration(
578578
if isinstance(advanced, dict):
579579
# This is particularly for deserializing from a dict as in executors.py
580580
advanced = AdvancedOptions(**advanced) # type: ignore
581+
id_generator = advanced.id_generator
582+
if isinstance(id_generator, dict) and list(id_generator.keys()) == ['seed']: # type: ignore # pragma: no branch
583+
advanced.id_generator = SeededRandomIdGenerator(**id_generator) # type: ignore
581584
elif advanced is None:
582585
advanced = AdvancedOptions(base_url=param_manager.load_param('base_url'))
583586
self.advanced = advanced

logfire/_internal/integrations/executors.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def serialize_config() -> dict[str, Any]:
6363

6464

6565
def deserialize_config(config: dict[str, Any]) -> None:
66-
from ..config import configure
66+
from ..config import GLOBAL_CONFIG, configure
6767

68-
configure(**config)
68+
if not GLOBAL_CONFIG._initialized: # type: ignore
69+
configure(**config)

tests/test_configure.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
from logfire._internal.exporters.wrapper import WrapperSpanExporter
5353
from logfire._internal.integrations.executors import deserialize_config, serialize_config
5454
from logfire._internal.tracer import PendingSpanProcessor
55-
from logfire._internal.utils import get_version
55+
from logfire._internal.utils import SeededRandomIdGenerator, get_version
5656
from logfire.exceptions import LogfireConfigError
5757
from logfire.integrations.pydantic import get_pydantic_plugin_config
5858
from logfire.testing import TestExporter
@@ -848,14 +848,13 @@ def test_config_serializable():
848848
)
849849

850850
serialized = serialize_config()
851+
GLOBAL_CONFIG._initialized = False # type: ignore # ensure deserialize_config actually configures
851852
deserialize_config(serialized)
852853
serialized2 = serialize_config()
853854

854855
def normalize(s: dict[str, Any]) -> dict[str, Any]:
855856
for value in s.values():
856857
assert not dataclasses.is_dataclass(value)
857-
# This gets deepcopied by dataclasses.asdict, so we can't compare them directly
858-
del s['advanced']['id_generator']
859858
return s
860859

861860
assert normalize(serialized) == normalize(serialized2)
@@ -864,6 +863,7 @@ def normalize(s: dict[str, Any]) -> dict[str, Any]:
864863
assert isinstance(GLOBAL_CONFIG.sampling, logfire.SamplingOptions)
865864
assert isinstance(GLOBAL_CONFIG.scrubbing, logfire.ScrubbingOptions)
866865
assert isinstance(GLOBAL_CONFIG.advanced, logfire.AdvancedOptions)
866+
assert isinstance(GLOBAL_CONFIG.advanced.id_generator, SeededRandomIdGenerator)
867867

868868

869869
def test_config_serializable_console_false():

0 commit comments

Comments
 (0)