fix(router): handle None values in update_settings integer settings

Router.update_settings() raised an unhandled TypeError when None was
passed for any integer setting (timeout, num_retries, retry_after,
allowed_fails, cooldown_time):

    _casted_value = int(kwargs[var])   # int(None) -> TypeError

This is a real production path: the proxy server calls
update_settings(**combined_router_settings) on every startup, where
settings are merged from config.yaml and a JSON database. JSON null
maps to Python None, so clearing a timeout via the admin UI causes a
proxy startup crash.

Fix: guard with an explicit None check before casting.

Adds regression test covering all five int settings with None input
and confirms valid int values still work after a None reset.
This commit is contained in:
Dantuluri Surya Narayana Raju 2026-05-17 20:14:24 +05:30
parent cf9b5e4fa7
commit 212d5d3330
2 changed files with 27 additions and 2 deletions

View file

@ -9520,8 +9520,10 @@ class Router:
for var in kwargs:
if var in _allowed_settings:
if var in _int_settings:
_casted_value = int(kwargs[var])
setattr(self, var, _casted_value)
if kwargs[var] is None:
setattr(self, var, None)
else:
setattr(self, var, int(kwargs[var]))
elif var == "routing_groups":
self._routing_groups_input = kwargs[var]
rebuild_routing_groups = True

View file

@ -977,6 +977,29 @@ def test_update_settings(model_list):
assert router.allowed_fails == 20
def test_update_settings_none_int_values(model_list):
"""Regression test: update_settings must not crash when None is passed for int settings.
Previously raised TypeError: int() argument must be a string... not 'NoneType'"""
router = Router(model_list=model_list, timeout=30, allowed_fails=5)
# None should reset each int setting without raising TypeError
router.update_settings(timeout=None)
assert router.timeout is None
router.update_settings(allowed_fails=None)
assert router.allowed_fails is None
router.update_settings(num_retries=None)
assert router.num_retries is None
router.update_settings(cooldown_time=None)
assert router.cooldown_time is None
# Valid int values must still work after None resets
router.update_settings(timeout=60)
assert router.timeout == 60
def test_common_checks_available_deployment(model_list):
"""Test if the 'common_checks_available_deployment' function is working correctly"""
router = Router(model_list=model_list)