Python dependency injection framework
Project description
Dependency Injector is a Python dependency injection framework. It was designed to be unified, developer-friendly tool for managing any kind of Python objects and their dependencies in formal, pretty way.
Dependency Injector framework key features are:
Easy, smart, pythonic style.
Obvious, clear structure.
Extensibility and flexibility.
Memory efficiency.
Thread safety.
Documentation.
Semantic versioning.
Status
PyPi |
|
Python versions and implementations |
|
Builds and tests coverage |
Installation
Dependency Injector library is available on PyPi:
pip install dependency_injector
Example
Brief example below demonstrates usage of Dependency Injector containers and providers for definition of several IoC containers for some microservice system that consists from several business and platform services:
"""Example of several Dependency Injector IoC containers."""
import sqlite3
import boto.s3.connection
import example.main
import example.services
import dependency_injector.containers as containers
import dependency_injector.providers as providers
class Platform(containers.DeclarativeContainer):
"""IoC container of platform service providers."""
database = providers.Singleton(sqlite3.connect, ':memory:')
s3 = providers.Singleton(boto.s3.connection.S3Connection,
aws_access_key_id='KEY',
aws_secret_access_key='SECRET')
class Services(containers.DeclarativeContainer):
"""IoC container of business service providers."""
users = providers.Factory(example.services.Users,
db=Platform.database)
auth = providers.Factory(example.services.Auth,
db=Platform.database,
token_ttl=3600)
photos = providers.Factory(example.services.Photos,
db=Platform.database,
s3=Platform.s3)
class Application(containers.DeclarativeContainer):
"""IoC container of application component providers."""
main = providers.Callable(example.main.main,
users_service=Services.users,
auth_service=Services.auth,
photos_service=Services.photos)
Next example demonstrates usage of IoC containers & providers defined above:
"""Run example application."""
import containers
if __name__ == '__main__':
containers.Application.main()
# Previous call is an equivalent of next operations:
#
# database = sqlite3.connect(':memory:')
# s3 = boto.s3.connection.S3Connection(aws_access_key_id='KEY',
# aws_secret_access_key='SECRET')
#
# example.main.main(users_service=example.services.Users(db=database),
# auth_service=example.services.Auth(db=database,
# token_ttl=3600),
# photos_service=example.services.Photos(db=database,
# s3=s3))
Alternative definition styles
Dependecy Injector supports few other styles of dependency injections definition.
IoC containers from previous example could look like these:
class Platform(containers.DeclarativeContainer):
"""IoC container of platform service providers."""
database = providers.Singleton(sqlite3.connect) \
.add_args(':memory:')
s3 = providers.Singleton(boto.s3.connection.S3Connection) \
.add_kwargs(aws_access_key_id='KEY',
aws_secret_access_key='SECRET')
or like this these:
class Platform(containers.DeclarativeContainer):
"""IoC container of platform service providers."""
database = providers.Singleton(sqlite3.connect)
database.add_args(':memory:')
s3 = providers.Singleton(boto.s3.connection.S3Connection)
s3.add_kwargs(aws_access_key_id='KEY',
aws_secret_access_key='SECRET')
You can get more Dependency Injector examples in /examples directory on GitHub:
Documentation
Dependency Injector documentation is hosted on ReadTheDocs:
Feedback
Feel free to post questions, bugs, feature requests, proposals etc. on Dependency Injector GitHub Issues:
https://github.com/ets-labs/python-dependency-injector/issues
Your feedback is quite important!
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
Hashes for dependency-injector-2.2.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 04b4a5e31749114212b76039ceb95ef4f00039c83d5292dbf108b7b869ab3516 |
|
MD5 | eea89ec9cc906367965c9dd75fdcd35c |
|
BLAKE2b-256 | f6348c51beb79a8afe4e5caeef408144fa5670ec14db514230559c569feff678 |