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, SecretString
class MyConfig(BaseConfig):
timeout_s: float = EnvVar("TIMEOUT_S")
api_key: SecretString = 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='******', allowed_ids={1,2,3}, enable_feature=True, optional_arg=None)
Missing environment variables
If there are required environment variables not set, they will be grouped into one error e.g.:
config = MyConfig.fromenv()
#> MissingEnvVarsError: TIMEOUT_S, API_KEY, ALLOWED_IDS
Supported Types
-
Built-in/standard library types
intfloatboolstrtyping.StrEnumdatetime.datedatetime.datetime
-
Special types
-
SecretStringMasks sensitive environment variables by displaying ****** when printed or logged. The actual value is accessible via the
reveal()method, and memory is cleared when object is no longer needed.from envarify import BaseConfig, EnvVar, SecretString class MyConfig(BaseConfig): api_key: SecretString = EnvVar("API_KEY") config = MyConfig.fromenv() print(config.api_key) #> MyConfig(api_key='******')
-
UrlValidates that string is a URL.
from envarify import BaseConfig, EnvVar, Url class MyConfig(BaseConfig): url: Url = EnvVar("ws://example.com") config = MyConfig.fromenv() print(config.api_key) #> MyConfig(url='ws://example.com')
-
HttpUrlSame as
Urlbut validates forhttpprotocol -
HttpsUrlSame as
Urlbut validates forhttpsprotocol -
AnyHttpUrlSame as
Urlbut validates for eitherhttporhttpsprotocol
-
-
Dictionary
dict/typing.Dicttype reads environmental variable as JSON
-
Sequences (delimiter separated values)
-
list[T]/typing.List[T] -
set[T]/typing.Set[T] -
tuple[T]/typing.Tuple[T]where
Tis any primitive type
-
-
BaseConfigsubtype itselfWith environment variables
COMPONENT_TIMEOUT=5andOTHER=dummyyou 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')
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)
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file envarify-1.5.0.tar.gz.
File metadata
- Download URL: envarify-1.5.0.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f440bcdcd19697385a99eed35864eef805f252084ffa57200dc5cd4e48db8082
|
|
| MD5 |
7398c806d35b4ec9bb227024a844d8cb
|
|
| BLAKE2b-256 |
0da01f3089a7e5e554d8aaf5d02d0ab34937dba7cf74c909011f0e4f2dec124b
|
File details
Details for the file envarify-1.5.0-py3-none-any.whl.
File metadata
- Download URL: envarify-1.5.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad054407eff60732204e6accf1e73106f14db8e0713a6503be9d3256235b4e13
|
|
| MD5 |
c4b6c3089f2419dadb28784cf86df7bd
|
|
| BLAKE2b-256 |
5d00e592e0567b7590eab3045c55bc4e78c19c4edc273f5379ac02f13ecd8c44
|