Path to this page:
Subject: CVS commit: pkgsrc/devel/py-attrs
From: Adam Ciarcinski
Date: 2022-02-23 12:43:41
Message id: 20220223114341.4C753FB24@cvs.NetBSD.org
Log Message:
py-attrs: updated to 21.4.0
21.4.0 (2021-12-29)
-------------------
Changes
^^^^^^^
- Fixed the test suite on PyPy3.8 where ``cloudpickle`` does not work.
- Fixed ``coverage report`` for projects that use ``attrs`` and don't set a \
``--source``.
----
21.3.0 (2021-12-28)
-------------------
Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- When using ``@define``, converters are now run by default when setting an \
attribute on an instance -- additionally to validators.
I.e. the new default is ``on_setattr=[attrs.setters.convert, \
attrs.setters.validate]``.
This is unfortunately a breaking change, but it was an oversight, impossible \
to raise a ``DeprecationWarning`` about, and it's better to fix it now while the \
APIs are very fresh with few users.
- ``import attrs`` has finally landed!
As of this release, you can finally import ``attrs`` using its proper name.
Not all names from the ``attr`` namespace have been transferred; most notably \
``attr.s`` and ``attr.ib`` are missing.
See ``attrs.define`` and ``attrs.field`` if you haven't seen our \
next-generation APIs yet.
A more elaborate explanation can be found `On The Core API Names \
<https://www.attrs.org/en/latest/names.html>`_
This feature is at least for one release **provisional**.
We don't *plan* on changing anything, but such a big change is unlikely to go \
perfectly on the first strike.
The API docs have been mostly updated, but it will be an ongoing effort to \
change everything to the new APIs.
Please note that we have **not** moved -- or even removed -- anything from \
``attr``!
Please do report any bugs or documentation inconsistencies!
Changes
^^^^^^^
- ``attr.asdict(retain_collection_types=False)`` (default) dumps \
collection-esque keys as tuples.
- ``__match_args__`` are now generated to support Python 3.10's
`Structural Pattern Matching \
<https://docs.python.org/3.10/whatsnew/3.10.html#pep-634-structural-pattern-matching>`_.
This can be controlled by the ``match_args`` argument to the class decorators \
on Python 3.10 and later.
On older versions, it is never added and the argument is ignored.
- If the class-level *on_setattr* is set to ``attrs.setters.validate`` (default \
in ``@define`` and ``@mutable``) but no field defines a validator, pretend that \
it's not set.
- The generated ``__repr__`` is significantly faster on Pythons with f-strings.
- Attributes transformed via ``field_transformer`` are wrapped with \
``AttrsClass`` again.
- Generated source code is now cached more efficiently for identical classes.
- Added ``attrs.converters.to_bool()``.
- ``attrs.resolve_types()`` now resolves types of subclasses after the parents \
are resolved.
- Added new validators: ``lt(val)`` (< val), ``le(va)`` (≤ val), \
``ge(val)`` (≥ val), ``gt(val)`` (> val), and ``maxlen(n)``.
- ``attrs`` classes are now fully compatible with `cloudpickle \
<https://github.com/cloudpipe/cloudpickle>`_ (no need to disable ``repr`` \
anymore).
- Added new context manager ``attrs.validators.disabled()`` and functions \
``attrs.validators.(set|get)_disabled()``.
They deprecate ``attrs.(set|get)_run_validators()``.
All functions are interoperable and modify the same internal state.
They are not – and never were – thread-safe, though.
- ``attrs.validators.matches_re()`` now accepts pre-compiled regular expressions \
in addition to pattern strings.
21.2.0 (2021-05-07)
-------------------
Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- We had to revert the recursive feature for ``attr.evolve()`` because it broke \
some use-cases -- sorry!
- Python 3.4 is now blocked using packaging metadata because ``attrs`` can't be \
imported on it anymore.
To ensure that 3.4 users can keep installing ``attrs`` easily, we will `yank \
<https://pypi.org/help/#yanked>`_ 21.1.0 from PyPI.
This has **no** consequences if you pin ``attrs`` to 21.1.0.
21.1.0 (2021-05-06)
-------------------
Deprecations
^^^^^^^^^^^^
- The long-awaited, much-talked-about, little-delivered ``import attrs`` is \
finally upon us!
Since the NG APIs have now been proclaimed stable, the **next** release of \
``attrs`` will allow you to actually ``import attrs``.
We're taking this opportunity to replace some defaults in our APIs that made \
sense in 2015, but don't in 2021.
So please, if you have any pet peeves about defaults in ``attrs``'s APIs, \
*now* is the time to air your grievances in 487!
We're not gonna get such a chance for a second time, without breaking our \
backward-compatibility guarantees, or long deprecation cycles.
Therefore, speak now or forever hold you peace!
- The *cmp* argument to ``attr.s()`` and `attr.ib()` has been **undeprecated**
It will continue to be supported as syntactic sugar to set *eq* and *order* in \
one go.
I'm terribly sorry for the hassle around this argument!
The reason we're bringing it back is it's usefulness regarding customization \
of equality/ordering.
The ``cmp`` attribute and argument on ``attr.Attribute`` remains deprecated \
and will be removed later this year.
Changes
^^^^^^^
- It's now possible to customize the behavior of ``eq`` and ``order`` by passing \
in a callable.
- The instant favorite next-generation APIs are not provisional anymore!
They are also officially supported by Mypy as of their `0.800 release \
<https://mypy-lang.blogspot.com/2021/01/mypy-0800-released.html>`_.
We hope the next release will already contain an (additional) importable \
package called ``attrs``.
- If an attribute defines a converter, the type of its parameter is used as type \
annotation for its corresponding ``__init__`` parameter.
If an ``attr.converters.pipe`` is used, the first one's is used.
- Fixed the creation of an extra slot for an ``attr.ib`` when the parent class \
already has a slot with the same name.
- ``__attrs__init__()`` will now be injected if ``init=False``, or if \
``auto_detect=True`` and a user-defined ``__init__()`` exists.
This enables users to do "pre-init" work in their ``__init__()`` \
(such as ``super().__init__()``).
``__init__()`` can then delegate constructor argument processing to \
``self.__attrs_init__(*args, **kwargs)``.
- ``bool(attr.NOTHING)`` is now ``False``.
- It's now possible to use ``super()`` inside of properties of slotted classes.
- Allow for a ``__attrs_pre_init__()`` method that -- if defined -- will get \
called at the beginning of the ``attrs``-generated ``__init__()`` method.
- Added forgotten ``attr.Attribute.evolve()`` to type stubs.
- ``attrs.evolve()`` now works recursively with nested ``attrs`` classes.
- Python 3.10 is now officially supported.
- ``attr.resolve_types()`` now takes an optional *attrib* argument to work \
inside a ``field_transformer``.
- ``ClassVar``\ s are now also detected if they come from `typing-extensions \
<https://pypi.org/project/typing-extensions/>`_.
- To make it easier to customize attribute comparison, we have added the \
``attr.cmp_with()`` helper.
See the `new docs on comparison \
<https://www.attrs.org/en/stable/comparison.html>`_ for more details.
- Added **provisional** support for static typing in ``pyright`` via the \
`dataclass_transforms specification \
<https://github.com/microsoft/pyright/blob/main/specs/dataclass_transforms.md>`_.
Both the ``pyright`` specification and ``attrs`` implementation may change in \
future versions of both projects.
Files: