28 lines
934 B
Python
28 lines
934 B
Python
"""Miscellaneous utility functions."""
|
|
|
|
import re
|
|
|
|
|
|
def parse_string_as_bool(value: str) -> bool:
|
|
"""Parses the given string into a boolean based on its content.
|
|
|
|
This is used to parse environment variables as boolean values.
|
|
|
|
The following strings are parsed as `True`: "yes", "Yes", "YES", "true", "True", "TRUE", "1"
|
|
The following strings are parsed as `False`: "no", "No", "NO", "false", "False", "FALSE", "0"
|
|
|
|
In any other case, a `ValueError` is raised.
|
|
"""
|
|
|
|
if not isinstance(value, str):
|
|
raise TypeError("Expected a string argument.")
|
|
|
|
regex_true = re.compile(r"^(YES)|(Yes)|(yes)|(TRUE)|(True)|(true)|(1)$")
|
|
regex_false = re.compile(r"^(NO)|(No)|(no)|(FALSE)|(False)|(false)|(0)$")
|
|
|
|
if regex_true.fullmatch(value):
|
|
return True
|
|
if regex_false.fullmatch(value):
|
|
return False
|
|
raise ValueError(f"Failed to parse the supplied value as a boolean: {value!r}")
|