Skip to content

Commit 6e8e9a1

Browse files
committed
Adds .from_io constructor to ReaderFutureResult and ReaderIOResult, refs #274
1 parent 9e2bd21 commit 6e8e9a1

File tree

12 files changed

+213
-59
lines changed

12 files changed

+213
-59
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ See [0Ver](https://0ver.org/).
6868
- Adds `bind_io` method to `IOResult`
6969
- Adds `bind_io` method to `RequiresContextIOResult`
7070
- Adds `or_else` method to `Maybe`
71+
- Adds `.from_io` and `.from_failed_io` to `RequiresContextIOResult`
7172

73+
- Syncs naming in `from_*` methods, now all parameters are named `inner_value`
7274
- Adds `not_` composition helper
7375
- Adds `flatten` support for `Future`,
7476
`FutureResult` and `RequiresContextFutureResult`

docs/pages/context.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,21 @@ How to create unit objects?
421421
- ``from_value`` when you want to mark some raw value as a ``Success``
422422
- ``from_failure`` when you want to mark some raw value as a ``Failure``
423423
- ``from_result`` when you already have ``Result`` container
424+
- ``from_io`` when you have successful ``IO`` container
425+
- ``from_failed_io`` when you have failed ``IO`` container
426+
- ``from_ioresult`` when you already have ``IOResult`` container
427+
- ``from_context`` when you have successful ``RequiresContext``
428+
- ``from_failed_context`` when you have failed ``RequiresContext``
429+
- ``from_typecast`` when you have ``RequiresContext[..., IOResult]``
430+
431+
``RequiresContextFutureResult`` requires
432+
you to use one of the following methods:
433+
434+
- ``from_value`` when you want to mark some raw value as a ``Success``
435+
- ``from_failure`` when you want to mark some raw value as a ``Failure``
436+
- ``from_result`` when you already have ``Result`` container
437+
- ``from_io`` when you have successful ``IO`` container
438+
- ``from_failed_io`` when you have failed ``IO`` container
424439
- ``from_ioresult`` when you already have ``IOResult`` container
425440
- ``from_context`` when you have successful ``RequiresContext``
426441
- ``from_failed_context`` when you have failed ``RequiresContext``

returns/context/requires_context.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def from_value(
229229
@classmethod
230230
def from_iterable(
231231
cls,
232-
containers: Iterable['RequiresContext[_EnvType, _ValueType]'],
232+
inner_value: Iterable['RequiresContext[_EnvType, _ValueType]'],
233233
) -> 'RequiresContext[_EnvType, Sequence[_ValueType]]':
234234
"""
235235
Transforms an iterable of ``RequiresContext`` containers.
@@ -246,12 +246,12 @@ def from_iterable(
246246
... ])(...) == (1, 2)
247247
248248
"""
249-
return iterable(cls, containers)
249+
return iterable(cls, inner_value)
250250

251251
@classmethod
252252
def from_requires_context_result(
253253
cls,
254-
container: 'RequiresContextResult[_EnvType, _ValueType, _ErrorType]',
254+
inner_value: 'RequiresContextResult[_EnvType, _ValueType, _ErrorType]',
255255
) -> 'RequiresContext[_EnvType, Result[_ValueType, _ErrorType]]':
256256
"""
257257
Typecasts ``RequiresContextResult`` to ``RequiresContext`` instance.
@@ -271,12 +271,13 @@ def from_requires_context_result(
271271
Can be reverted with ``RequiresContextResult.from_typecast``.
272272
273273
"""
274-
return RequiresContext(container)
274+
return RequiresContext(inner_value)
275275

276276
@classmethod
277277
def from_requires_context_ioresult(
278278
cls,
279-
container: 'RequiresContextIOResult[_EnvType, _ValueType, _ErrorType]',
279+
inner_value:
280+
'RequiresContextIOResult[_EnvType, _ValueType, _ErrorType]',
280281
) -> 'RequiresContext[_EnvType, IOResult[_ValueType, _ErrorType]]':
281282
"""
282283
Typecasts ``RequiresContextIOResult`` to ``RequiresContext`` instance.
@@ -296,7 +297,7 @@ def from_requires_context_ioresult(
296297
Can be reverted with ``RequiresContextIOResult.from_typecast``.
297298
298299
"""
299-
return RequiresContext(container)
300+
return RequiresContext(inner_value)
300301

301302

302303
@final

returns/context/requires_context_future_result.py

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,54 @@ def from_result(
664664
lambda _: FutureResult.from_result(inner_value),
665665
)
666666

667+
@classmethod
668+
def from_io(
669+
cls,
670+
inner_value: IO[_NewValueType],
671+
) -> 'RequiresContextFutureResult[NoDeps, _NewValueType, Any]':
672+
"""
673+
Creates new container from successful ``IO`` value.
674+
675+
.. code:: python
676+
677+
>>> import anyio
678+
>>> from returns.io import IO, IOSuccess
679+
>>> from returns.context import RequiresContextFutureResult
680+
681+
>>> assert anyio.run(
682+
... RequiresContextFutureResult.from_io(IO(1)),
683+
... RequiresContextFutureResult.empty,
684+
... ) == IOSuccess(1)
685+
686+
"""
687+
return RequiresContextFutureResult(
688+
lambda deps: FutureResult.from_io(inner_value),
689+
)
690+
691+
@classmethod
692+
def from_failed_io(
693+
cls,
694+
inner_value: IO[_NewErrorType],
695+
) -> 'RequiresContextFutureResult[NoDeps, Any, _NewErrorType]':
696+
"""
697+
Creates a new container from failed ``IO`` value.
698+
699+
.. code:: python
700+
701+
>>> import anyio
702+
>>> from returns.io import IO, IOFailure
703+
>>> from returns.context import RequiresContextFutureResult
704+
705+
>>> assert anyio.run(
706+
... RequiresContextFutureResult.from_failed_io(IO(1)),
707+
... RequiresContextFutureResult.empty,
708+
... ) == IOFailure(1)
709+
710+
"""
711+
return RequiresContextFutureResult(
712+
lambda deps: FutureResult.from_failed_io(inner_value),
713+
)
714+
667715
@classmethod
668716
def from_ioresult(
669717
cls, inner_value: IOResult[_ValueType, _ErrorType],
@@ -695,7 +743,7 @@ def from_ioresult(
695743
@classmethod
696744
def from_typecast(
697745
cls,
698-
container: 'RequiresContext['
746+
inner_value: 'RequiresContext['
699747
'_EnvType, FutureResult[_NewValueType, _NewErrorType]]',
700748
) -> 'RequiresContextFutureResult[_EnvType, _NewValueType, _NewErrorType]':
701749
"""
@@ -728,7 +776,7 @@ def from_typecast(
728776
... ) == IOFailure(1)
729777
730778
"""
731-
return RequiresContextFutureResult(container)
779+
return RequiresContextFutureResult(inner_value)
732780

733781
@classmethod
734782
def from_context(
@@ -860,7 +908,7 @@ def from_failure(
860908
@classmethod
861909
def from_iterable(
862910
cls,
863-
containers:
911+
inner_value:
864912
Iterable[
865913
'RequiresContextFutureResult[_EnvType, _ValueType, _ErrorType]',
866914
],
@@ -893,7 +941,7 @@ def from_iterable(
893941
... ) == IOFailure('a')
894942
895943
"""
896-
return iterable(cls, containers)
944+
return iterable(cls, inner_value)
897945

898946

899947
@final

returns/context/requires_context_ioresult.py

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,50 @@ def from_result(
619619
lambda _: IOResult.from_result(inner_value),
620620
)
621621

622+
@classmethod
623+
def from_io(
624+
cls,
625+
inner_value: IO[_NewValueType],
626+
) -> 'RequiresContextIOResult[NoDeps, _NewValueType, Any]':
627+
"""
628+
Creates new container from successful ``IO`` value.
629+
630+
.. code:: python
631+
632+
>>> from returns.io import IO, IOSuccess
633+
>>> from returns.context import RequiresContextIOResult
634+
635+
>>> assert RequiresContextIOResult.from_io(IO(1))(
636+
... RequiresContextIOResult.empty,
637+
... ) == IOSuccess(1)
638+
639+
"""
640+
return RequiresContextIOResult(
641+
lambda deps: IOResult.from_io(inner_value),
642+
)
643+
644+
@classmethod
645+
def from_failed_io(
646+
cls,
647+
inner_value: IO[_NewErrorType],
648+
) -> 'RequiresContextIOResult[NoDeps, Any, _NewErrorType]':
649+
"""
650+
Creates a new container from failed ``IO`` value.
651+
652+
.. code:: python
653+
654+
>>> from returns.io import IO, IOFailure
655+
>>> from returns.context import RequiresContextIOResult
656+
657+
>>> assert RequiresContextIOResult.from_failed_io(IO(1))(
658+
... RequiresContextIOResult.empty,
659+
... ) == IOFailure(1)
660+
661+
"""
662+
return RequiresContextIOResult(
663+
lambda deps: IOResult.from_failed_io(inner_value),
664+
)
665+
622666
@classmethod
623667
def from_ioresult(
624668
cls, inner_value: IOResult[_ValueType, _ErrorType],
@@ -646,7 +690,7 @@ def from_ioresult(
646690
@classmethod
647691
def from_typecast(
648692
cls,
649-
container:
693+
inner_value:
650694
'RequiresContext[_EnvType, IOResult[_NewValueType, _NewErrorType]]',
651695
) -> 'RequiresContextIOResult[_EnvType, _NewValueType, _NewErrorType]':
652696
"""
@@ -671,7 +715,7 @@ def from_typecast(
671715
... )(RequiresContextIOResult.empty) == IOFailure(1)
672716
673717
"""
674-
return RequiresContextIOResult(container)
718+
return RequiresContextIOResult(inner_value)
675719

676720
@classmethod
677721
def from_context(
@@ -782,7 +826,7 @@ def from_failure(
782826
@classmethod
783827
def from_iterable(
784828
cls,
785-
containers:
829+
inner_value:
786830
Iterable[
787831
'RequiresContextIOResult[_EnvType, _ValueType, _ErrorType]',
788832
],
@@ -813,7 +857,7 @@ def from_iterable(
813857
... ])(...) == IOFailure('a')
814858
815859
"""
816-
return iterable(cls, containers)
860+
return iterable(cls, inner_value)
817861

818862

819863
@final

returns/context/requires_context_result.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ def from_result(
489489
@classmethod
490490
def from_typecast(
491491
cls,
492-
container:
492+
inner_value:
493493
'RequiresContext[_EnvType, Result[_NewValueType, _NewErrorType]]',
494494
) -> 'RequiresContextResult[_EnvType, _NewValueType, _NewErrorType]':
495495
"""
@@ -514,7 +514,7 @@ def from_typecast(
514514
... )(RequiresContextResult.empty) == Failure(1)
515515
516516
"""
517-
return RequiresContextResult(container)
517+
return RequiresContextResult(inner_value)
518518

519519
@classmethod
520520
def from_context(
@@ -587,7 +587,7 @@ def from_failure(
587587
@classmethod
588588
def from_iterable(
589589
cls,
590-
containers:
590+
inner_value:
591591
Iterable['RequiresContextResult[_EnvType, _ValueType, _ErrorType]'],
592592
) -> 'RequiresContextResult[_EnvType, Sequence[_ValueType], _ErrorType]':
593593
"""
@@ -616,7 +616,7 @@ def from_iterable(
616616
... ])(...) == Failure('a')
617617
618618
"""
619-
return iterable(cls, containers)
619+
return iterable(cls, inner_value)
620620

621621

622622
@final

0 commit comments

Comments
 (0)