github dry-python/returns 0.14.0
Version 0.14.0

latest releases: 0.22.0, 0.21.0, 0.20.1...
3 years ago

Special thanks to:

Announcement: https://sobolevn.me/2020/06/how-async-should-have-been

Features

  • Breaking: renames mypy plugin from decorator_plugin to returns_plugin
    because of a complete rewrite and lots of new features

  • Breaking: changes @safe, @impure, impure_safe, @maybe semantics:
    they do not work with async functions anymore;
    now you are forced to use Future and its helpers
    to work with async functions

  • Breaking: renames Maybe.new to Maybe.from_value.
    Because all our other containers support this protocol.
    Only Maybe was different, sorry for that!

  • Breaking: renames .from_success() to .from_value(),
    there's no need in two separate methods

  • Breaking: renames .from_successful_io() to .from_io(),
    there's no need in two separate methods

  • Breaking: renames .from_successful_context() to .from_context(),
    there's no need in two separate methods

  • Breaking: since we now support .apply() method,
    there's no more need in *_squash converters, they are removed

  • Breaking: renamed Instanceable to Applicative

  • Breaking: changes .from_io and .from_failed_io of IOResult
    to return Any instead of NoReturn unfilled type

  • Breaking: removes .lift and .lift_* methods from all containers,
    use map_, bind_result, bind_io, and other pointfree helpers instead

  • Breaking: removes @pipeline function. It was a mistake:
    it does not work with mixed container types,
    it does not type failures properly,
    it does not work with IO and Future,
    it enforces to write imperative code in a functional codebase.
    Use flow instead

  • Adds typed partial and curry mypy plugins!

  • Adds typed flow plugin, now it can accept any number of arguments,
    it now also has excelent type inference

  • Adds typed pipe plugin, now it can accept any number of arguments,
    it now also has good type inference

  • Adds managed pipeline function that is useful
    for working with stateful computations

  • Adds typed map_, fix, and alt pointfree functions

  • Adds typed bind_result, bind_io, bind_ioresult,
    bind_context, bind_context_result, bind_future,
    bind_async, and bind_awaitable pointfree functions

  • Adds typed bind_async_future and bind_async_future_result
    pointfree functions

  • Adds typed unify pointfree function

  • Adds typed apply pointfree function

  • Adds typed value_or pointfree function

  • Adds pytest plugin with the ability to tests error handling

  • Adds Future container to easily work with async functions

  • Adds FutureResult container to easily work
    with async function that might fail

  • Adds RequiresContextFutureResult container

  • Adds ReaderFutureResult alias for RequiresContextFutureResult

  • Adds RequiresContextFutureResultE and ReaderFutureResultE aliases

  • Adds Future, FutureResult and RequiresContextFutureResult
    support for all existing pointfree functions

  • Adds bind_io method to IOResult

  • Adds bind_io method to RequiresContextIOResult

  • Adds or_else method to Maybe

  • Adds .from_io and .from_failed_io to RequiresContextIOResult

  • Syncs naming in from_* methods, now all parameters are named inner_value

  • Adds not_ composition helper

  • Adds flatten support for Future,
    FutureResult and RequiresContextFutureResult

  • Adds __copy__ and __deepcopy__ magic methods to Immutable class

  • Speeds up is_successful function

  • Makes all Context context helpers abstract,
    so you cannot create new instances of this class,
    also adds __slots__ to these classes

  • Improves RequiresContext* types with NoDeps where it is logically true

Bugfixes

  • Fixes that @safe decorator was generating incorrect signatures
    for functions with Any
  • Fixes that .rescue() of RequiresContextResult was returning Any
  • Fixes that .rescue() of RequiresContextIOResult was returning Any
  • Fixes that RequiresContextResult and RequiresContextIOResult
    were not final
  • Fixes that ImmutableStateError was not a subclass of AttributeError
  • Fixes that IOResult was not showing str representation
    of wrapped inner_value

Misc

  • Replaces pytest-asyncio with anyio plugin,
    now we test compatibility with any IO stack: asyncio, trio, curio
  • Updates lots of dependencies
  • Adds lots of new tests
  • Updates lots of docs
  • Removes "IO marker" name from docs in favor for "IO container",
    it is not special at all. Why would we call it differently?

Don't miss a new returns release

NewReleases is sending notifications on new releases.