Opened 11 months ago

Closed 11 months ago

Last modified 8 months ago

#22327 closed enhancement (fixed)

attrs-25.4.0 (python module)

Reported by: pierre Owned by: pierre
Priority: normal Milestone: 13.0
Component: BOOK Version: git
Severity: medium Keywords:
Cc:

Description

This version includes support for python-3.14

Change History (4)

comment:1 by pierre, 11 months ago

25.4.0

Highlights

The main reason for this release (and why it's published today) is that it ships the first pieces of work for Python 3.14 and PEP 749. There will be more work required and there's going to be a lot more churn once everyone starts testing 3.14 earnestly. We hope to receive more feedback before spending more time on this.

Full Changelog

Backwards-incompatible Changes

Class-level kw_only=True behavior is now consistent with dataclasses.

Previously, a class that sets kw_only=True makes all attributes keyword-only, including those from base classes. If an attribute sets kw_only=False, that setting is ignored, and it is still made keyword-only.

Now, only the attributes defined in that class that doesn't explicitly set kw_only=False are made keyword-only.

This shouldn't be a problem for most users, unless you have a pattern like this:

@attrs.define(kw_only=True) class Base:

a: int b: int = attrs.field(default=1, kw_only=False)

@attrs.define class Subclass(Base):

c: int

Here, we have a kw_only=True attrs class (Base) with an attribute that sets kw_only=False and has a default (Base.b), and then create a subclass (Subclass) with required arguments (Subclass.c). Previously this would work, since it would make Base.b keyword-only, but now this fails since Base.b is positional, and we have a required positional argument (Subclass.c) following another argument with defaults. #1457

Changes

Values passed to the __init__() method of attrs classes are now correctly passed to __attrs_pre_init__() instead of their default values (in cases where kw_only was not specified). #1427

Added support for Python 3.14 and PEP 749. #1446, #1451

attrs.validators.deep_mapping() now allows to leave out either key_validator xor value_validator. #1448

attrs.validators.deep_iterator() and attrs.validators.deep_mapping() now accept lists and tuples for all validators and wrap them into a attrs.validators.and_(). #1449

Added a new experimental way to inspect classes:

attrs.inspect(cls) returns the effective class-wide parameters that were used by attrs to construct the class.

The returned class is the same data structure that attrs uses internally to decide how to construct the final class. #1454

Fixed annotations for attrs.field(converter=...). Previously, a tuple of converters was only accepted if it had exactly one element. #1461

The performance of attrs.asdict() has been improved by 45–260%. #1463

The performance of attrs.astuple() has been improved by 49–270%. #1469

The type annotation for attrs.validators.or_() now allows for different types of validators.

This was only an issue on Pyright. #1474

comment:2 by pierre, 11 months ago

Owner: changed from blfs-book to pierre
Status: new → assigned

comment:3 by pierre, 11 months ago

Resolution: → fixed
Status: assigned → closed

Fixed at f60e34ef5

comment:4 by Bruce Dubbs, 8 months ago

Milestone: 12.5 → 13.0

Milestone renamed

Note: See TracTickets for help on using tickets.