Skip to main content

Fully automatic dependency injection for python

Project description

python-di

CI codecov pypi downloads versions license

Fully automatic dependency injection for python 3.7, 3.8, 3.9, pypy3 using (not only) argument annotations / type hints.

Corresponds to clean architecture patterns and ideal for business applications created in DDD / Hexagonal architecture flavour. No external dependencies - uses only standard libraries.

Key features:

  • automatic type matching based on type hints / type annotations - no manual configuration is needed, it just works out of the box
  • configurable object aggregation injection - DI can join SomeClass objects and inject into argument annotated as Collection[SomeClass]
  • not harm existing codebase - no decorators, no extra metadata are needed in existing codebase to make app construction possible
  • no singletons or global DI process state - app or any app components can be instantiated independently as many times as needed
  • transparency of DI process - static dependency graph and injection plan is built, informative exceptions on error cases (like cyclic dependency or missing elements)

Help

Coming soon...

An Example

Application domain located in mod_simple.py:

from typing import List


class Repo:
    def read(self) -> List[str]:
        raise NotImplementedError


class DomainAction:
    def __init__(self, repo: Repo):
        self.repo = repo

    def present(self) -> str:
        joined = ", ".join(self.repo.read())
        return f"Data found: {joined}"

Application concretes located in mod_simple_impl.py:

from typing import List

from mod_simple import Repo


class MockupRepo(Repo):
    def read(self) -> List[str]:
        return ["di", "test"]

Automatic application construction:

from di.declarative import DeclarativeApp, DeclarativeModule, scan_factories
import mod_simple, mod_simple_impl


def main():
    # create app definition
    app_def = DeclarativeApp(
        DeclarativeModule(
            # automatically add factories from `mod_simple` and `mod_simple_impl`
            scan_factories(mod_simple, mod_simple_impl),
        )
    )

    # build app
    instance = app_def.build_instance()

    # get initialized `DomainAction` object
    action, = instance.values_by_type(mod_simple.DomainAction)

    # check app works
    assert action.present() == "Data found: di, test"

More examples

More working examples are available in tests/di/declarative/. Please see tests/di/declarative/test_build.py for reference.

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

python-di-1.1.1.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

python_di-1.1.1-py3-none-any.whl (38.8 kB view details)

Uploaded Python 3

File details

Details for the file python-di-1.1.1.tar.gz.

File metadata

  • Download URL: python-di-1.1.1.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.8.8 Linux/5.4.0-1043-azure

File hashes

Hashes for python-di-1.1.1.tar.gz
Algorithm Hash digest
SHA256 af23342513c555f73593682d196e03ec66d0176505da1827a1f9ee1318a32c14
MD5 37ef6d4c7883534a648ddc1ed9f12260
BLAKE2b-256 02bbdd64dce7bbe9dfbeae01ebca325178d6a372cc2634e6aa6eef8f6077c9bf

See more details on using hashes here.

File details

Details for the file python_di-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: python_di-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 38.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.8.8 Linux/5.4.0-1043-azure

File hashes

Hashes for python_di-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 421247bc116a476504c2a17e2800a899d0fc7a9f8cd9718552f0b17fbf951d03
MD5 5180f486690a7af560e6cabc74a9ce63
BLAKE2b-256 f5e042ed4e572f9d5450809817bb3e2085933c68a6b18b7cdec45915fe3ba459

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page