Source code for autowire.impl.types

"""
impl.types
==========

Types for implementation.

"""
import abc
import types

from autowire._compat import PY35

if PY35:
    import typing

    from autowire.base import BaseContext

    T = typing.TypeVar('T')

    # mypy seems not work with typing.ContextManager, so commented it
    # class Implementation(typing.Callable[[BaseContext],
    #                                      typing.ContextManager[T]]):
    #     pass

    #: Implementation type
    Implementation = typing.Callable[[BaseContext], typing.Any]

else:
    Implementation = types.FunctionType


[docs]class Implementable(object, metaclass=abc.ABCMeta): """Some type that implementable""" @abc.abstractmethod
[docs] def implement(self, implementation: Implementation): """Implement me""" pass