diff --git a/flagsmith/polling_manager.py b/flagsmith/polling_manager.py index b152e68..7462f52 100644 --- a/flagsmith/polling_manager.py +++ b/flagsmith/polling_manager.py @@ -2,7 +2,6 @@ import logging import threading -import time import typing if typing.TYPE_CHECKING: @@ -26,8 +25,11 @@ def __init__( def run(self) -> None: while not self._stop_event.is_set(): - self.main.update_environment() - time.sleep(self.refresh_interval_seconds) + try: + self.main.update_environment() + except Exception: + logger.exception("Error updating environment") + self._stop_event.wait(self.refresh_interval_seconds) def stop(self) -> None: self._stop_event.set() diff --git a/flagsmith/streaming_manager.py b/flagsmith/streaming_manager.py index c4f2c6c..dc402d0 100644 --- a/flagsmith/streaming_manager.py +++ b/flagsmith/streaming_manager.py @@ -40,8 +40,9 @@ def run(self) -> None: for event in sse_client.events(): self.on_event(map_sse_event_to_stream_event(event)) - except (requests.RequestException, ValueError, TypeError): + except Exception: logger.exception("Error opening or reading from the event stream") + self._stop_event.wait(1) def stop(self) -> None: self._stop_event.set() diff --git a/tests/conftest.py b/tests/conftest.py index 4631958..1858d8c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -41,10 +41,14 @@ def tracking_init(self: Flagsmith, *args: typing.Any, **kwargs: typing.Any) -> N monkeypatch.setattr(Flagsmith, "__init__", tracking_init) yield for flagsmith in instances: - if getattr(flagsmith, "environment_data_polling_manager_thread", None): - flagsmith.environment_data_polling_manager_thread.stop() - if getattr(flagsmith, "event_stream_thread", None): - flagsmith.event_stream_thread.stop() + if polling := getattr( + flagsmith, "environment_data_polling_manager_thread", None + ): + polling.stop() + polling.join(timeout=5) + if stream := getattr(flagsmith, "event_stream_thread", None): + stream.stop() + stream.join(timeout=5) if flagsmith._event_processor: flagsmith._event_processor.stop() diff --git a/tests/test_flagsmith.py b/tests/test_flagsmith.py index 95c9605..ce63dbf 100644 --- a/tests/test_flagsmith.py +++ b/tests/test_flagsmith.py @@ -795,8 +795,14 @@ def test_stream_not_used_by_default( def test_stream_used_when_enable_realtime_updates_is_true( - requests_session_response_ok: None, server_api_key: str + requests_session_response_ok: None, server_api_key: str, mocker: MockerFixture ) -> None: + # Given + mocker.patch( + "flagsmith.streaming_manager.requests.get", + side_effect=requests.exceptions.ReadTimeout(), + ) + # When flagsmith = Flagsmith( environment_key=server_api_key,