async def test_non_flatten_future(subtests): """Ensures that `flatten` is always returning the correct type.""" futures = [ # Not flattens: FutureResult.from_failure(FutureResult.from_failure(1)), ] for cont in futures: with subtests.test(container=cont): assert isinstance( (await flatten(cont)).failure()._inner_value, # noqa: WPS437 FutureResult, )
async def test_inner_value(subtests): """Ensure that coroutine correct value is preserved for all units.""" containers = [ # We have to define these values inside the test, because # otherwise `anyio` will `await` reused coroutines. # And they have to be fresh. That's why we use subtests for it. Future.from_futureresult(FutureResult.from_success(1)), Future.from_futureresult(FutureResult.from_failure(1)), ] for container in containers: with subtests.test(container=container): assert isinstance(await container, IO)
def from_failure( cls, inner_value: _FirstType, ) -> 'RequiresContextFutureResult[Any, _FirstType, NoDeps]': """ Creates new container with failed ``FutureResult`` as a unit value. .. code:: python >>> import anyio >>> from returns.context import RequiresContextFutureResult >>> from returns.io import IOFailure >>> assert anyio.run(RequiresContextFutureResult.from_failure(1)( ... RequiresContextFutureResult.empty, ... ).awaitable) == IOFailure(1) """ return RequiresContextFutureResult( lambda _: FutureResult.from_failure(inner_value), )
async def test_inner_value(subtests): """Ensure that coroutine correct value is preserved for all units.""" containers = [ # We have to define these values inside the test, because # otherwise `anyio` will `await` reused coroutines. # And they have to be fresh. That's why we use subtests for it. FutureResult.from_value(1), FutureResult.from_failure(1), FutureResult.from_io(IO(1)), FutureResult.from_failed_io(IO(1)), FutureResult.from_ioresult(IOSuccess(1)), FutureResult.from_ioresult(IOFailure(1)), FutureResult.from_result(Success(1)), FutureResult.from_result(Failure(1)), FutureResult.from_future(Future.from_value(1)), FutureResult.from_failed_future(Future.from_value(1)), FutureResult.from_typecast(Future.from_value(Success(1))), ] for container in containers: with subtests.test(container=container): result_inst = await container assert result_inst._inner_value._inner_value == 1 # noqa: WPS437
def from_failed_context( cls, inner_value: 'RequiresContext[_NewValueType, _NewEnvType]', ) -> 'RequiresContextFutureResult[Any, _NewValueType, _NewEnvType]': """ Creates new container from ``RequiresContext`` as a failure unit. .. code:: python >>> import anyio >>> from returns.context import RequiresContext >>> from returns.io import IOFailure >>> assert anyio.run( ... RequiresContextFutureResult.from_failed_context( ... RequiresContext.from_value(1), ... ), ... RequiresContextFutureResult.empty, ... ) == IOFailure(1) """ return RequiresContextFutureResult( lambda deps: FutureResult.from_failure(inner_value(deps)), )
from returns.primitives.asserts import assert_equal from returns.primitives.container import BaseContainer from returns.result import Result _containers: Sequence[BaseContainer] = ( Result.from_failure(1), Result.from_value(1), IO(1), IOResult.from_failure(1), IOResult.from_value(1), Maybe.from_value(1), Maybe.from_value(None), Maybe.from_optional(None), Future.from_value(1), FutureResult.from_value(1), FutureResult.from_failure(1), Reader.from_value(1), ReaderResult.from_value(1), ReaderResult.from_failure(1), ReaderIOResult.from_value(1), ReaderIOResult.from_failure(1), ReaderFutureResult.from_value(1), ReaderFutureResult.from_failure(1), ) @pytest.mark.parametrize('container', _containers) def test_assert_equal(container, anyio_backend_name: str): """Ensure that containers can be equal.""" assert_equal(container, container, backend=anyio_backend_name)
def test_return_false_with_future_result_container(): # noqa: WPS118 """Ensures `is_io` function will return False for FutureResult.""" assert is_io(FutureResult.from_failure('failure')) is False
def __call__( self, inner_value: str, use_result: Result[str, str], ) -> FutureResult[None, str]: return FutureResult.from_failure('release failure')
def _use_failure(inner_value: str) -> FutureResult[str, str]: return FutureResult.from_failure('use failure')
def _acquire_failure() -> FutureResult[str, str]: return FutureResult.from_failure('acquire failure')
async def test_bind_future_result(): """Ensures that functions can be composed and return type is correct.""" assert await bind(_future_result_function)( FutureResult.from_value(1), ) == IOSuccess('2') assert await bind(_future_result_function)( FutureResult.from_failure(1.0), ) == IOFailure(1.0)