@@ -13,6 +13,9 @@ See [0Ver](https://0ver.org/).
13
13
- A lot of new features added to our ` hypothesis ` plugins.
14
14
It now allows to create custom strategies, better instantiate containers,
15
15
docouple it from built-in ones, check laws from user-defined interfaces
16
+ - Add support for ` copy.replace() ` from Python 3.13+ by implementing ` __replace__ `
17
+ magic method on ` BaseContainer ` . This allows for creating modified copies
18
+ of immutable containers. (#1920 )
16
19
17
20
### Bugfixes
18
21
@@ -321,338 +324,4 @@ New Year Release! 🎄
321
324
` FutureResult ` and ` RequiresContextFutureResult `
322
325
- Adds ` __copy__ ` and ` __deepcopy__ ` magic methods to ` Immutable ` class
323
326
- Speeds up `` is_successful `` function
324
- - Makes all ` Context ` context helpers abstract,
325
- so you cannot create new instances of this class,
326
- also adds ` __slots__ ` to these classes
327
- - Improves ` RequiresContext* ` types with ` NoDeps ` where it is logically true
328
-
329
- ### Bugfixes
330
-
331
- - Fixes that ` @safe ` decorator was generating incorrect signatures
332
- for functions with ` Any `
333
- - Fixes that ` .rescue() ` of ` RequiresContextResult ` was returning ` Any `
334
- - Fixes that ` .rescue() ` of ` RequiresContextIOResult ` was returning ` Any `
335
- - Fixes that ` RequiresContextResult ` and ` RequiresContextIOResult `
336
- were not ` final `
337
- - Fixes that ` ImmutableStateError ` was not a subclass of ` AttributeError `
338
- - Fixes that ` IOResult ` was not showing ` str ` representation
339
- of wrapped ` inner_value `
340
-
341
- ### Misc
342
-
343
- - Replaces ` pytest-asyncio ` with ` anyio ` plugin,
344
- now we test compatibility with any IO stack: ` asyncio ` , ` trio ` , ` curio `
345
- - Updates lots of dependencies
346
- - Adds lots of new tests
347
- - Updates lots of docs
348
- - Removes "IO marker" name from docs in favor for "IO container",
349
- it is not special at all. Why would we call it differently?
350
-
351
-
352
- ## 0.13.0
353
-
354
- ### Features
355
-
356
- - ** Breaking** : renames ` join ` to ` flatten ` , sorry!
357
- - ** Breaking** : renames ` box ` to ` bind ` and moves it to ` returns.pointfree `
358
- - ** Breaking** : removes ` Maybe.rescue ` and ` Maybe.fix ` methods
359
- - ** Breaking** : renames ` io_squash ` to ` squash_io `
360
- and moves it to ` returns.converters `
361
- - ** Breaking** : moves all interfaces from ` returns.primitives.container ` to
362
- ` returns.primitives.interfaces `
363
-
364
- - Adds ` rescue ` pointfree function
365
- - Adds ` ResultE ` alias for ` Result[..., Exception] `
366
-
367
- - Adds ` RequiresContext ` container and ` Context ` helper class
368
- - Adds ` RequiresContext ` support for ` bind ` pointfree function
369
- - Adds ` RequiresContext ` support for ` flatten ` function
370
-
371
- - Adds ` RequiresContextResult ` container
372
- - Adds ` RequiresContextResultE ` alias
373
- - Adds ` ReaderResult ` and ` ReaderResultE ` aliases
374
- for ` RequiresContextResult[..., ..., Exception] `
375
- - Adds ` RequiresContextResult ` support for ` bind ` and ` rescue `
376
- - Adds ` RequiresContextResult ` support for ` flatten `
377
-
378
- - Adds ` IOResult ` helper to work better with ` IO[Result[a, b]] `
379
- - Adds ` IOResultE ` alias for ` IOResult[a, Exception] `
380
- - Adds ` IOResult ` support for ` bind `
381
- - Adds ` IOResult ` support for ` flatten `
382
- - Adds ` IOResult ` support for ` @pipeline `
383
- - Adds ` IOResult ` support for ` coalesce `
384
- - Adds ` IOResult ` support for ` is_successful `
385
-
386
- - Adds ` RequiresContextIOResult ` container
387
- - Adds ` RequiresContextIOResultE ` alias
388
- - Adds ` ReaderIOResult ` and ` ReaderIOResultE ` aliases
389
- for ` RequiresContextIOResult[..., ..., Exception] `
390
- - Adds ` RequiresContextIOResult ` support for ` bind ` and ` rescue `
391
- - Adds ` RequiresContextIOResult ` support for ` flatten `
392
-
393
- - Adds ` Result.lift ` , ` Maybe.lift ` , ` RequiresContext.lift ` ,
394
- and ` RequiresContextResult.lift ` functions in addition to ` IO.lift `
395
-
396
- - Adds ` Immutable ` primitive type
397
- - Adds ` Unitable ` protocol and ` .from_success() ` and ` .from_failure() `
398
- methods for all ` Result ` related classes
399
- - Adds ` Instanceable ` protocol and ` .from_value() ` method
400
- for ` IO ` and ` RequiresContext `
401
-
402
- - Adds ` flow ` function, which is similar to ` pipe `
403
- - Adds ` swap ` converter for ` Result ` and ` IOResult `
404
- - Adds ` squash_context ` function to squash ` RequiresContext ` similar to ` IO `
405
-
406
- ### Bugfixes
407
-
408
- - Now ` Success ` and ` Failure ` (both ` io ` and pure) return ` Any ` and not ` NoReturn `
409
- - Fixes how ` flatten ` works, also adds more tests and docs about ` Failure ` case
410
- - Fixes ` Unwrappable ` type being parametrized with only one ` TypeVar `
411
- - Changes ` Success ` and ` Failure ` to return ` Any ` instead of ` NoReturn `
412
-
413
- ### Misc
414
-
415
- - Updates ` poetry ` version in ` travis `
416
- - Improves `` pipe `` docs with `` lambda `` and ` Generic ` problem
417
- - Improves docs in several places
418
- - Now examples in docs tries to be docstests where possible
419
- - Changes how tests are checked with ` mypy ` in CI
420
-
421
-
422
- ## 0.12.0
423
-
424
- ### Features
425
-
426
- - ** Breaking** : now ` @pipeline ` requires a container type when created:
427
- ` @pipeline(Result) ` or ` @pipeline(Maybe) `
428
- - ` Maybe ` and ` Result ` now has ` success_type ` and ` failure_type ` aliases
429
- - Adds ` Result.unify ` utility method for better error type composition
430
- - We now support ` dry-python/classes ` as a first-class citizen
431
- - Adds ` io_squash ` to squash several ` IO ` containers into one container
432
- with a tuple inside, currently works with ` 9 ` containers max at a time
433
- - Adds ` untap ` function which does convert return type to ` None `
434
-
435
- ### Bugfixes
436
-
437
- - Fixes that containers were not usable with ` multiprocessing `
438
- - Changes the inheritance order, now ` BaseContainer ` is the first child
439
- - Fixes that ` Nothing ` had incorrect docstrings
440
-
441
- ### Misc
442
-
443
- - Now ` generated ` package is protected
444
- - Updates ` poetry ` to ` 1.0 `
445
-
446
-
447
- ## 0.11.0
448
-
449
- ### Features
450
-
451
- - ** Breaking** : now ` pipe() ` does not require argument to be the first value,
452
- instead it is required to use: ` pipe(f1, f2, f3, f4)(value) `
453
- - ** Breaking** : dropped everything from ` returns/__init__.py ` ,
454
- because we now have quite a lot of stuff
455
- - ** Breaking** : dropped support of zero argument functions for ` Nothing.fix `
456
- - ** Breaking** : dropped support of zero argument functions for ` Nothing.rescue `
457
- - ` Maybe ` now has ` .failure() ` to match the same API as ` Result `
458
- - Adds ` identity ` function
459
- - Adds ` tap ` function
460
- - Now ` pipe ` allows to pipe 8 steps
461
- - Adds ` coalesce_result ` and ` coalesce_maybe ` converters
462
-
463
- ### Bugfixes
464
-
465
- - Fixes that code inside ` .fix ` and ` .rescue ` of ` Maybe ` might be called twice
466
-
467
- ### Misc
468
-
469
- - Now all methods have doctests
470
- - Updates docs about ` Success ` and ` _Success ` , ` Failure ` and ` _Failure `
471
- - Updates docs about ` @pipeline `
472
- - Typechecks async functions and decorators inside ` typesafety/ ` tests
473
-
474
-
475
- ## 0.10.0
476
-
477
- ### Features
478
-
479
- - ** Breaking** : ` python>=3.7,<=3.7.2 ` are not supported anymore,
480
- because of a bug inside ` typing ` module
481
- - ** Breaking** : Now ` bind ` does not change the type of an error
482
- - ** Breaking** : Now ` rescue ` does not change the type of a value
483
- - ** Breaking** : Renames ` map_failure ` to ` alt `
484
- - Adds ` box() ` function with the ability
485
- to box function for direct container composition like:
486
- ` a -> Container[b] ` to ` Container[a] -> Container[b] `
487
- - Adds ` IO.lift() ` function to lift ` a -> a ` to ` IO[a] -> IO[a] `
488
- - Adds ` pipe() ` function to ` pipeline.py `
489
- - Adds ` __hash__() ` magic methods to all containers
490
-
491
- ### Bugfixes
492
-
493
- - Changes ` Any ` to ` NoReturn ` in ` Success ` and ` Failure `
494
- - Now all type parameters in ` Result ` , ` Maybe ` , and ` IO ` are covariant
495
-
496
- ### Misc
497
-
498
- - Massive docs rewrite
499
- - Updates ` mypy ` version
500
- - Updates ` wemake-python-styleguide ` and introduces ` nitpick `
501
- - Updates ` pytest-plugin-mypy ` , all tests now use ` yml `
502
-
503
-
504
- ## 0.9.0
505
-
506
- ### Features
507
-
508
- - Provides a bunch of primitive interfaces to write your own containers
509
- - Adds ` .map_failure() ` method
510
- - Adds ` flatten() ` function to join nested containers
511
-
512
- ### Bugfixes
513
-
514
- - Fixes type of ` Maybe.fix ` and ` Maybe.rescue ` to work with both ` lambda: 1 ` and ` lambda _: 1 `
515
-
516
- ### Misc
517
-
518
- - Improves ` README `
519
-
520
-
521
- ## 0.8.0
522
-
523
- ### Features
524
-
525
- - Reintroduces the ` Maybe ` container, typed!
526
- - Introduces converters from one type to another
527
- - Adds ` mypy ` plugin to type decorators
528
- - Complete rewrite of ` Result ` types
529
- - Partial API change, now ` Success ` and ` Failure ` are not types, but functions
530
- - New internal types introduced: ` FixableContainer ` and ` ValueUnwrapContainer `
531
-
532
- ### Bugfixes
533
-
534
- - Fixes issue when you could return ` IO ` container from ` Result.bind `
535
- - Fixes ` @pipeline ` return type
536
-
537
- ### Misc
538
-
539
- - Reapplied all types to ` .py ` files
540
- - Improved docs about ` IO ` and ` Container ` concept
541
- - Adds docs about container composition
542
- - Moves from ` Alpha ` to ` Beta `
543
-
544
-
545
- ## 0.7.0
546
-
547
- ### Features
548
-
549
- - Adds ` IO ` container
550
- - Adds ` unsafe ` module with unsafe functions
551
- - Changes how functions are located inside the project
552
-
553
- ### Bugfixes
554
-
555
- - Fixes container type in ` @pipeline `
556
- - Now ` is_successful ` is public
557
- - Now ` raise_exception ` is public
558
-
559
- ### Misc
560
-
561
- - Changes how ` str() ` function works for container types
562
- - Total rename to "container" in the source code
563
-
564
-
565
- ## Version 0.6.0
566
-
567
- ### Features
568
-
569
- - ` safe ` and ` pipeline ` now supports ` asyncio `
570
- - ` is_successful ` now returns ` Literal ` types if possible
571
-
572
-
573
- ## Version 0.5.0
574
-
575
- ### Features
576
-
577
- - Adds ` compose ` helper function
578
- - Adds public API to ` import returns `
579
- - Adds ` raise_exception ` helper function
580
- - Adds full traceback to ` .unwrap() `
581
-
582
-
583
- ### Misc
584
-
585
- - Updates multiple dev-dependencies, including ` mypy `
586
- - Now search in the docs is working again
587
- - Relicenses this project to ` BSD `
588
- - Fixes copyright notice in the docs
589
-
590
-
591
- ## Version 0.4.0 aka Goodbye, containers!
592
-
593
- ### Features
594
-
595
- - Moves all types to ` .pyi ` files
596
- - Renames all classes according to new naming pattern
597
- - ** HUGE** improvement of types
598
- - Renames ` fmap ` to ` map `
599
- - Renames ` do_notation ` to ` pipeline ` , moves it to ` functions.py `
600
- - Renames ` ebind ` to ` rescue `
601
- - Renames ` efmap ` to ` fix `
602
- - Renames ` container ` to ` Container `
603
- - Removes ` Maybe ` container, since typing does not have ` NonNullable ` type
604
-
605
-
606
- ## Version 0.3.1
607
-
608
- ### Bugfixes
609
-
610
- - Adds ` py.typed ` file to be ` PEP561 ` compatible
611
-
612
-
613
- ## Version 0.3.0, Renamed to ` returns `
614
-
615
- The project is renamed to ` returns ` and moved to ` dry-python ` org.
616
-
617
- ### Features
618
-
619
- - Adds ` .pyi ` files for all modules,
620
- to enable ` mypy ` support for 3rd party users
621
-
622
-
623
- ## Version 0.2.0
624
-
625
- ### Features
626
-
627
- - Adds ` Maybe ` container
628
- - Adds immutability and ` __slots__ ` to all containers
629
- - Adds methods to work with failures
630
- - Adds ` safe ` decorator to convert exceptions to ` Result ` container
631
- - Adds ` is_successful() ` function to detect if your result is a success
632
- - Adds ` failure() ` method to unwrap values from failed containers
633
-
634
- ### Bugfixes
635
-
636
- - Changes the type of ` .bind ` method for ` Success ` container
637
- - Changes how equality works, so now ` Failure(1) != Success(1) `
638
- - Changes how new instances created on unused methods
639
-
640
- ### Misc
641
-
642
- - Improves docs
643
-
644
-
645
- ## Version 0.1.1
646
-
647
- ### Bugfixes
648
-
649
- - Changes how ` PyPI ` renders package's page
650
-
651
- ### Misc
652
-
653
- - Improves ` README ` with new badges and installation steps
654
-
655
-
656
- ## Version 0.1.0
657
-
658
- Initial release. Featuring only ` Result ` and ` do_notation ` .
327
+ - Makes all ` Context `
0 commit comments