"""`Coroutine` providers example with @asyncio.coroutine decorator.

Current example works only fot Python 3.4+.
"""

import asyncio

import dependency_injector.providers as providers


@asyncio.coroutine
def coroutine_function(arg1, arg2):
    """Sample coroutine function."""
    yield from asyncio.sleep(0.1)
    return arg1, arg2


coroutine_provider = providers.Coroutine(coroutine_function, arg1=1, arg2=2)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    arg1, arg2 = loop.run_until_complete(coroutine_provider())

    assert (arg1, arg2) == (1, 2)
    assert asyncio.iscoroutinefunction(coroutine_provider)

"""`Coroutine` providers example with @asyncio.coroutine decorator.

Current example works only fot Python 3.4+.
"""

import asyncio

import dependency_injector.providers as providers


@asyncio.coroutine
def coroutine_function(arg1, arg2):
    """Sample coroutine function."""
    yield from asyncio.sleep(0.1)
    return arg1, arg2


coroutine_provider = providers.Coroutine(coroutine_function, arg1=1, arg2=2)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    arg1, arg2 = loop.run_until_complete(coroutine_provider())

    assert (arg1, arg2) == (1, 2)
    assert asyncio.iscoroutinefunction(coroutine_provider)

`Coroutine` providers example with @asyncio.coroutine decorator.  Current example works only fot Python 3.4+. Sample coroutine function.