Path to this page:
Subject: CVS commit: pkgsrc/devel/py-attrs
From: Adam Ciarcinski
Date: 2018-01-01 22:08:46
Message id: 20180101210846.4248CFB40@cvs.NetBSD.org
Log Message:
py-attrs: updated to 17.4.0
17.4.0:
Backward-incompatible Changes
- The traversal of MROs when using multiple inheritance was backward:
If you defined a class C that subclasses A and B like C(A, B), attrs would \
have collected the attributes from B *before* those of A.
This is now fixed and means that in classes that employ multiple inheritance, \
the output of __repr__ and the order of positional arguments in __init__ \
changes.
Due to the nature of this bug, a proper deprecation cycle was unfortunately \
impossible.
Generally speaking, it's advisable to prefer kwargs-based initialization \
anyways – *especially* if you employ multiple inheritance and diamond-shaped \
hierarchies.
- The __repr__ set by attrs
no longer produces an AttributeError
when the instance is missing some of the specified attributes
(either through deleting
or after using init=False on some attributes).
This can break code
that relied on repr(attr_cls_instance) raising AttributeError
to check if any attr-specified members were unset.
If you were using this,
you can implement a custom method for checking this::
def has_unset_members(self):
for field in attr.fields(type(self)):
try:
getattr(self, field.name)
except AttributeError:
return True
return False
Deprecations
- The attr.ib(convert=callable) option is now deprecated in favor of \
attr.ib(converter=callable).
This is done to achieve consistency with other noun-based arguments like \
*validator*.
*convert* will keep working until at least January 2019 while raising a \
DeprecationWarning.
Changes
- Generated __hash__ methods now hash the class type along with the attribute values.
Until now the hashes of two classes with the same values were identical which \
was a bug.
The generated method is also *much* faster now.
- attr.ib\ ’s metadata argument now defaults to a unique empty dict instance \
instead of sharing a common empty dict for all.
The singleton empty dict is still enforced.
- ctypes is optional now however if it's missing, a bare super() will not work \
in slots classes.
This should only happen in special environments like Google App Engine.
- The attribute redefinition feature introduced in 17.3.0 now takes into account \
if an attribute is redefined via multiple inheritance.
In that case, the definition that is closer to the base of the class hierarchy \
wins.
- Subclasses of auto_attribs=True can be empty now.
- Equality tests are *much* faster now.
- All generated methods now have correct __module__, __name__, and (on Python 3) \
__qualname__ attributes.
Files: