Skip to content

Commit dd0ff90

Browse files
Handling update_interval values. (#185)
1 parent 40b70f3 commit dd0ff90

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

optimizely/config_manager.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,24 @@ def set_update_interval(self, update_interval):
212212
Args:
213213
update_interval: Time in seconds after which to update datafile.
214214
"""
215-
self.update_interval = update_interval or enums.ConfigManager.DEFAULT_UPDATE_INTERVAL
215+
if not update_interval:
216+
update_interval = enums.ConfigManager.DEFAULT_UPDATE_INTERVAL
217+
self.logger.debug('Set config update interval to default value {}.'.format(update_interval))
218+
219+
if not isinstance(update_interval, (int, float)):
220+
raise optimizely_exceptions.InvalidInputException(
221+
'Invalid update_interval "{}" provided.'.format(update_interval)
222+
)
216223

217224
# If polling interval is less than minimum allowed interval then set it to default update interval.
218-
if self.update_interval < enums.ConfigManager.MIN_UPDATE_INTERVAL:
219-
self.logger.debug('Invalid update_interval {} provided. Defaulting to {}'.format(
225+
if update_interval < enums.ConfigManager.MIN_UPDATE_INTERVAL:
226+
self.logger.debug('update_interval value {} too small. Defaulting to {}'.format(
220227
update_interval,
221228
enums.ConfigManager.DEFAULT_UPDATE_INTERVAL)
222229
)
223-
self.update_interval = enums.ConfigManager.DEFAULT_UPDATE_INTERVAL
230+
update_interval = enums.ConfigManager.DEFAULT_UPDATE_INTERVAL
231+
232+
self.update_interval = update_interval
224233

225234
def set_last_modified(self, response_headers):
226235
""" Looks up and sets last modified time based on Last-Modified header in the response.
@@ -269,9 +278,14 @@ def is_running(self):
269278

270279
def _run(self):
271280
""" Triggered as part of the thread which fetches the datafile and sleeps until next update interval. """
272-
while self.is_running:
273-
self.fetch_datafile()
274-
time.sleep(self.update_interval)
281+
try:
282+
while self.is_running:
283+
self.fetch_datafile()
284+
time.sleep(self.update_interval)
285+
except (OSError, OverflowError) as err:
286+
self.logger.error('Error in time.sleep. '
287+
'Provided update_interval value may be too big. Error: {}'.format(str(err)))
288+
raise
275289

276290
def start(self):
277291
""" Start the config manager and the thread to periodically fetch datafile. """

optimizely/helpers/validator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def is_finite_number(value):
221221
greater than absolute limit of 2^53 else False.
222222
"""
223223
if not isinstance(value, (numbers.Integral, float)):
224-
# numbers.Integral instead of int to accomodate long integer in python 2
224+
# numbers.Integral instead of int to accommodate long integer in python 2
225225
return False
226226

227227
if isinstance(value, bool):
@@ -244,7 +244,7 @@ def are_values_same_type(first_val, second_val):
244244
245245
Args:
246246
first_val: Value to validate.
247-
second_Val: Value to validate.
247+
second_val: Value to validate.
248248
249249
Returns:
250250
Boolean: True if both values belong to same type. Otherwise False.

tests/test_config_manager.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ def test_set_update_interval(self, _):
188188
""" Test set_update_interval with different inputs. """
189189
project_config_manager = config_manager.PollingConfigManager(sdk_key='some_key')
190190

191+
# Assert that if invalid update_interval is set, then exception is raised.
192+
with self.assertRaisesRegexp(optimizely_exceptions.InvalidInputException,
193+
'Invalid update_interval "invalid interval" provided.'):
194+
project_config_manager.set_update_interval('invalid interval')
195+
191196
# Assert that update_interval cannot be set to less than allowed minimum and instead is set to default value.
192197
project_config_manager.set_update_interval(0.42)
193198
self.assertEqual(enums.ConfigManager.DEFAULT_UPDATE_INTERVAL, project_config_manager.update_interval)

0 commit comments

Comments
 (0)