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
--
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/

        Support the Python Software Foundation:
        http://www.python.org/psf/donations/

Reply via email to