puffpastry - lightweight dependency injection for Python
Project description
:bread: puffpastry
A lightweight, intuitive, Pythonic dependency injection framework.
Highlights:
- :mushroom: Micro framework with very little overhead - single file implementation and handful of public API methods, minimal third-party package requirements.
- :full_moon: Unit-tests cover all core functionality, ruff and pre-commit used to ensure codebase health.
- :snake: Compliant with latest Python 3.x version
Getting Started
To install from PyPI, use pip:
pip install puffpastry
The following example shows bootstrapping a webapp using fastapi with configuration read from environment (or from .env
file, as we use python-dotenv under the hood). Of course, for such a minimal one-file implementation, dependency injection seems superfluous; but for larger codebases spread across multiple files this is a great way to manage dependencies and configuration.
from fastapi import FastAPI
from puffpastry import create, provides
from requests import get
class IpifyClient:
def __init__(self, base_url):
self.base_url = base_url
def ipv4(self):
return get(self.base_url).content.decode("utf8")
@provides("fastapi")
def fastapi_provider(app):
return FastAPI()
@provides("ipify_client")
def ipify_client(app):
# The base url will be read from IPIFY_BASE_URL env variable or .env file.
# To run this example set this value to 'https://api.ipify.org'
return IpifyClient(base_url=app.config.ipify_base_url)
@provides("home_route")
def home_route_provider(app):
@app.fastapi.get("/")
def home():
public_ip = app.ipify_client.ipv4()
return {"message": f"your public IP is {public_ip}"}
def create_app():
return create("my_app").load("fastapi", "ipify_client", "home_route")
app = create_app().fastapi
you can run this example with the fastapi CLI, assuming you saved the file as app.py
:
fastapi dev app.py
See examples/ for more usage examples.
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 puffpastry-0.0.3.tar.gz
.
File metadata
- Download URL: puffpastry-0.0.3.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66ad0bf522d307bb58d6d16b294be45179fdf53aad5b8a7bc05d5af7d3c338f0 |
|
MD5 | 07cb5429c768a0dcb571b6604f986d69 |
|
BLAKE2b-256 | 412b0fb9e0a1272b8867c8f0d277e573dc0398391558430ea70c5bb0dc718167 |
File details
Details for the file puffpastry-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: puffpastry-0.0.3-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fc11d951be53c0cc4a88550085b35df25ae7c70228cb9d752b0443ceefa22ce |
|
MD5 | 72cbdba6d331501e666a937205a0853c |
|
BLAKE2b-256 | 07286672f8b1ba48bc83acfb0a0f25a295e33fc862a3f08c2cdcebf7b3389007 |