Skip to main content

Dependency injection without the boilerplate.

Project description

PyBooster 💉

PyPI - Version License: MIT

[!WARNING] This project is still under development - use at your own risk.

PyBooster - dependency injection without the boilerplate.

Documentation

Learn more here: https://ryanmorshead.com/pybooster

Install

pip install -U pybooster

At a Glance

Getting started with PyBooster involves a few steps:

  1. Define a provider function for a dependency.
  2. Add an injector to a function that will use that dependency.
  3. Activate a solution and call the dependent function in its context.

The example below injects a sqlite3.Connection into a function that executes SQL:

import sqlite3
from collections.abc import Iterator
from tempfile import NamedTemporaryFile

from pybooster import injector
from pybooster import provider
from pybooster import required
from pybooster import solution


@provider.contextmanager
def sqlite_connection(database: str) -> Iterator[sqlite3.Connection]:
    with sqlite3.connect(database) as conn:
        yield conn


@injector.function
def sql(cmd: str, *, conn: sqlite3.Connection = required) -> sqlite3.Cursor:
    return conn.execute(cmd)


tempfile = NamedTemporaryFile()
with solution(sqlite_connection.bind(tempfile.name)):
    sql("CREATE TABLE example (id INTEGER PRIMARY KEY, name TEXT)")
    sql("INSERT INTO example (name) VALUES ('alice')")
    cursor = sql("SELECT * FROM example")
    assert cursor.fetchone() == (1, "alice")

This works by inspecting the type hints of the provider sqlite_connection to see that it produces a sqlite3.Connection. Simarly, the signature of the dependant function query_database is inspected to see that it requires a sqlite3.Connection. At that point, when query_database is called it checks to see if there's a sqlite3.Connection provider in the current solution and, if so, injects it into the function.

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

pybooster-0.0.8.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

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

pybooster-0.0.8-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file pybooster-0.0.8.tar.gz.

File metadata

  • Download URL: pybooster-0.0.8.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.13

File hashes

Hashes for pybooster-0.0.8.tar.gz
Algorithm Hash digest
SHA256 f8fbcdf212eb440de781cc29b5263b58b0fe0e8ce49cf0ee3fa13d2c004c6051
MD5 6e75adca9bd2dc9b6b5c6b2066a45ce8
BLAKE2b-256 1290e46be9c861d73896793e6ed8faeb019c6a573c9d67ceb98f04ea3260b2ae

See more details on using hashes here.

File details

Details for the file pybooster-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: pybooster-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.13

File hashes

Hashes for pybooster-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 eb26dfe0d414a0dfaff186aeef4811c5653eaf2ee5a54ccbd62d84961871d6a1
MD5 022d2713380cf2da0e188802d1db02a3
BLAKE2b-256 72a20055e8e9a681598338845a42eb120372ebe356930cdee6b9cb0040322565

See more details on using hashes here.

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