/python-cdi

Python Code Dependency Injection Library

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

PyCDI

https://travis-ci.org/ettoreleandrotognoli/python-cdi.svg?branch=master Maintainability Test Coverage CodeFactor

A simple Python CDI ( Code Dependency Injection) Library.

See the code of conduct.

Install

Install stable pycdi

pip install pycdi

Install latest pycdi

pip install git+https://github.com/ettoreleandrotognoli/python-cdi

Usage

Python2 & Python3

You can see more examples in the examples folder (examples/common).

import logging
from logging import Logger

from pycdi import Inject, Singleton, Producer
from pycdi.shortcuts import call


@Producer(str, _context='app_name')
def get_app_name():
    return 'PyCDI'


@Singleton(produce_type=Logger)
@Inject(app_name=str, _context='app_name')
def get_logger(app_name):
    return logging.getLogger(app_name)


@Inject(name=(str, 'app_name'), logger=Logger)
def main(name, logger):
    logger.info('I\'m starting...')
    print('Hello World!!!\nI\'m a example of %s' % name)
    logger.debug('I\'m finishing...')


call(main)

Python 3

With Python 3 it is possible to define the types of injection with Python type hints.

You can see more examples in the examples folder( examples/py3/ ).

import logging
from logging import Logger

from pycdi import Inject, Singleton, Producer
from pycdi.shortcuts import call


@Producer(_context='app_name')
def get_app_name() -> str:
    return 'PyCDI'


@Singleton()
@Inject(logger_name='app_name')
def get_logger(logger_name: str) -> Logger:
    return logging.getLogger(logger_name)


@Inject(name='app_name')
def main(name: str, logger: Logger):
    logger.info('I\'m starting...')
    print('Hello World!!!\nI\'m an example of %s' % name)
    logger.debug('I\'m finishing...')


call(main)