2018-01-04 06:59:20 +01:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Wed Jan 3 23:08:32 UTC 2018 - arun@gmx.de
|
|
|
|
|
|
|
|
|
|
- specfile:
|
|
|
|
|
* update copyright year
|
|
|
|
|
|
|
|
|
|
- update to version 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.
|
|
|
|
|
|
2017-12-21 17:11:35 +01:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Thu Dec 21 16:10:47 UTC 2017 - jmatejek@suse.com
|
|
|
|
|
|
|
|
|
|
- add test requirements, run tests conditionally
|
|
|
|
|
(not BuildRequiring pytest fixes bsc#1073845)
|
|
|
|
|
|
2017-11-10 12:33:36 +01:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Thu Nov 9 18:50:46 UTC 2017 - arun@gmx.de
|
|
|
|
|
|
|
|
|
|
- update to version 17.3.0:
|
|
|
|
|
* Backward-incompatible Changes
|
|
|
|
|
+ Attributes are not defined on the class body anymore. This
|
|
|
|
|
means that if you define a class "C" with an attribute "x", the
|
|
|
|
|
class will *not* have an attribute "x" for introspection
|
|
|
|
|
anymore. Instead of "C.x", use "attr.fields(C).x" or look at
|
|
|
|
|
"C.__attrs_attrs__". The old behavior has been deprecated since
|
|
|
|
|
version 16.1. (`#253
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/253>`_)
|
|
|
|
|
* Changes
|
|
|
|
|
+ "super()" and "__class__" now work on Python 3 when
|
|
|
|
|
"slots=True". (`#102
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/102>`_, `#226
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/226>`_, `#269
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/269>`_, `#270
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/270>`_, `#272
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/272>`_)- Added
|
|
|
|
|
"type" argument to "attr.ib()" and corresponding "type"
|
|
|
|
|
attribute to "attr.Attribute". This change paves the way for
|
|
|
|
|
automatic type checking and serialization (though as of this
|
|
|
|
|
release "attrs" does not make use of it). In Python 3.6 or
|
|
|
|
|
higher, the value of "attr.Attribute.type" can alternately be
|
|
|
|
|
set using variable type annotations (see `PEP 526
|
|
|
|
|
<https://www.python.org/dev/peps/pep-0526/>`_). (`#151
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/151>`_, `#214
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/214>`_, `#215
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/215>`_, `#239
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/239>`_)
|
|
|
|
|
+ The combination of "str=True" and "slots=True" now works on
|
|
|
|
|
Python 2. (`#198
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/198>`_)
|
|
|
|
|
+ "attr.Factory" is hashable again. (`#204
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/204>`_)
|
|
|
|
|
+ Subclasses now can overwrite attribute definitions of their
|
|
|
|
|
superclass. That means that you can -- for example -- change
|
|
|
|
|
the default value for an attribute by redefining it. (`#221
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/221>`_, `#229
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/229>`_)
|
|
|
|
|
+ Added new option "auto_attribs" to "@attr.s" that allows to
|
|
|
|
|
collect annotated fields without setting them to "attr.ib()".
|
|
|
|
|
Setting a field to an "attr.ib()" is still possible to supply
|
|
|
|
|
options like validators. Setting it to any other value is
|
|
|
|
|
treated like it was passed as "attr.ib(default=value)" --
|
|
|
|
|
passing an instance of "attr.Factory" also works as expected.
|
|
|
|
|
(`#262 <https://github.com/python-attrs/attrs/issues/262>`_,
|
|
|
|
|
`#277 <https://github.com/python-attrs/attrs/issues/277>`_)
|
|
|
|
|
+ Instances of classes created using "attr.make_class()" can now
|
|
|
|
|
be pickled. (`#282
|
|
|
|
|
<https://github.com/python-attrs/attrs/issues/282>`_)
|
|
|
|
|
|
Accepting request 507963 from home:tbechtold:branches:devel:languages:python
- update to 17.2.0:
- Validators are hashable again.
- ``attrs`` will set the ``__hash__()`` method to ``None`` by default now.
The way hashes were handled before was in conflict with `Python's
specification
This *may* break some software although this breakage is most likely just
surfacing of latent bugs.
You can always make ``attrs`` create the ``__hash__()`` method using
``@attr.s(hash=True)``. See `#136`_ for the rationale of this change.
- Correspondingly, ``attr.ib``'s ``hash`` argument is ``None`` by default too
and mirrors the ``cmp`` argument as it should.
- ``attr.assoc()`` is now deprecated in favor of ``attr.evolve()`` and will
stop working in 2018.
- Fix default hashing behavior.
Now *hash* mirrors the value of *cmp* and classes are unhashable by default.
- Added ``attr.evolve()`` that, given an instance of an ``attrs`` class and
field changes as keyword arguments, will instantiate a copy of the given
instance with the changes applied.
- ``FrozenInstanceError`` is now raised when trying to delete an attribute
from a frozen class.
- Frozen-ness of classes is now inherited.
- ``__attrs_post_init__()`` is now run if validation is disabled.
- Added ``attr.validators.in_(options)`` that, given the allowed `options`,
checks whether the attribute value is in it.
This can be used to check constants, enums, mappings, etc.
- Added ``attr.validators.and_()`` that composes multiple validators into one.
- For convenience, the ``validator`` argument of ``@attr.s`` now can take a
``list`` of validators that are wrapped using ``and_()``.
- Accordingly, ``attr.validators.optional()`` now can take a ``list`` of
validators too.
OBS-URL: https://build.opensuse.org/request/show/507963
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-attrs?expand=0&rev=6
2017-07-04 07:29:27 +02:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Tue Jul 4 05:04:08 UTC 2017 - tbechtold@suse.com
|
|
|
|
|
|
|
|
|
|
- update to 17.2.0:
|
|
|
|
|
- Validators are hashable again.
|
|
|
|
|
- ``attrs`` will set the ``__hash__()`` method to ``None`` by default now.
|
|
|
|
|
The way hashes were handled before was in conflict with `Python's
|
|
|
|
|
specification
|
|
|
|
|
This *may* break some software although this breakage is most likely just
|
|
|
|
|
surfacing of latent bugs.
|
|
|
|
|
You can always make ``attrs`` create the ``__hash__()`` method using
|
|
|
|
|
``@attr.s(hash=True)``. See `#136`_ for the rationale of this change.
|
|
|
|
|
- Correspondingly, ``attr.ib``'s ``hash`` argument is ``None`` by default too
|
|
|
|
|
and mirrors the ``cmp`` argument as it should.
|
|
|
|
|
- ``attr.assoc()`` is now deprecated in favor of ``attr.evolve()`` and will
|
|
|
|
|
stop working in 2018.
|
|
|
|
|
- Fix default hashing behavior.
|
|
|
|
|
Now *hash* mirrors the value of *cmp* and classes are unhashable by default.
|
|
|
|
|
- Added ``attr.evolve()`` that, given an instance of an ``attrs`` class and
|
|
|
|
|
field changes as keyword arguments, will instantiate a copy of the given
|
|
|
|
|
instance with the changes applied.
|
|
|
|
|
- ``FrozenInstanceError`` is now raised when trying to delete an attribute
|
|
|
|
|
from a frozen class.
|
|
|
|
|
- Frozen-ness of classes is now inherited.
|
|
|
|
|
- ``__attrs_post_init__()`` is now run if validation is disabled.
|
|
|
|
|
- Added ``attr.validators.in_(options)`` that, given the allowed `options`,
|
|
|
|
|
checks whether the attribute value is in it.
|
|
|
|
|
This can be used to check constants, enums, mappings, etc.
|
|
|
|
|
- Added ``attr.validators.and_()`` that composes multiple validators into one.
|
|
|
|
|
- For convenience, the ``validator`` argument of ``@attr.s`` now can take a
|
|
|
|
|
``list`` of validators that are wrapped using ``and_()``.
|
|
|
|
|
- Accordingly, ``attr.validators.optional()`` now can take a ``list`` of
|
|
|
|
|
validators too.
|
|
|
|
|
- Validators can now be defined conveniently inline by using the attribute as
|
|
|
|
|
a decorator.
|
|
|
|
|
- ``attr.Factory()`` now has a ``takes_self`` argument that makes the
|
|
|
|
|
initializer to pass the partially initialized instance into the factory.
|
|
|
|
|
In other words you can define attribute defaults based on other attributes.
|
|
|
|
|
- Default factories can now also be defined inline using decorators.
|
|
|
|
|
They are *always* passed the partially initialized instance.
|
|
|
|
|
- Conversion can now be made optional using ``attr.converters.optional()``.
|
|
|
|
|
- ``attr.make_class()`` now accepts the keyword argument ``bases`` which
|
|
|
|
|
allows for subclassing.
|
|
|
|
|
- Metaclasses are now preserved with ``slots=True``.
|
|
|
|
|
- Attributes now can have user-defined metadata which greatly improves
|
|
|
|
|
``attrs``'s extensibility.
|
|
|
|
|
- Allow for a ``__attrs_post_init__()`` method that -- if defined -- will get
|
|
|
|
|
called at the end of the ``attrs``-generated ``__init__()`` method.
|
|
|
|
|
- Added ``@attr.s(str=True)`` that will optionally create a ``__str__()``
|
|
|
|
|
method that is identical to ``__repr__()``.
|
|
|
|
|
- ``__name__`` is not overwritten with ``__qualname__`` for
|
|
|
|
|
``attr.s(slots=True)`` classes anymore.
|
|
|
|
|
- Added ``attr.astuple()`` that -- similarly to ``attr.asdict()`` --
|
|
|
|
|
returns the instance as a tuple.
|
|
|
|
|
- Converts now work with frozen classes.
|
|
|
|
|
- Instantiation of ``attrs`` classes with converters is now significantly
|
|
|
|
|
faster.
|
|
|
|
|
- Pickling now works with ``__slots__`` classes.
|
|
|
|
|
- ``attr.assoc()`` now works with ``__slots__`` classes.
|
|
|
|
|
- The tuple returned by ``attr.fields()`` now also allows to access the
|
|
|
|
|
``Attribute`` instances by name.
|
|
|
|
|
- All instances where function arguments were called ``cl`` have been changed
|
|
|
|
|
to the more Pythonic ``cls``.
|
|
|
|
|
- Accessing ``Attribute`` instances on class objects is now deprecated and
|
|
|
|
|
will stop working in 2017.
|
|
|
|
|
- The serious business aliases ``attr.attributes`` and ``attr.attr`` have been
|
|
|
|
|
deprecated in favor of ``attr.attrs`` and ``attr.attrib`` which are much
|
|
|
|
|
more consistent and frankly obvious in hindsight.
|
|
|
|
|
- ``attr.asdict()``\ 's ``dict_factory`` arguments is now propagated on
|
|
|
|
|
recursion.
|
|
|
|
|
- ``attr.asdict()``, ``attr.has()`` and ``attr.fields()`` are significantly
|
|
|
|
|
faster.
|
|
|
|
|
- Add ``attr.attrs`` and ``attr.attrib`` as a more consistent aliases for
|
|
|
|
|
``attr.s`` and ``attr.ib``.
|
|
|
|
|
- Add ``frozen`` option to ``attr.s`` that will make instances best-effort
|
|
|
|
|
immutable.
|
|
|
|
|
- ``attr.asdict()`` now takes ``retain_collection_types`` as an argument.
|
|
|
|
|
|
2017-07-03 13:17:31 +02:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Sat Jul 1 14:53:33 UTC 2017 - okurz@suse.com
|
|
|
|
|
|
|
|
|
|
- Convert to singlespec
|
|
|
|
|
|
2016-07-06 17:56:05 +02:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Tue Jul 5 17:20:56 UTC 2016 - hpj@urpla.net
|
|
|
|
|
|
|
|
|
|
- update to 16.0.0
|
|
|
|
|
Backward-incompatible changes:
|
|
|
|
|
* Python 3.3 and 2.6 aren’t supported anymore. They may work by chance but
|
|
|
|
|
any effort to keep them working has ceased.
|
|
|
|
|
The last Python 2.6 release was on October 29, 2013 and isn’t supported by
|
|
|
|
|
the CPython core team anymore. Major Python packages like Django and Twisted
|
|
|
|
|
dropped Python 2.6 a while ago already.
|
|
|
|
|
Python 3.3 never had a significant user base and wasn’t part of any
|
|
|
|
|
distribution’s LTS release.
|
|
|
|
|
Changes:
|
|
|
|
|
* __slots__ have arrived! Classes now can automatically be slots-style (and
|
|
|
|
|
save your precious memory) just by passing slots=True. #35
|
|
|
|
|
* Allow the case of initializing attributes that are set to init=False. This
|
|
|
|
|
allows for clean initializer parameter lists while being able to initialize
|
|
|
|
|
attributes to default values. #32
|
|
|
|
|
* attr.asdict can now produce arbitrary mappings instead of Python dicts when
|
|
|
|
|
provided with a dict_factory argument. #40 Multiple performance improvements.
|
|
|
|
|
|
2016-06-06 13:09:21 +02:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Thu Jun 2 07:58:54 UTC 2016 - tbechtold@suse.com
|
|
|
|
|
|
|
|
|
|
- fix Source url
|
|
|
|
|
|
2016-06-02 09:57:12 +02:00
|
|
|
|
-------------------------------------------------------------------
|
|
|
|
|
Thu Jun 2 07:10:13 UTC 2016 - jacobwinski@gmail.com
|
|
|
|
|
|
|
|
|
|
- Initial version
|
|
|
|
|
|