Environment variables parsing and validation using python type hints
Project description
Envarify
Environment variables parsing and validation using python type hints
Usage
Having some environment variables:
export TIMEOUT_S=2.5
export API_KEY=some_key
export ALLOWED_IDS=1,2,3
export ENABLE_FEATURE=true
We can create a config object in Python:
from envarify import BaseConfig, EnvVar
class MyConfig(BaseConfig):
timeout_s: float = EnvVar("TIMEOUT_S")
api_key: str = EnvVar("API_KEY")
allowed_ids: set[int] = EnvVar("ALLOWED_IDS")
enable_feature: bool = EnvVar("ENABLE_FEATURE", default=False)
optional_arg: str | None = EnvVar("OPTIONAL_ARG", default=None)
config = MyConfig.fromenv()
print(config)
#> MyConfig(timeout_s=2.5, api_key="some_key", allowed_ids={1,2,3}, enable_feature=True, optional_arg=None)
Missing environment variables
If there are some required environment variables that are not set, error will be raised:
config = MyConfig.fromenv()
#> MissingEnvVarsError: TIMEOUT_S, API_KEY, ALLOWED_IDS
Testing
In tests for your application you don't have to worry about mocking the environment variables. Instead just create a mock config object:
mock_config = MyConfig(timeout_s=4.2, api_key="dummy", allowed_ids={1,2,3}, enable_feature=True)
Supported Types
-
Primitive types
int
float
bool
str
-
Dictionary
dict
type reads environmental variable as JSON -
Sequences (delimiter separated values)
-
list[T]
-
set[T]
-
tuple[T]
where
T
is any primitive type
-
-
BaseConfig
subtype itselfWith environment variables
COMPONENT_TIMEOUT=5
andOTHER=dummy
you can do:from envarify import BaseConfig, EnvVar class ComponentConfig(BaseConfig): timeout: int = EnvVar("COMPONENT_TIMEOUT") class ApplicationConfig(BaseConfig): component: ComponentConfig other: str = EnvVar("OTHER") config = ApplicationConfig.fromenv() print(config) #> ApplicationConfig(component=ComponentConfig(timeout=5), other='dummy')
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
envarify-1.1.2.tar.gz
(10.4 kB
view hashes)