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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file envarify-1.1.2.tar.gz
.
File metadata
- Download URL: envarify-1.1.2.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b11107757933f6c0762b256858ea987b6adc8591bcc66f67c387f2fa5a07709 |
|
MD5 | 9faf5da73e2a8cf3c6bed877109e318f |
|
BLAKE2b-256 | b47f8aa167782eedfcaa475ce7d4ea18867208e342d6c6883c6901cf345cb68b |
File details
Details for the file envarify-1.1.2-py3-none-any.whl
.
File metadata
- Download URL: envarify-1.1.2-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8609637e64da278c78a42251644ab9518641d860cc3eb1d448237d9121f3f48e |
|
MD5 | a0eb5ae2887f08b9b69d0a1368d2fa6f |
|
BLAKE2b-256 | 2e7946486d100535d7b4646827a517e3361db00ccbed38f7168f99b95fa83cd1 |