Clarify None handling in sglang's environ (#15770)

This commit is contained in:
Liangsheng Yin
2025-12-25 11:40:17 +08:00
committed by GitHub
parent 0c39730b18
commit b311c43d13

View File

@@ -11,9 +11,8 @@ class EnvField:
def __init__(self, default: Any):
self.default = default
# NOTE: we use None to indicate whether the value is set or not
# If the value is manually set to None, we need mark it as _set_to_none.
# Always use clear() to reset the value, which leads to the default fallback.
# NOTE: environ can only accept str values, so we need a flag to indicate
# whether the env var is explicitly set to None.
self._set_to_none = False
def __set_name__(self, owner, name):
@@ -25,10 +24,13 @@ class EnvField:
def get(self) -> Any:
value = os.getenv(self.name)
# Explicitly set to None
if self._set_to_none:
assert value is None
assert value == str(None)
return None
# Not set, return default
if value is None:
return self.default
@@ -41,20 +43,11 @@ class EnvField:
return self.default
def is_set(self):
# NOTE: If None is manually set, it is considered as set.
return self.name in os.environ or self._set_to_none
def get_set_value_or(self, or_value: Any):
# NOTE: Ugly usage, but only way to get custom default value.
return self.get() if self.is_set() else or_value
return self.name in os.environ
def set(self, value: Any):
if value is None:
self._set_to_none = True
os.environ.pop(self.name, None)
else:
self._set_to_none = False
os.environ[self.name] = str(value)
self._set_to_none = value is None
os.environ[self.name] = str(value)
@contextmanager
def override(self, value: Any):