Skip to content

Commit 91f5b7c

Browse files
Merge pull request #8 from hmohammad2520-org:HMohammad2520/6-envmod-default-value-problem
Fixed the 'None' or string conversion on everything
2 parents 82bdac0 + 60e109c commit 91f5b7c

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

classmods/_env_mod.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __init__(
3939
) -> None:
4040
self._name = name
4141
self._prefix = prefix
42-
self._default = '' if default is None else str(default)
42+
self._default = default
4343
self._required = required
4444
self._description = [line.strip() + '\n' for line in (description or [])]
4545

@@ -80,15 +80,19 @@ def _normalize_type(self, type_hint: Any) -> ENVParsableTypes:
8080
f"Cannot register parameter '{self._name}' of type '{type_hint}'"
8181
)
8282

83-
def cast(self, value: str) -> ENVParsable:
83+
def cast(self, value: str) -> ENVParsable | None:
8484
"""
8585
Cast the string value to its type_hint.
8686
"""
8787
if self._normal_type == bool:
8888
if value.lower() in ('1', 'true', 'yes'): return True
8989
if value.lower() in ('0', 'false', 'no'): return False
90+
if value.lower() in ('null', 'none'): return None
9091
raise ValueError(f"Invalid boolean: {value}")
9192

93+
if value == None:
94+
return None
95+
9296
return self._normal_type(value)
9397

9498
def load_value(self) -> ENVParsable | None:
@@ -101,9 +105,9 @@ def load_value(self) -> ENVParsable | None:
101105
self._value = None
102106
raise ValueError(f'This env is required and can not be None: {self._env_key}')
103107

104-
if self._default:
105-
self._value = self.cast(self._default)
106-
return self.cast(self._default)
108+
elif self._default:
109+
self._value = self._default
110+
return self._default
107111

108112
else:
109113
self._value = None
@@ -114,12 +118,12 @@ def load_value(self) -> ENVParsable | None:
114118

115119

116120
def __str__(self) -> str:
117-
return f"{self._env_key}={self._value or self._default or ''}"
121+
return f"{self._env_key}={self._value or self._default if self._default is not None else ''}"
118122

119123
def __repr__(self) -> str:
120124
return (
121125
f"<_Item key={self._env_key!r}, type={self._normal_type.__name__}, "
122-
f"default={self._default!r}, required={self._required}>"
126+
f"default={self._default if self._default is not None else ''}, required={self._required}>"
123127
)
124128

125129

@@ -253,7 +257,7 @@ def decorator(func: Callable) -> Callable:
253257
section_name = class_name,
254258
type_hint = cast.get(param.name) if cast and param.name in cast else type_hints.get(param.name, str),
255259
description = [line.strip() for line in doc_lines if param.name in line.lower()],
256-
default = None if param.default is inspect.Parameter.empty else str(param.default),
260+
default = None if param.default is inspect.Parameter.empty else param.default,
257261
required = param.default is inspect.Parameter.empty,
258262
)
259263

0 commit comments

Comments
 (0)