API

siringa is a minimalist dependency injection library.

Usage example:

import siringa

@siringa.register
class MyUtilityClass(object):
    pass

@siringa.inject
def fn(foo, MyUtilityClass: '!'):
    return MyUtilityClass(foo)
class siringa.Layer(name, parent=None)

Bases: object

Layer represents a dependency injection layer with its own container. Layer can optionally inherit from a parent layer, implicitly inheriting its container dependencies.

A(name, resolver=None)
Annotation(name, resolver=None)
clear()
clear_mocks()
container
inject(*args, **kwargs)
invoke(*args, **kwargs)
is_injectable(name)
lookup(name, defaults=None)
lookup_mock(name, defaults=None)
mock(*args, **kwargs)
mocks
register(*args, **kwargs)
unregister(name)
unregister_mock(name)
siringa.analyze(obj)

Takes an object and dynamically infers its type in order to analyze dependency injection annotations.

class siringa.Container(parent=None)

Bases: collections.abc.MutableMapping

Dependencies container store that support optional parent container hierarchies and inheritance.

clear()
clear_mocks()
pop(name)
pop_mock(name)
exception siringa.SiringaError

Bases: Exception

class siringa.Dependency(obj, mock=False)

Bases: object

Dependency represents an injectable dependency used across containers.

dependencies()
is_injectable()
is_mock()
exception siringa.MissingDependencyError

Bases: siringa.errors.SiringaError

exception siringa.DuplicatedDependencyError

Bases: siringa.errors.SiringaError

exception siringa.InvalidDependencyTypeError

Bases: siringa.errors.SiringaError

siringa.register(*args, **kwargs)
siringa.inject(*args, **kwargs)
siringa.invoke(*args, **kwargs)
siringa.clear(*args, **kwargs)
siringa.clear_mocks(*args, **kwargs)
siringa.lookup(*args, **kwargs)
siringa.mock(*args, **kwargs)
siringa.unregister(*args, **kwargs)
siringa.unregister_mock(*args, **kwargs)
siringa.is_injectable(*args, **kwargs)
siringa.Annotation(*args, **kwargs)
siringa.A(*args, **kwargs)
siringa.lookup_mock(*args, **kwargs)
siringa.mocks(*args, **kwargs)
siringa.parent(*args, **kwargs)
siringa.container(*args, **kwargs)