attrs 19.2.0 released

Hi everyone, 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. Highlights: – 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): BACKWARD-INCOMPATIBLE CHANGES - 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 comparable anymore. This has been deprecated since 18.2.0 and was raising a DeprecationWarning for over a year. #570 DEPRECATIONS - 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 CHANGES - Updated attr.validators.__all__ to include new validators added in #425. #517 - 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__() method. #568 - 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. #580
participants (1)
-
Hynek Schlawack