-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Milestone
Description
When specifying true
instead of True
as a value for an environment variable typed as bool
in Ecological, the program crashes with an obscure error.
Expect behavior:
- ideal:
true
(as well asTRUE
and other likely variations) is handled identically toTrue
(and similarly forFalse
); - acceptable: The error message warns that only valid Python expressions are accepted as values.
I don't know if this is or should be limited to boolean values.
Replay
$ python3 -m venv /tmp/venv
$ source /tmp/venv/bin/activate
(venv) $ python3 -m pip install ecological
...
Successfully installed ecological-1.6.0
# test.py
import ecological
class Config(ecological.AutoConfig, prefix="test"):
hi: bool = False
print(f"Config.hi = {Config.hi!r}")
(venv) $ python3 test.py # all is well
Config.hi = False
(venv) $ env TEST_HI=True python3 test.py # all is well
Config.hi = True
(venv) $ env TEST_HI=true python3 test.py # "true" instead of "True"
Traceback (most recent call last):
File "/tmp/venv/lib/python3.7/site-packages/ecological/autoconfig.py", line 135, in get
value = self.transform(raw_value, wanted_type)
File "/tmp/venv/lib/python3.7/site-packages/ecological/autoconfig.py", line 90, in cast
if isinstance(representation, str)
File "…/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 91, in literal_eval
return _convert(node_or_string)
File "…/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 90, in _convert
return _convert_signed_num(node)
File "…/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 63, in _convert_signed_num
return _convert_num(node)
File "…/.pyenv/versions/3.7.2/lib/python3.7/ast.py", line 55, in _convert_num
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Name object at 0x7fbf363839e8>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 3, in <module>
class Config(ecological.AutoConfig, prefix="test"):
File "/tmp/venv/lib/python3.7/site-packages/ecological/autoconfig.py", line 196, in __new__
value = attribute.get(attribute_type)
File "/tmp/venv/lib/python3.7/site-packages/ecological/autoconfig.py", line 137, in get
raise ValueError(f"Invalid configuration for '{self.name}': {e}.")
ValueError: Invalid configuration for 'TEST_HI': malformed node or string: <_ast.Name object at 0x7fbf363839e8>.
Metadata
Metadata
Assignees
Labels
No labels