A thoughtful dependency injection framework 💉
Project description
Outline
Overview
Nurse is a dependency injection framework with a small API that uses type annotations to manage dependencies in your codebase.
Installation
Nurse is a Python3-only module that you can install via Poetry
poetry add nurse
It can also be installed with pip
pip3 install nurse
Usage
Nurse stores the available dependencies into a service catalog, that needs to be filled-in generally at the startup of your application.
import nurse
# A user defined class that will be used accross your application
class Player:
@property
def name(self) -> str:
return "Leeroy Jenkins"
# Now, add it to nurse service catalog in order to use it later in your application
nurse.serve(Player())
By default, dependencies are referenced by their concrete type, but you can also serve them via one of their parent class.
import nurse
class Animal:
pass
class AngryAnimal(Animal):
@property
def roar(self) -> str:
return "Grrr! 🦁"
nurse.serve(AngryAnimal(), through=Animal)
Once you filled-in the service catalog with your different components, your can declare them as dependencies to any of your class.
@nurse.inject("player")
class Game:
player: Player
enemy: Animal
def welcome_hero(self):
print(f"Welcome {self.player.name} !")
def summon_monster(self):
print(self.enemy.roar)
Game = Game()
game.welcome_hero()
# Welcome Leeroy Jenkins !
game.summon_monster()
# Grrr! 🦁
Or in any function
@nurse.inject('enemy')
def summon_monster(enemy: Animal):
print(enemy.roar)
summon_monster()
# Grrr! 🦁
And it works with async function as well !
import asyncio
@nurse.inject('enemy')
async def summon_monster(enemy: Animal):
print(enemy.roar)
asyncio.run(summon_monster())
# Grrr! 🦁
Finally, you can also retrieve a service without using a decorator
enemy = nurse.get(Animal)
print(enemy.roar)
# Grrr! 🦁
License
Nurse is released into the Public Domain. 🎉
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
Built Distribution
File details
Details for the file nurse-0.5.1.tar.gz
.
File metadata
- Download URL: nurse-0.5.1.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.0 CPython/3.9.18 Linux/5.15.133.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59aeb4e809f14dac10f9799d0e5d2f3594cfa2f19e1bf966499c7dfdb7378548 |
|
MD5 | a957107f239059f73e22671a7c4cf6d8 |
|
BLAKE2b-256 | 3347eddc9509484589f79416ca1343e24ce74f060ad9224ef81488e782226900 |
File details
Details for the file nurse-0.5.1-py3-none-any.whl
.
File metadata
- Download URL: nurse-0.5.1-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.0 CPython/3.9.18 Linux/5.15.133.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff3f111b6c845510bbca1dc2ee26fce2c8d8df1182377823a72936fe392955da |
|
MD5 | 0f43e5b234e181ae3aa6285c2215bd9f |
|
BLAKE2b-256 | 9eca97a5fa4eb5e1ea0789a66ec38c52b1414d2eaf0580de48156d257fdfc8cc |