Skip to main content

A tiny module to read environment variables and tranform them.

Project description

envyronment

A tiny module to read environment variables and tranform them.

When load_dotenv is available, this is called at import time.


Code style: Ruff Typing: Pyright Linting: Pylint License CI Validation


Features

  • ✅ Simple, typed API
  • ✅ Loads .env if installed with extra dotenv
  • ✅ Flexible casting via astype=...
  • ✅ Propagates errors raised in the astype callable
  • ✅ Zero dependencies required, python-dotenv optionally installed

Requirements

  • Python 3.10+ (only 3.13 is tested)

Quick start

  1. Install the package

    pip install "envyronment[dotenv]"
    

    (the [dotenv] extra is optional — include it to enable .env file loading)

  2. Import and use

    import envyronment as env
    
    some_value = env.read("SOME_VALUE", 42, astype=int)
    

Example usage

import os

import envyronment as env

os.environ.update(
    {
        "GREENHOUSE_NAME": "dr. greenthumb's greenhouse",
        "ENABLE_PHOTOSYNTHESIS": "yes",
        "GARDEN_TOOLS": "shovel,rake,watering_can",
        "GARDEN_PLAN": '{"flowers": ["rose", "tulip"], "vegetables": ["carrot", "tomato"]}',
        "PLANT_LOG": "/var/log/garden/plants.log",
        "GREENHOUSE_DIR": "/srv/greenhouse",
        "GREENHOUSE_STATE": "open",
    }
)


def to_upper(value: str) -> str:
    """Convert a string to an uppercase string."""
    return value.upper()


# str, required, no astype provided, so str(value) is used, value="dr. greenthumb's greenhouse"
greenhouse_name = env.read("GREENHOUSE_NAME")

# int, optional, by default 42, value=42
max_plants = env.read("MAX_PLANTS", 42, astype=int)

# bool, optional, by default False, value=True
enable_photosynthesis = env.read("ENABLE_PHOTOSYNTHESIS", default=False, astype=env.to_bool)

# list[str], required, ["shovel", "rake", "watering_can"]
garden_tools = env.read("GARDEN_TOOLS", astype=env.to_list)

# dict (due to input format), required, value={"flowers": ["rose", "tulip"], "vegetables": ["carrot", "tomato"]}
garden_plan = env.read("GARDEN_PLAN", astype=env.to_json)

# Path, optional, parent directories created, no error if it already existed, value=/var/log/garden/plants.log
# ⚠️ Default value is a string because `convert_default=True` to ensure the path is created whether default or the env value is used.
plant_log = env.read("PLANT_LOG", "/tmp/log/garden/plants.log", astype=env.to_filepath, convert_default=True)

# Path, required, parent directories created, no error if it already existed, value=/src/greenhouse
greenhouse = env.read("GREENHOUSE_DIR", astype=env.to_dirpath)

# str, optional, by default CLOSED, uses custom converter defined above, value="OPEN"
greenhouse_state = env.read("GREENHOUSE_STATE", "CLOSED", astype=to_upper)

License

This project is licensed under the MIT License — see the LICENSE file for details.

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

envyronment-0.4.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

envyronment-0.4.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file envyronment-0.4.0.tar.gz.

File metadata

  • Download URL: envyronment-0.4.0.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for envyronment-0.4.0.tar.gz
Algorithm Hash digest
SHA256 9ffca947d8e19ff1f87974517c76c57ebd9d7e180f667154e499eeb03bf7fad7
MD5 7f2c08008822584161223eb87fb64083
BLAKE2b-256 f6327c75c23c01e40e5302e71bfa2f0ab92ff82c5637a576d51dff2ed32920a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for envyronment-0.4.0.tar.gz:

Publisher: release.yml on shifqu/envyronment

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file envyronment-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: envyronment-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for envyronment-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f5f16c1a5d661c75e9eb5d202e625bc90e4ac501cea55441915c52ddfbe0cdb
MD5 933a02b85901ca58f83a254668baef8d
BLAKE2b-256 cd1dfe6f1f3051c3c30691ae1ec511bf128fc220b8455910e23b984e56c62f95

See more details on using hashes here.

Provenance

The following attestation bundles were made for envyronment-0.4.0-py3-none-any.whl:

Publisher: release.yml on shifqu/envyronment

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page