Clarify None handling in sglang's environ (#15770)
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user