Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==20.3.0
->==24.2.0
Release Notes
python-attrs/attrs (attrs)
v24.2.0
Compare Source
Deprecations
@define
/@attr.s
.Please don't use it in new code, but we don't intend to remove it anymore.
#1330
Changes
attrs.converters.pipe()
(and its syntactic sugar of passing a list forattrs.field()
's /attr.ib()
's converter argument) works again when passingattrs.setters.convert
to on_setattr (which is default forattrs.define
).#1328
#1329
v24.1.0
Compare Source
Backwards-incompatible Changes
attrs.evolve()
doesn't accept the inst argument as a keyword argument anymore.Pass it as the first positional argument instead.
#1264
attrs.validators.provides()
has been removed.The removed code is available as a gist for convenient copy and pasting.
#1265
All packaging metadata except from
__version__
and__version_info__
has been removed from theattr
andattrs
modules (for example,attrs.__url__
).Please use
importlib.metadata
or importlib-metadata instead.#1268
The generated
__eq__
methods have been sped up significantly by generating a chain of attribute comparisons instead of constructing and comparing tuples.This change arguably makes the behavior more correct,
but changes it if an attribute compares equal by identity but not value, like
float('nan')
.#1310
Deprecations
attr.s
is now deprecated.It was a workaround for nested classes in Python 2 and is pointless in Python 3.
#1263
@attr.s
,@attrs.define
, andmake_class()
is now deprecated in favor of unsafe_hash, as defined by PEP 681.#1323
Changes
Allow original slotted
functools.cached_property
classes to be cleaned by garbage collection.Allow
super()
calls in slotted cached properties.#1221
Our type stubs now use modern type notation and are organized such that VS Code's quick-fix prefers the
attrs
namespace.#1234
Preserve
AttributeError
raised by properties of slotted classes withfunctools.cached_properties
.#1253
It is now possible to wrap a converter into an
attrs.Converter
and get the current instance and/or the current field definition passed into the converter callable.Note that this is not supported by any type checker, yet.
#1267
attrs.make_class()
now populates the__annotations__
dict of the generated class, so thatattrs.resolve_types()
can resolve them.#1285
Added the
attrs.validators.or_()
validator.#1303
The combination of a
__attrs_pre_init__
that takes arguments, a kw-only field, and a default on that field does not crash anymore.#1319
attrs.validators.in_()
now transforms certain unhashable options to tuples to keep the field hashable.This allows fields that use this validator to be used with, for example,
attrs.filters.include()
.#1320
If a class has an inherited method called
__attrs_init_subclass__
, it is now called once the class is done assembling.This is a replacement for Python's
__init_subclass__
and useful for registering classes, and similar.#1321
v23.2.0
Compare Source
Changes
attrs.resolve_types()
is now correct.#1141
typing.dataclass_transform
to decorate dataclass-like decorators, instead of the non-standard__dataclass_transform__
special form, which is only supported by Pyright.#1158
attrs.asdict/astuple()
withretain_collection_types=True
.#1165
attrs.AttrsInstance
is now atyping.Protocol
in both type hints and code.This allows you to subclass it along with another
Protocol
.#1172
__attrs_pre_init__
accepts more than justself
, it will call it with the same arguments as__init__
was called.This allows you to, for example, pass arguments to
super().__init__()
.#1187
functools.cached_property
decorated methods to support equivalent semantics.#1200
attrs.make_class()
to provide additional attributes for newly created classes.It is, for example, now possible to attach methods.
#1203
v23.1.0
Compare Source
Backwards-incompatible Changes
#993
Deprecations
The support for zope-interface via the
attrs.validators.provides
validator is now deprecated and will be removed in, or after, April 2024.The presence of a C-based package in our developement dependencies has caused headaches and we're not under the impression it's used a lot.
Let us know if you're using it and we might publish it as a separate package.
#1120
Changes
attrs.filters.exclude()
andattrs.filters.include()
now support the passing of attribute names as strings.#1068
attrs.has()
andattrs.fields()
now handle generic classes correctly.#1079
Fix frozen exception classes when raised within e.g.
contextlib.contextmanager
, which mutates their__traceback__
attributes.#1081
@frozen
now works with type checkers that implement PEP-681 (ex. pyright).#1084
Restored ability to unpickle instances pickled before 22.2.0.
#1085
attrs.asdict()
's andattrs.astuple()
's type stubs now accept theattrs.AttrsInstance
protocol.#1090
Fix slots class cellvar updating closure in CPython 3.8+ even when
__code__
introspection is unavailable.#1092
attrs.resolve_types()
can now passinclude_extras
totyping.get_type_hints()
on Python 3.9+, and does so by default.#1099
Added instructions for pull request workflow to
CONTRIBUTING.md
.#1105
Added type parameter to
attrs.field()
function for use withattrs.make_class()
.Please note that type checkers ignore type metadata passed into
make_class()
, but it can be useful if you're wrapping attrs.#1107
It is now possible for
attrs.evolve()
(andattr.evolve()
) to change fields namedinst
if the instance is passed as a positional argument.Passing the instance using the
inst
keyword argument is now deprecated and will be removed in, or after, April 2024.#1117
attrs.validators.optional()
now also accepts a tuple of validators (in addition to lists of validators).#1122
v22.2.0
Compare Source
Backwards-incompatible Changes
#988
Deprecations
#1017
Changes
attrs.field()
now supports an alias option for explicit__init__
argument names.Get
__init__
signatures matching any taste, peculiar or plain!The PEP 681 compatible alias option can be use to override private attribute name mangling, or add other arbitrary field argument name overrides.
#950
attrs.NOTHING
is now an enum value, making it possible to use with e.g.typing.Literal
.#983
Added missing re-import of
attr.AttrsInstance
to theattrs
namespace.#987
Fix slight performance regression in classes with custom
__setattr__
and speedup even more.#991
Class-creation performance improvements by switching performance-sensitive templating operations to f-strings.
You can expect an improvement of about 5% -- even for very simple classes.
#995
attrs.has()
is now aTypeGuard
forAttrsInstance
.That means that type checkers know a class is an instance of an
attrs
class if you check it usingattrs.has()
(orattr.has()
) first.#997
Made
attrs.AttrsInstance
stub available at runtime and fixed type errors related to the usage ofattrs.AttrsInstance
in Pyright.#999
On Python 3.10 and later, call
abc.update_abstractmethods()
on dict classes after creation.This improves the detection of abstractness.
#1001
attrs's pickling methods now use dicts instead of tuples.
That is safer and more robust across different versions of a class.
#1009
Added
attrs.validators.not_(wrapped_validator)
to logically invert wrapped_validator by accepting only values where wrapped_validator rejects the value with aValueError
orTypeError
(by default, exception types configurable).#1010
The type stubs for
attrs.cmp_using()
now have default values.#1027
To conform with PEP 681,
attr.s()
andattrs.define()
now accept unsafe_hash in addition to hash.#1065
v22.1.0
Compare Source
Backwards-incompatible Changes
Python 2.7 is not supported anymore.
Dealing with Python 2.7 tooling has become too difficult for a volunteer-run project.
We have supported Python 2 more than 2 years after it was officially discontinued and feel that we have paid our dues.
All version up to 21.4.0 from December 2021 remain fully functional, of course.
#936
The deprecated
cmp
attribute ofattrs.Attribute
has been removed.This does not affect the cmp argument to
attr.s
that can be used as a shortcut to set eq and order at the same time.#939
Changes
#898
eq
key is defined, it is also used before hashing the attribute.#909
attrs.validators.min_len()
.#916
attrs.validators.deep_iterable()
's member_validator argument now also accepts a list of validators and wraps them in anattrs.validators.and_()
.#925
attrs.converters
andattrs.filters
.#931
attr(s).cmp_using()
.#949
attrs.validators._in()
'sValueError
is not missing the attribute, expected options, and the value it got anymore.#951
#969
v21.4.0
Compare Source
Changes
cloudpickle
does not work.#892
coverage report
for projects that useattrs
and don't set a--source
.#895,
#896
v21.3.0
Compare Source
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.#835,
#886
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 notablyattr.s
andattr.ib
are missing.See
attrs.define
andattrs.field
if you haven't seen our next-generation APIs yet.A more elaborate explanation can be found On The Core API Names
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!
#887
Changes
attr.asdict(retain_collection_types=False)
(default) dumps collection-esque keys as tuples.#646,
#888
__match_args__
are now generated to support Python 3.10'sStructural 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.
#815
attrs.setters.validate
(default in@define
and@mutable
) but no field defines a validator, pretend that it's not set.#817
__repr__
is significantly faster on Pythons with f-strings.#819
field_transformer
are wrapped withAttrsClass
again.#824
#828
attrs.converters.to_bool()
.#830
attrs.resolve_types()
now resolves types of subclasses after the parents are resolved.#842
#843
lt(val)
(< val),le(va)
(≤ val),ge(val)
(≥ val),gt(val)
(> val), andmaxlen(n)
.#845
attrs
classes are now fully compatible with cloudpickle (no need to disablerepr
anymore).#857
attrs.validators.disabled()
and functionsattrs.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.
#859
attrs.validators.matches_re()
now accepts pre-compiled regular expressions in addition to pattern strings.#877
v21.2.0
Compare Source
Backward-incompatible Changes
attr.evolve()
because it broke some use-cases -- sorry!#806
attrs
can't be imported on it anymore.To ensure that 3.4 users can keep installing
attrs
easily, we will yank 21.1.0 from PyPI.This has no consequences if you pin
attrs
to 21.1.0.#807
v21.1.0
Compare Source
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 actuallyimport 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!
#487
The cmp argument to
attr.s()
andattr.ib()
has been undeprecatedIt 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 onattr.Attribute
remains deprecated and will be removed later this year.#773
Changes
It's now possible to customize the behavior of
eq
andorder
by passing in a callable.#435,
#627
The instant favorite next-generation APIs are not provisional anymore!
They are also officially supported by Mypy as of their 0.800 release.
We hope the next release will already contain an (additional) importable package called
attrs
.#668,
#786
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.#710
Fixed the creation of an extra slot for an
attr.ib
when the parent class already has a slot with the same name.#718
__attrs__init__()
will now be injected ifinit=False
, or ifauto_detect=True
and a user-defined__init__()
exists.This enables users to do "pre-init" work in their
__init__()
(such assuper().__init__()
).__init__()
can then delegate constructor argument processing toself.__attrs_init__(*args, **kwargs)
.#731
bool(attr.NOTHING)
is nowFalse
.#732
It's now possible to use
super()
inside of properties of slotted classes.#747
Allow for a
__attrs_pre_init__()
method that -- if defined -- will get called at the beginning of theattrs
-generated__init__()
method.#750
Added forgotten
attr.Attribute.evolve()
to type stubs.#752
attrs.evolve()
now works recursively with nestedattrs
classes.#759
Python 3.10 is now officially supported.
#763
attr.resolve_types()
now takes an optional attrib argument to work inside afield_transformer
.#774
ClassVar
s are now also detected if they come from typing-extensions.#782
To make it easier to customize attribute comparison (#435), we have added the
attr.cmp_with()
helper.See the new docs on comparison for more details.
#787
Added provisional support for static typing in
pyright
via PEP 681.Both the
pyright
specification andattrs
implementation may change in future versions of both projects.Your constructive feedback is welcome in both attrs#795 and pyright#1782.
#796
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.