Path to this page:
./
devel/py-attrs,
Attributes without boilerplate
Branch: CURRENT,
Version: 26.1.0,
Package name: py313-attrs-26.1.0,
Maintainer: pkgsrc-usersattrs is an MIT-licensed Python package with class decorators that ease the
chores of implementing the most common attribute-related object protocols.
You just specify the attributes to work with and attrs gives you:
* a nice human-readable __repr__,
* a complete set of comparison methods,
* an initializer,
* and much more
without writing dull boilerplate code again and again.
This gives you the power to use actual classes with actual types in your code
instead of confusing tuples or confusingly behaving namedtuples.
So put down that type-less data structures and welcome some class into your
life!
Required to run:[
devel/py-setuptools] [
lang/python37]
Required to build:[
pkgtools/cwrappers]
Master sites:
Filesize: 929.741 KB
Version history: (Expand)
- (2026-03-26) Updated to version: py313-attrs-26.1.0
- (2025-10-24) Package has been reborn
- (2025-10-24) Package deleted from pkgsrc
- (2025-10-12) Updated to version: py313-attrs-25.4.0
- (2025-07-15) Package has been reborn
- (2025-07-15) Package deleted from pkgsrc
CVS history: (Expand)
2026-03-26 15:33:22 by Thomas Klausner | Files touched by this commit (2) |  |
Log message:
py-attrs: update to 26.1.0.
## [26.1.0]
### Backwards-incompatible Changes
- Field aliases are now resolved *before* calling `field_transformer`, so \
transformers receive fully populated `Attribute` objects with usable `alias` \
values instead of `None`.
The new `Attribute.alias_is_default` flag indicates whether the alias was \
auto-generated
[#1509]
### Changes
- Fix type annotations for `attrs.validators.optional()`, so it no longer \
rejects tuples with more than one validator.
[#1496]
- The `attrs.validators.disabled()` contextmanager can now be nested.
[#1513]
- Frozen classes can set `on_setattr=attrs.setters.NO_OP` in addition to `None`.
[#1515]
- It's now possible to pass *attrs* **instances** in addition to *attrs* \
**classes** to `attrs.fields()`.
[#1529]
|
2025-10-12 19:11:01 by Thomas Klausner | Files touched by this commit (2) |  |
Log message:
py-attrs: update to 25.4.0.
## [25.4.0]
### 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:
```python
@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.
### 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).
- Added support for Python 3.14 and [PEP 749]
- `attrs.validators.deep_mapping()` now allows to leave out either \
*key_validator* xor *value_validator*.
- `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_()`.
- 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.
- Fixed annotations for `attrs.field(converter=...)`.
Previously, a `tuple` of converters was only accepted if it had exactly one \
element.
- The performance of `attrs.asdict()` has been improved by 45–260%.
- The performance of `attrs.astuple()` has been improved by 49–270%.
- The type annotation for `attrs.validators.or_()` now allows for different \
types of validators.
This was only an issue on Pyright.
|
2025-03-13 16:07:34 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 25.3.0
25.3.0
Changes
- Restore support for generator-based `field_transformer`s.
|
2025-03-12 14:49:16 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 25.2.0
25.2.0
Changes
- Checking mandatory vs non-mandatory attribute order is now performed after the \
field transformer, since the field transformer may change attributes and/or \
their order.
- `attrs.make_class()` now allows for Unicode class names.
- Speed up class creation by 30%-50% by compiling methods only once and using a \
variety of other techniques.
- The error message if an attribute has both an annotation and a type argument \
will now disclose _what_ attribute seems to be the problem.
|
2025-01-27 10:41:49 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 25.1.0
25.1.0
This release only ensures correct PyPI licensing metadata.
|
2024-12-24 17:06:13 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 24.3.0
24.3.0
Backwards-incompatible Changes
- Python 3.7 has been dropped.
Changes
- Introduce `attrs.NothingType`, for annotating types consistent with \
`attrs.NOTHING`.
- Allow mutating `__suppress_context__` and `__notes__` on frozen exceptions.
- `attrs.converters.optional()` works again when taking \
`attrs.converters.pipe()` or another Converter as its argument.
- *attrs* instances now support \
[`copy.replace()`](https://docs.python.org/3/library/copy.html#copy.replace).
- `attrs.validators.instance_of()`'s type hints now allow for union types.
For example: `instance_of(str | int)`
|
2024-08-07 22:12:10 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 24.2.0
24.2.0
Deprecations
- Given the amount of warnings raised in the broader ecosystem, we've decided to \
only soft-deprecate the *hash* argument to `@define` / `@attr.s`.
Please don't use it in new code, but we don't intend to remove it anymore.
Changes
- `attrs.converters.pipe()` (and its syntactic sugar of passing a list for \
`attrs.field()`'s / `attr.ib()`'s *converter* argument) works again when passing \
`attrs.setters.convert` to *on_setattr* (which is default for `attrs.define`).
- Restored support for PEP [649](https://peps.python.org/pep-0649/) / \
[749](https://peps.python.org/pep-0749/)-implementing Pythons -- currently \
3.14-dev.
|
2024-08-04 08:40:25 by Adam Ciarcinski | Files touched by this commit (2) |  |
Log message:
py-attrs: updated to 24.1.0
24.1.0
Backwards-incompatible Changes
- `attrs.evolve()` doesn't accept the *inst* argument as a keyword argument anymore.
Pass it as the first positional argument instead.
- `attrs.validators.provides()` has been removed.
The removed code is available as a \
[gist](https://gist.github.com/hynek/9eaaaeb659808f3519870dfa16d2b6b2) for \
convenient copy and pasting.
- All packaging metadata except from `__version__` and `__version_info__` has \
been removed from the `attr` and `attrs` modules (for example, `attrs.__url__`).
Please use \
[`importlib.metadata`](https://docs.python.org/3/library/importlib.metadata.html) \
or [*importlib_metadata*](https://pypi.org/project/importlib-metadata/) instead.
- Speed up the generated `__eq__` methods 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')`.
Deprecations
- The *repr_ns* argument to `attr.s` is now deprecated.
It was a workaround for nested classes in Python 2 and is pointless in Python 3.
- The *hash* argument to `@attr.s`, `@attrs.define`, and `make_class()` is now \
deprecated in favor of *unsafe_hash*, as defined by PEP 681.
Changes
- Allow original slotted `functools.cached_property` classes to be cleaned by \
garbage collection.
Allow `super()` calls in slotted cached properties.
- Our type stubs now use modern type notation and are organized such that VS \
Code's quick-fix prefers the `attrs` namespace.
- Preserve `AttributeError` raised by properties of slotted classes with \
`functools.cached_properties`.
- 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.
- `attrs.make_class()` now populates the `__annotations__` dict of the generated \
class, so that `attrs.resolve_types()` can resolve them.
- Added the `attrs.validators.or_()` validator.
- The combination of a `__attrs_pre_init__` that takes arguments, a kw-only \
field, and a default on that field does not crash anymore.
- `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()`.
- 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.
|