Skip to main content

puffpastry - lightweight dependency injection for Python

Project description

CircleCI

: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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

puffpastry-0.0.3.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

puffpastry-0.0.3-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

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

Hashes for puffpastry-0.0.3.tar.gz
Algorithm Hash digest
SHA256 66ad0bf522d307bb58d6d16b294be45179fdf53aad5b8a7bc05d5af7d3c338f0
MD5 07cb5429c768a0dcb571b6604f986d69
BLAKE2b-256 412b0fb9e0a1272b8867c8f0d277e573dc0398391558430ea70c5bb0dc718167

See more details on using hashes here.

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

Hashes for puffpastry-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9fc11d951be53c0cc4a88550085b35df25ae7c70228cb9d752b0443ceefa22ce
MD5 72cbdba6d331501e666a937205a0853c
BLAKE2b-256 07286672f8b1ba48bc83acfb0a0f25a295e33fc862a3f08c2cdcebf7b3389007

See more details on using hashes here.

Supported by

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