attrs v19.2.0 Release Notes

Release Date: 2019-10-01 // about 2 years ago
  • Backward-incompatible Changes

    • โœ‚ Removed deprecated Attribute attribute convert per scheduled removal on 2019/1. This planned deprecation is tracked in issue #307 <https://github.com/python-attrs/attrs/issues/307>. #504 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/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 <https://docs.python.org/3/library/dataclasses.html>_.

    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 <https://github.com/python-attrs/attrs/issues/574>_

    ๐Ÿ”„ Changes ^

    • Updated attr.validators.__all__ to include new validators added in #425. #517 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/522>_
    • 0๏ธโƒฃ When collecting attributes using @attr.s(auto_attribs=True), attributes with a default of None are now deleted too. #523 <https://github.com/python-attrs/attrs/issues/523>, #556 <https://github.com/python-attrs/attrs/issues/556>
    • Fixed attr.validators.deep_iterable() and attr.validators.deep_mapping() type stubs. #533 <https://github.com/python-attrs/attrs/issues/533>_
    • ๐Ÿ‘ป attr.validators.is_callable() validator now raises an exception attr.exceptions.NotCallableError, a subclass of TypeError, informing the received value. #536 <https://github.com/python-attrs/attrs/issues/536>_
    • ๐Ÿ“š @attr.s(auto_exc=True) now generates classes that are hashable by ID, as the documentation always claimed it would. #543 <https://github.com/python-attrs/attrs/issues/543>, #563 <https://github.com/python-attrs/attrs/issues/563>
    • โž• Added attr.validators.matches_re() that checks string attributes whether they match a regular expression. #552 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/559>_
    • The fake filename for generated methods is now more stable. It won't change when you restart the process. #560 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/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 <http://www.attrs.org/en/stable/api.html#deprecated-apis>_ on how to use it. #580 <https://github.com/python-attrs/attrs/issues/580>_

    .. _#425: https://github.com/python-attrs/attrs/issues/425