Load and access environment variables with type casting
Project description
cdotenv
A Python library for loading and accessing environment variables from .env files or StringIO with type casting. Licensed under GPL 3.
Installation
pip install cdotenv
Usage
Loading Environment Variables
The load function loads environment variables into os.environ from a .env file, a custom file path, or a StringIO object.
-
Default
.envfile:from cdotenv import load load() # Loads from .env in current directory
-
Custom file path:
from cdotenv import load from pathlib import Path load(Path("custom.env"))
-
StringIO:
from cdotenv import load from io import StringIO load(StringIO("KEY=VALUE\n"))
The .env file should contain KEY=VALUE pairs, with comments (#) and empty lines ignored:
# Comment
KEY1=VALUE1
KEY2=VALUE2
Accessing Environment Variables with Type Casting
The Environ class allows type-hinted access to environment variables with automatic type conversion.
from cdotenv import Environ
class MyEnviron(Environ):
DEBUG: bool
DATABASE_URL: str
TIMEOUT: int
SEED: float
env = MyEnviron()
print(env.DEBUG) # True if os.environ["DEBUG"] = "true"
print(env.DATABASE_URL) # str, e.g., "postgresql://user:pass@localhost/db"
print(env.TIMEOUT) # int, e.g., 30
print(env.SEED) # float, e.g., 42.5
- Raises
ValueErrorif a variable is missing or cannot be converted to the specified type. - Raises
AttributeErrorfor undefined attributes.
Custom Type Conversion
Use the field decorator for custom conversion logic:
from cdotenv import Environ, field
class MyEnviron(Environ):
LIST: list = field(lambda x: x.split(","))
env = MyEnviron()
print(env.LIST) # ["a", "b", "c"] if os.environ["LIST"] = "a,b,c"
- Raises
ValueErrorif the converted value does not match the type hint.
Error Handling
-
Missing variable:
class MyEnviron(Environ): MISSING: str env = MyEnviron() env.MISSING # Raises ValueError: "Environment variable 'MISSING' not found"
-
Invalid type conversion:
os.environ["INVALID"] = "not_an_int" class MyEnviron(Environ): INVALID: int env = MyEnviron() env.INVALID # Raises ValueError: "Cannot convert 'not_an_int' to int"
-
Invalid return type:
os.environ["WRONG_TYPE"] = "a,b,c" class MyEnviron(Environ): WRONG_TYPE: int = field(lambda x: x.split(",")) env = MyEnviron() env.WRONG_TYPE # Raises ValueError: "Expected type 'int' for 'WRONG_TYPE', but got 'list'"
Workflow
The following diagram illustrates the workflow for loading and accessing environment variables:
sequenceDiagram
participant User
participant cdotenv
participant os.environ
User->>cdotenv: load(arg)
alt arg is None
cdotenv->>cdotenv: Use Path(".env")
else arg is Path
cdotenv->>cdotenv: Open file
else arg is StringIO
cdotenv->>cdotenv: Read lines
end
cdotenv->>os.environ: _update_environ(lines)
os.environ->>os.environ: Set KEY=VALUE pairs
User->>cdotenv: Instantiate MyEnviron()
User->>cdotenv: Access env.VARIABLE
cdotenv->>cdotenv: Check type hints
alt VARIABLE defined
cdotenv->>os.environ: Get VARIABLE value
alt Custom field
cdotenv->>cdotenv: Apply custom conversion
else
cdotenv->>cdotenv: Apply type casting
end
cdotenv->>cdotenv: Validate type
cdotenv-->>User: Return value
else
cdotenv-->>User: Raise AttributeError
end
alt VARIABLE missing
cdotenv-->>User: Raise ValueError
else Type conversion fails
cdotenv-->>User: Raise ValueError
end
License
This project is licensed under the GNU General Public License v3.0 (GPL 3).
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
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 cdotenv-0.1.2.tar.gz.
File metadata
- Download URL: cdotenv-0.1.2.tar.gz
- Upload date:
- Size: 16.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
faae89c6508106d6dc16bb8065578a93663d1d7ca2a0d0888d6f6cab17b47223
|
|
| MD5 |
fb644130785c7f6b442beb7697c3797e
|
|
| BLAKE2b-256 |
5cb81a20f7e0cd0fac4890a7adb41375e6e55570f969e29dfefdbc6c21f90f68
|
File details
Details for the file cdotenv-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cdotenv-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.3 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 |
8fa768c8f5583f46d6839dabb6c1e760c67fb23afb51d777146a304c9d6cf795
|
|
| MD5 |
c78d34f1462d57e6991818ccc1c3e9df
|
|
| BLAKE2b-256 |
a22cafd5292c0b48995b00da0cc2f8384daa1edbae26d8dfdbbeda06a84184b9
|