This is pySyringe
. Inversion of Control container, which helps you get proper Dependency Injection
, while still being Pythonic.
Currently pySyringe
works only on Python 3.3+. Maybe later, support for older versions will be added.
pip install pysyringe
>>> import pysyringe
>>>
>>> class Foo:
...
... def __init__(self):
... self.bar = 42
...
>>> @pysyringe.inject(foo=Foo)
... def important_function(foo):
... return foo.bar
...
>>> important_function()
42
>>> class Mock:
... def __init__(self):
... self.bar = 1
...
>>> important_function(Mock())
>>>
>>> @pysyringe.inject_value(foo=42)
... def important_function2(foo):
... return foo
>>> important_function2()
42
As you can see testing is a lot simpler now. You don't need as much (hopefully none) mocking as you used to.
If pySyringe
injects the same class twice, it doesn't create instances twice, it simply returns previous one.
- Clone this repository
- Run
python setup.py develop
- Install
pytest
frompip
- Run
py.test