Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions flagsmith/polling_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import logging
import threading
import time
import typing

if typing.TYPE_CHECKING:
Expand All @@ -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()
Expand Down
3 changes: 2 additions & 1 deletion flagsmith/streaming_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Comment thread
khvn26 marked this conversation as resolved.
self._stop_event.wait(1)

def stop(self) -> None:
self._stop_event.set()
Expand Down
12 changes: 8 additions & 4 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Comment thread
khvn26 marked this conversation as resolved.

Expand Down
8 changes: 7 additions & 1 deletion tests/test_flagsmith.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading