Dependency injection without the boilerplate.
Project description
PyBooster 💉
[!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:
- Define a provider function for a dependency.
- Add an injector to a function that will use that dependency.
- 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 solved
@provider.iterator
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 solved(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
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pybooster-0.0.3.tar.gz.
File metadata
- Download URL: pybooster-0.0.3.tar.gz
- Upload date:
- Size: 110.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa3939b2ff5787f5d55843def50c6ebbdc6c93bbd88663cae40f599f7495646f
|
|
| MD5 |
3d2efa71619db87d57819d8819b590c2
|
|
| BLAKE2b-256 |
225c4f636d49fac3f70371cc0850efa9a811427fd89f99c435bf96ea585177b0
|
File details
Details for the file pybooster-0.0.3-py3-none-any.whl.
File metadata
- Download URL: pybooster-0.0.3-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17fda14007655351596395802d4db8b023ccfbe4ebe3c68e592baa5f65cd6c4a
|
|
| MD5 |
744d15a783e6196ff342876504816181
|
|
| BLAKE2b-256 |
f0e0613702b7d47269ea18c5047447a39a88041bf8e80faed5b2965c8d817e84
|