I’m happy to announce attrs 19.2.0!
If you haven’t heard of attrs: it’s the package that inspired dataclasses, works on Python 2.7, 3.4 and later, and has over 17 million PyPI downloads per month.
– cmp is now split into eq and order (like in dataclasses). Using cmp in attrs 19.2 and later will raise a warning until at least June 2021 and will then be removed.
– The repr of single attributes now can be customized.
– Added attr.__version_info__ that behaves like sys.version_info and allows write code that supports multiple attrs versions.
Full changelog for this release (also available at <https://www.attrs.org/en/stable/changelog.html> with nicer markup and working links):
- Removed deprecated Attribute attribute convert per scheduled removal
on 2019/1. This planned deprecation is tracked in issue #307. #504
- __lt__, __le__, __gt__, and __ge__ do not consider subclasses
This has been deprecated since 18.2.0 and was raising a
DeprecationWarning for over a year. #570
- The cmp argument to attr.s() and attr.ib() is now deprecated.
Please use eq to add equality methods (__eq__ and __ne__) and order
to add ordering methods (__lt__, __le__, __gt__, and __ge__) instead
– just like with dataclasses.
Both are effectively True by default but it's enough to set eq=False
to disable both at once. Passing eq=False, order=True explicitly
will raise a ValueError though.
Since this is arguably a deeper backward-compatibility break, it
will have an extended deprecation period until 2021-06-01. After
that day, the cmp argument will be removed.
attr.Attribute also isn't orderable anymore. #574
- Updated attr.validators.__all__ to include new validators added in
- Slotted classes now use a pure Python mechanism to rewrite the
__class__ cell when rebuilding the class, so super() works even on
environments where ctypes is not installed. #522
- When collecting attributes using @attr.s(auto_attribs=True),
attributes with a default of None are now deleted too. #523, #556
- Fixed attr.validators.deep_iterable() and
attr.validators.deep_mapping() type stubs. #533
- attr.validators.is_callable() validator now raises an exception
attr.exceptions.NotCallableError, a subclass of TypeError, informing
the received value. #536
- @attr.s(auto_exc=True) now generates classes that are hashable by
ID, as the documentation always claimed it would. #543, #563
- Added attr.validators.matches_re() that checks string attributes
whether they match a regular expression. #552
- Keyword-only attributes (kw_only=True) and attributes that are
excluded from the attrs's __init__ (init=False) now can appear
before mandatory attributes. #559
- The fake filename for generated methods is now more stable. It won't
change when you restart the process. #560
- The value passed to @attr.ib(repr=…) can now be either a boolean (as
before) or a callable. That callable must return a string and is
then used for formatting the attribute by the generated __repr__()
- Added attr.__version_info__ that can be used to reliably check the
version of attrs and write forward- and backward-compatible code.
Please check out the section on deprecated APIs on how to use it.