19.1.0:
Backward-incompatible Changes
- Fixed a bug where deserialized objects with cache_hash=True could have incorrect hash code values.
This change breaks classes with cache_hash=True when a custom __setstate__ is present.
An exception will be thrown when applying the attrs annotation to such a class.
Changes
- Add is_callable, deep_iterable, and deep_mapping validators.
* is_callable: validates that a value is callable
* deep_iterable: Allows recursion down into an iterable,
applying another validator to every member in the iterable
as well as applying an optional validator to the iterable itself.
* deep_mapping: Allows recursion down into the items in a mapping object,
applying a key validator and a value validator to the key and value in every item.
Also applies an optional validator to the mapping object itself.
You can find them in the attr.validators package.
- Fixed stub files to prevent errors raised by mypy's disallow_any_generics = True option.
- Attributes with init=False now can follow after kw_only=True attributes.
- attrs now has first class support for defining exception classes.
If you define a class using @attr.s(auto_exc=True) and subclass an exception, the class will behave like a well-behaved exception class including an appropriate __str__ method, and all attributes additionally available in an args attribute.
- Clarified documentation for hashing to warn that hashable objects should be deeply immutable (in their usage, even if this is not enforced).