def test_with_str(self): @Inject('default', param='default') def method(*args, **kwargs): self.assertIsNotNone(args[0]) self.assertIsNotNone(kwargs.get('param')) call(method)
def test_with_type(self): @Inject(object, param=object) def method(*args, **kwargs): self.assertIsNotNone(args[0]) self.assertIsNotNone(kwargs.get('param')) call(method)
def test_with_tuple(self): @Inject((object, 'default'), param=(object, 'default')) def method(*args, **kwargs): self.assertIsNotNone(args[0]) self.assertIsNotNone(kwargs.get('param')) call(method)
def test_with_context_args(self): DEFAULT_CONTAINER.register_instance(1, int, context='1') DEFAULT_CONTAINER.register_instance(2, int, context='2') DEFAULT_CONTAINER.register_instance(3, int, context='3') @Inject(int, _context='3') @Inject(int, _context='2') @Inject(int, _context='1') def sum_func(*args): for i, arg in zip(range(1, len(args) + 1), args): self.assertEqual(i, arg) return sum(args) self.assertEqual(6, call(sum_func)) self.assertEqual(10, call(sum_func, 4))
def test_common_args(self): DEFAULT_CONTAINER.register_instance(2, int) DEFAULT_CONTAINER.register_instance(4.0, float) @Inject(int) @Inject(float, int) def sum_func(*args): self.assertIsInstance(args[0], float) self.assertIsInstance(args[1], int) self.assertIsInstance(args[1], int) self.assertGreaterEqual(len(args), 3) return sum(args) self.assertEqual(8, call(sum_func)) self.assertEqual(11, call(sum_func, 3))
def test_simple_func(self): @Inject(_name_as_context=True) def sub_func(a: int, b: int) -> int: return a - b DEFAULT_CONTAINER.register_instance(4, int, context='a') DEFAULT_CONTAINER.register_instance(2, int, context='b') self.assertEqual(2, call(sub_func)) DEFAULT_CONTAINER.register_instance(2, int, context='a') DEFAULT_CONTAINER.register_instance(2, int, context='b') self.assertEqual(0, call(sub_func)) DEFAULT_CONTAINER.register_instance(2, int, context='a') DEFAULT_CONTAINER.register_instance(4, int, context='b') self.assertEqual(-2, call(sub_func))
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 a example of %s' % name) logger.debug('I\'m finishing...') call(main)
def test_simple_class(self): frc = WithForwardReferenceClass() DEFAULT_CONTAINER.register_instance(frc) self.assertIs(frc, call(frc.kwargs_inject))
def test_another_injected_string(self): expected = ANOTHER_STRING result = call(another_function_with_injection) self.assertEqual(expected, result)
def test_injected_string(self): expected = SOME_STRING result = call(function_with_injection) self.assertEqual(expected, result)
def test_method_with_injection(self): DEFAULT_CONTAINER.register_instance(self) complex_class = new(ComplexClass) call(complex_class.method_with_injection)