Source code for returns.primitives.asserts
[docs]def assert_equal(
first,
second,
*,
deps=None,
backend: str = 'asyncio',
) -> None:
"""
Custom ``assert`` function to compare two any containers.
The important note here is that
this ``assert`` should probably used in tests.
Not real application code.
It will call all ``Reader`` based containers and ``await``
all ``Future`` based ones.
It also works recursively.
For example, ``ReaderFutureResult`` will be called and then awaited.
You can specify different dependencies to call your containers.
And different backends to ``await`` then using ``anyio``.
By the way, ``anyio`` should be installed separately.
"""
assert _convert(
first, deps=deps, backend=backend,
) == _convert(
second, deps=deps, backend=backend,
), '{0} == {1}'.format(first, second)
def _convert(container, *, deps, backend: str):
from returns.interfaces.specific import future, reader
if isinstance(container, future.AwaitableFutureN):
import anyio
return _convert(
anyio.run(container.awaitable, backend=backend), # type: ignore
deps=deps,
backend=backend,
)
elif isinstance(container, reader.Contextable):
return _convert(
container(deps),
deps=deps,
backend=backend,
)
return container