Source code for wired.decorators

# wired is usable without venusian
try:
    import venusian
except ImportError:  # pragma: no cover
    venusian = None


# noinspection PyPep8Naming
[docs] class service_factory: """ Register a factory for a class that can sniff dependencies. The factory will be registered with a :class:`wired.ServiceRegistry` when performing a venusian scan. .. seealso:: - :func:`wired.ServiceRegistry.register_factory` """ def __init__(self, for_=None, context=None, name: str = ''): self.for_ = for_ self.context = context self.name = name def __call__(self, wrapped): def callback(scanner: venusian.Scanner, name: str, cls): registry = getattr(scanner, 'registry') # If there is a for_ use it, otherwise, register for the same # class as the instance for_ = self.for_ if self.for_ else cls registry.register_factory(cls, for_, context=self.context, name=self.name) venusian.attach(wrapped, callback, category='wired') return wrapped