From 96d2188460fc51ea42c9d6c36d8ed784ccf24aa2 Mon Sep 17 00:00:00 2001 From: Shintaro Inoue <6049156+sanamio@users.noreply.github.com> Date: Thu, 15 Oct 2026 18:37:15 +0900 Subject: [PATCH] fix: use 15 minute polling interval while SSE is connected The SSE polling interval was 1000 * 60 * 15 * 60 ms (about 10 days) instead of the intended 15 minutes, so a missed or stale SSE update was not corrected by polling. Co-Authored-By: Claude Opus 5.5 --- devcycle_python_sdk/managers/config_manager.py | 2 +- test/managers/test_config_manager.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/devcycle_python_sdk/managers/config_manager.py b/devcycle_python_sdk/managers/config_manager.py index cfa16f7..d0422e5 100755 --- a/devcycle_python_sdk/managers/config_manager.py +++ b/devcycle_python_sdk/managers/config_manager.py @@ -34,7 +34,7 @@ def __init__( self._options = options self._local_bucketing = local_bucketing self._sse_manager: Optional[SSEManager] = None - self._sse_polling_interval = 1000 * 60 * 15 * 60 + self._sse_polling_interval = 1000 * 60 * 15 # 15 minutes self._sse_connected = False self._config: Optional[dict] = None self._config_etag: Optional[str] = None diff --git a/test/managers/test_config_manager.py b/test/managers/test_config_manager.py index 1e2fbaa..da6179b 100644 --- a/test/managers/test_config_manager.py +++ b/test/managers/test_config_manager.py @@ -110,6 +110,15 @@ def test_init_with_client_callback_with_error(self, mock_get_config): self.assertTrue(config_manager.is_initialized()) mock_callback.assert_called_once() + @patch("devcycle_python_sdk.api.config_client.ConfigAPIClient.get_config") + def test_sse_polling_interval_is_15_minutes(self, mock_get_config): + mock_get_config.return_value = (self.test_config_json, self.test_etag, None) + config_manager = EnvironmentConfigManager( + self.sdk_key, self.test_options, self.test_local_bucketing + ) + self.assertEqual(config_manager._sse_polling_interval, 15 * 60 * 1000) + config_manager.close() + @patch("devcycle_python_sdk.api.config_client.ConfigAPIClient.get_config") def test_close(self, mock_get_config): mock_get_config.return_value = (self.test_config_json, self.test_etag)