Unified environment variable and settings management for FastAPI and beyond
Description
fastenv [fæst iː ən v] is a Python package for managing environment variables and application settings.
Environment variables are key-value pairs provided to the operating system with syntax like VARIABLE_NAME=value. Collections of environment variables are stored in files commonly named .env and called "dotenv" files. The Python standard library os module provides tools for reading environment variables, such as os.getenv("VARIABLE_NAME"), but only handles strings, and doesn't include tools for file I/O. Additional logic is therefore needed to load environment variables from files before they can be read by Python, and to convert variables from strings to other Python types.
This project aims to:
Replace the aging python-dotenv project with a similar, but more intuitive API, and modern syntax and tooling.
Implement asynchronous file I/O. Reading and writing files can be done asynchronously with packages like AnyIO.
Implement asynchronous object storage integration. Dotenv files are commonly kept in cloud object storage, but environment variable management packages typically don't integrate with object storage clients. Additional logic is therefore required to download .env files from object storage prior to loading environment variables. This project aims to integrate with S3-compatible object storage, with a focus on downloading and uploading file objects.
Read settings from TOML. It's all about pyproject.toml now. The Python community has pushed PEP 517 build tooling and PEP 518 build requirements forward, and even setuptools has come around. PEP 621 defined how to store package metadata and dependencies in pyproject.toml. Why don't we use the metadata from our pyproject.toml files in our Python applications?
Unify settings management for FastAPI. Uvicorn, Starlette, and pydantic each have their own ways of loading environment variables and configuring application settings. This means that, when configuring a FastAPI application, there are at least three different settings management tools available, each with their own pros and cons. It would be helpful to address the limitations of each of these options, potentially providing a similar, improved API for each one.
The source code is 100% type-annotated and unit-tested.
# instantiate a DotEnv with a variableimport fastenv
dotenv = fastenv.DotEnv("EXAMPLE_VARIABLE=example_value")
# add a variable with dictionary syntax
dotenv["ANOTHER_VARIABLE"] = "another_value"# delete a variabledel dotenv["ANOTHER_VARIABLE"]
# add a variable by calling the instance
dotenv("I_THINK_FASTENV_IS=awesome")
# {'I_THINK_FASTENV_IS': 'awesome'}# return a dict of the variables in the DotEnv instancedict(dotenv)
# {'EXAMPLE_VARIABLE': 'example_value', 'I_THINK_FASTENV_IS': 'awesome'}# save the DotEnv instance to a fileimport anyio
anyio.run(fastenv.dump_dotenv, dotenv)
# Path('/path/to/this/dir/.env')
Unified environment variable and settings management for FastAPI and beyond.
We found that fastenv demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
OpenSSF has published OSPS Baseline, an initiative designed to establish a minimum set of security-related best practices for open source software projects.
Michigan TypeScript founder Dimitri Mitropoulos implements WebAssembly runtime in TypeScript types, enabling Doom to run after processing 177 terabytes of type definitions.