Skip to main content

A dependency injection tool for python

Project description

Pypendency

Pypendency is a dependency injection library for python >=3.7.

Installation

pip install pypendency

Usage

Pypendency supports:

  • Declaration of explicit dependencies for each registered service.
  • Lazy evaluation (dependencies are not evaluated and instantiated until they are required)
  • Loading dependencies from different sources, such as python file, yaml file or directories. Also, it can be done programmatically.

Examples

# application_bootstrap.py

from pypendency.builder import container_builder
from pypendency.definition import Definition
from pypendency.loaders.yaml_loader import YamlLoader
from pypendency.loaders.py_loader import PyLoader

# Manually
container_builder.set('random_object', object())
container_builder.set_definition(
    Definition('another_random_object', 'builtins.object')
)

# File by file
YamlLoader(container_builder).load('/absolute/path/to/yaml/example.yaml')
PyLoader(container_builder).load('/absolute/path/to/python_file/example.py')
PyLoader(container_builder).load_by_module_name('python_file.example')

# Specifying a directory
YamlLoader(container_builder).load_dir('/absolute/path/to/yaml/')
PyLoader(container_builder).load_dir('/absolute/path/to/python_file/')
# path_to_yaml/example_di.yaml

example_class_identifier:
    fqn: example.class.namespace.ClassName
    args:
        - '@another_example_class_identifier'
    kwargs:
        example_kwarg: '@random_object'
# python/file/namespace/example_di.py

from pypendency.argument import Argument
from pypendency.builder import ContainerBuilder
from pypendency.definition import Definition


def load(container_builder: ContainerBuilder):
    container_builder.set("literal_string", "example_literal_string")
    container_builder.set_definition(
        Definition(
            "another_example_class_identifier",
            "another.example.class.namespace.AnotherClassName",
            [
                Argument.no_kw_argument("@literal_string"),
                Argument("kw_arg_example", "@literal_string"),
            ]
        )    
    )

Running tests

Build the docker image:

docker build . -t pypendency-dev

Run tests:

docker run -v $(pwd)/.:/usr/src/app pypendency-dev bash -c "pipenv run make run-tests"

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

pypendency-0.5.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

pypendency-0.5.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file pypendency-0.5.0.tar.gz.

File metadata

  • Download URL: pypendency-0.5.0.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.16

File hashes

Hashes for pypendency-0.5.0.tar.gz
Algorithm Hash digest
SHA256 38e28407d3d8e455b54f4b919986612609c5fbe506ce27c555ad715210dc5c09
MD5 47967ddad2bfe2ab95ba0dd610bf5c76
BLAKE2b-256 af9f127d9632f7c272880ad6fa2487a753ca97d548894fc7b8cf001827f04711

See more details on using hashes here.

File details

Details for the file pypendency-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: pypendency-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.16

File hashes

Hashes for pypendency-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c72c6eb0ad8a780cc37b52773917ca6e314d1838c0588c22c2c7640c92b01946
MD5 5b90a31d85846cf4d6063fcca5d231ae
BLAKE2b-256 9e8a3a0cd5cb74802061d5963e763986b9bbe3726b4eb34f75d0188b9efcc8dd

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