Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scheduled monthly dependency update for March #235

Closed
wants to merge 42 commits into from

Conversation

pyup-bot
Copy link
Collaborator

@pyup-bot pyup-bot commented Mar 1, 2022

Update attrs from 19.3.0 to 21.4.0.

Changelog

21.4.0

-------------------

Changes
^^^^^^^

- Fixed the test suite on PyPy3.8 where ``cloudpickle`` does not work.
`892 <https://github.com/python-attrs/attrs/issues/892>`_
- Fixed ``coverage report`` for projects that use ``attrs`` and don't set a ``--source``.
`895 <https://github.com/python-attrs/attrs/issues/895>`_,
`896 <https://github.com/python-attrs/attrs/issues/896>`_


----

21.3.0

-------------------

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 <https://github.com/python-attrs/attrs/issues/835>`_,
`886 <https://github.com/python-attrs/attrs/issues/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 notably ``attr.s`` and ``attr.ib`` are missing.
See ``attrs.define`` and ``attrs.field`` if you haven't seen our next-generation APIs yet.
A more elaborate explanation can be found `On The Core API Names <https://www.attrs.org/en/latest/names.html>`_

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 <https://github.com/python-attrs/attrs/issues/887>`_


Changes
^^^^^^^

- ``attr.asdict(retain_collection_types=False)`` (default) dumps collection-esque keys as tuples.
`646 <https://github.com/python-attrs/attrs/issues/646>`_,
`888 <https://github.com/python-attrs/attrs/issues/888>`_
- ``__match_args__`` are now generated to support Python 3.10's
`Structural Pattern Matching <https://docs.python.org/3.10/whatsnew/3.10.html#pep-634-structural-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 <https://github.com/python-attrs/attrs/issues/815>`_
- If the class-level *on_setattr* is set to ``attrs.setters.validate`` (default in ``define`` and ``mutable``) but no field defines a validator, pretend that it's not set.
`817 <https://github.com/python-attrs/attrs/issues/817>`_
- The generated ``__repr__`` is significantly faster on Pythons with f-strings.
`819 <https://github.com/python-attrs/attrs/issues/819>`_
- Attributes transformed via ``field_transformer`` are wrapped with ``AttrsClass`` again.
`824 <https://github.com/python-attrs/attrs/issues/824>`_
- Generated source code is now cached more efficiently for identical classes.
`828 <https://github.com/python-attrs/attrs/issues/828>`_
- Added ``attrs.converters.to_bool()``.
`830 <https://github.com/python-attrs/attrs/issues/830>`_
- ``attrs.resolve_types()`` now resolves types of subclasses after the parents are resolved.
`842 <https://github.com/python-attrs/attrs/issues/842>`_
`843 <https://github.com/python-attrs/attrs/issues/843>`_
- Added new validators: ``lt(val)`` (< val), ``le(va)`` (≤ val), ``ge(val)`` (≥ val), ``gt(val)`` (> val), and ``maxlen(n)``.
`845 <https://github.com/python-attrs/attrs/issues/845>`_
- ``attrs`` classes are now fully compatible with `cloudpickle <https://github.com/cloudpipe/cloudpickle>`_ (no need to disable ``repr`` anymore).
`857 <https://github.com/python-attrs/attrs/issues/857>`_
- Added new context manager ``attrs.validators.disabled()`` and functions ``attrs.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 <https://github.com/python-attrs/attrs/issues/859>`_
- ``attrs.validators.matches_re()`` now accepts pre-compiled regular expressions in addition to pattern strings.
`877 <https://github.com/python-attrs/attrs/issues/877>`_


----

21.2.0

-------------------

Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- We had to revert the recursive feature for ``attr.evolve()`` because it broke some use-cases -- sorry!
`806 <https://github.com/python-attrs/attrs/issues/806>`_
- Python 3.4 is now blocked using packaging metadata because ``attrs`` can't be imported on it anymore.
To ensure that 3.4 users can keep installing  ``attrs`` easily, we will `yank <https://pypi.org/help/#yanked>`_ 21.1.0 from PyPI.
This has **no** consequences if you pin ``attrs`` to 21.1.0.
`807 <https://github.com/python-attrs/attrs/issues/807>`_


----

21.1.0

-------------------

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 actually ``import 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 <https://github.com/python-attrs/attrs/issues/487>`_
- The *cmp* argument to ``attr.s()`` and `attr.ib()` has been **undeprecated**
It 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 on ``attr.Attribute`` remains deprecated and will be removed later this year.
`773 <https://github.com/python-attrs/attrs/issues/773>`_


Changes
^^^^^^^

- It's now possible to customize the behavior of ``eq`` and ``order`` by passing in a callable.
`435 <https://github.com/python-attrs/attrs/issues/435>`_,
`627 <https://github.com/python-attrs/attrs/issues/627>`_
- The instant favorite next-generation APIs are not provisional anymore!

They are also officially supported by Mypy as of their `0.800 release <https://mypy-lang.blogspot.com/2021/01/mypy-0800-released.html>`_.

We hope the next release will already contain an (additional) importable package called ``attrs``.
`668 <https://github.com/python-attrs/attrs/issues/668>`_,
`786 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/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 <https://github.com/python-attrs/attrs/issues/718>`_
- ``__attrs__init__()`` will now be injected if ``init=False``, or if ``auto_detect=True`` and a user-defined ``__init__()`` exists.

This enables users to do "pre-init" work in their ``__init__()`` (such as ``super().__init__()``).

``__init__()`` can then delegate constructor argument processing to ``self.__attrs_init__(*args, **kwargs)``.
`731 <https://github.com/python-attrs/attrs/issues/731>`_
- ``bool(attr.NOTHING)`` is now ``False``.
`732 <https://github.com/python-attrs/attrs/issues/732>`_
- It's now possible to use ``super()`` inside of properties of slotted classes.
`747 <https://github.com/python-attrs/attrs/issues/747>`_
- Allow for a ``__attrs_pre_init__()`` method that -- if defined -- will get called at the beginning of the ``attrs``-generated ``__init__()`` method.
`750 <https://github.com/python-attrs/attrs/issues/750>`_
- Added forgotten ``attr.Attribute.evolve()`` to type stubs.
`752 <https://github.com/python-attrs/attrs/issues/752>`_
- ``attrs.evolve()`` now works recursively with nested ``attrs`` classes.
`759 <https://github.com/python-attrs/attrs/issues/759>`_
- Python 3.10 is now officially supported.
`763 <https://github.com/python-attrs/attrs/issues/763>`_
- ``attr.resolve_types()`` now takes an optional *attrib* argument to work inside a ``field_transformer``.
`774 <https://github.com/python-attrs/attrs/issues/774>`_
- ``ClassVar``\ s are now also detected if they come from `typing-extensions <https://pypi.org/project/typing-extensions/>`_.
`782 <https://github.com/python-attrs/attrs/issues/782>`_
- To make it easier to customize attribute comparison (435), we have added the ``attr.cmp_with()`` helper.

See the `new docs on comparison <https://www.attrs.org/en/stable/comparison.html>`_ for more details.
`787 <https://github.com/python-attrs/attrs/issues/787>`_
- Added **provisional** support for static typing in ``pyright`` via the `dataclass_transforms specification <https://github.com/microsoft/pyright/blob/main/specs/dataclass_transforms.md>`_.
Both the ``pyright`` specification and ``attrs`` implementation may change in future versions of both projects.

Your constructive feedback is welcome in both `attrs795 <https://github.com/python-attrs/attrs/issues/795>`_ and `pyright#1782 <https://github.com/microsoft/pyright/discussions/1782>`_.
`796 <https://github.com/python-attrs/attrs/issues/796>`_


----

20.3.0

-------------------

Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- ``attr.define()``, ``attr.frozen()``, ``attr.mutable()``, and ``attr.field()`` remain **provisional**.

This release does **not** change anything about them and they are already used widely in production though.

If you wish to use them together with mypy, you can simply drop `this plugin <https://gist.github.com/hynek/1e3844d0c99e479e716169034b5fa963#file-attrs_ng_plugin-py>`_ into your project.

Feel free to provide feedback to them in the linked issue 668.

We will release the ``attrs`` namespace once we have the feeling that the APIs have properly settled.
`668 <https://github.com/python-attrs/attrs/issues/668>`_


Changes
^^^^^^^

- ``attr.s()`` now has a *field_transformer* hook that is called for all ``Attribute``\ s and returns a (modified or updated) list of ``Attribute`` instances.
``attr.asdict()`` has a *value_serializer* hook that can change the way values are converted.
Both hooks are meant to help with data (de-)serialization workflows.
`653 <https://github.com/python-attrs/attrs/issues/653>`_
- ``kw_only=True`` now works on Python 2.
`700 <https://github.com/python-attrs/attrs/issues/700>`_
- ``raise from`` now works on frozen classes on PyPy.
`703 <https://github.com/python-attrs/attrs/issues/703>`_,
`712 <https://github.com/python-attrs/attrs/issues/712>`_
- ``attr.asdict()`` and ``attr.astuple()`` now treat ``frozenset``\ s like ``set``\ s with regards to the *retain_collection_types* argument.
`704 <https://github.com/python-attrs/attrs/issues/704>`_
- The type stubs for ``attr.s()`` and ``attr.make_class()`` are not missing the *collect_by_mro* argument anymore.
`711 <https://github.com/python-attrs/attrs/issues/711>`_


----

20.2.0

-------------------

Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- ``attr.define()``, ``attr.frozen()``, ``attr.mutable()``, and ``attr.field()`` remain **provisional**.

This release fixes a bunch of bugs and ergonomics but they remain mostly unchanged.

If you wish to use them together with mypy, you can simply drop `this plugin <https://gist.github.com/hynek/1e3844d0c99e479e716169034b5fa963#file-attrs_ng_plugin-py>`_ into your project.

Feel free to provide feedback to them in the linked issue 668.

We will release the ``attrs`` namespace once we have the feeling that the APIs have properly settled.
`668 <https://github.com/python-attrs/attrs/issues/668>`_


Changes
^^^^^^^

- ``attr.define()`` et al now correct detect ``__eq__`` and ``__ne__``.
`671 <https://github.com/python-attrs/attrs/issues/671>`_
- ``attr.define()`` et al's hybrid behavior now also works correctly when arguments are passed.
`675 <https://github.com/python-attrs/attrs/issues/675>`_
- It's possible to define custom ``__setattr__`` methods on slotted classes again.
`681 <https://github.com/python-attrs/attrs/issues/681>`_
- In 20.1.0 we introduced the ``inherited`` attribute on the ``attr.Attribute`` class to differentiate attributes that have been inherited and those that have been defined directly on the class.

It has shown to be problematic to involve that attribute when comparing instances of ``attr.Attribute`` though, because when sub-classing, attributes from base classes are suddenly not equal to themselves in a super class.

Therefore the ``inherited`` attribute will now be ignored when hashing and comparing instances of ``attr.Attribute``.
`684 <https://github.com/python-attrs/attrs/issues/684>`_
- ``zope.interface`` is now a "soft dependency" when running the test suite; if ``zope.interface`` is not installed when running the test suite, the interface-related tests will be automatically skipped.
`685 <https://github.com/python-attrs/attrs/issues/685>`_
- The ergonomics of creating frozen classes using ``define(frozen=True)`` and sub-classing frozen classes has been improved:
you don't have to set ``on_setattr=None`` anymore.
`687 <https://github.com/python-attrs/attrs/issues/687>`_


----

20.1.0

-------------------

Backward-incompatible Changes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- Python 3.4 is not supported anymore.
It has been unsupported by the Python core team for a while now, its PyPI downloads are negligible, and our CI provider removed it as a supported option.

It's very unlikely that ``attrs`` will break under 3.4 anytime soon, which is why we do *not* block its installation on Python 3.4.
But we don't test it anymore and will block it once someone reports breakage.
`608 <https://github.com/python-attrs/attrs/issues/608>`_


Deprecations
^^^^^^^^^^^^

- Less of a deprecation and more of a heads up: the next release of ``attrs`` will introduce an ``attrs`` namespace.
That means that you'll finally be able to run ``import attrs`` with new functions that aren't cute abbreviations and that will carry better defaults.

This should not break any of your code, because project-local packages have priority before installed ones.
If this is a problem for you for some reason, please report it to our bug tracker and we'll figure something out.

The old ``attr`` namespace isn't going anywhere and its defaults are not changing – this is a purely additive measure.
Please check out the linked issue for more details.

These new APIs have been added *provisionally* as part of 666 so you can try them out today and provide feedback.
Learn more in the `API docs <https://www.attrs.org/en/stable/api.html>`_.
`408 <https://github.com/python-attrs/attrs/issues/408>`_


Changes
^^^^^^^

- Added ``attr.resolve_types()``.
It ensures that all forward-references and types in string form are resolved into concrete types.

You need this only if you need concrete types at runtime.
That means that if you only use types for static type checking, you do **not** need this function.
`288 <https://github.com/python-attrs/attrs/issues/288>`_,
`302 <https://github.com/python-attrs/attrs/issues/302>`_
- Added ``attr.s(collect_by_mro=False)`` argument that if set to ``True`` fixes the collection of attributes from base classes.

It's only necessary for certain cases of multiple-inheritance but is kept off for now for backward-compatibility reasons.
It will be turned on by default in the future.

As a side-effect, ``attr.Attribute`` now *always* has an ``inherited`` attribute indicating whether an attribute on a class was directly defined or inherited.
`428 <https://github.com/python-attrs/attrs/issues/428>`_,
`635 <https://github.com/python-attrs/attrs/issues/635>`_
- On Python 3, all generated methods now have a docstring explaining that they have been created by ``attrs``.
`506 <https://github.com/python-attrs/attrs/issues/506>`_
- It is now possible to prevent ``attrs`` from auto-generating the ``__setstate__`` and ``__getstate__`` methods that are required for pickling of slotted classes.

Either pass ``attr.s(getstate_setstate=False)`` or pass ``attr.s(auto_detect=True)`` and implement them yourself:
if ``attrs`` finds either of the two methods directly on the decorated class, it assumes implicitly ``getstate_setstate=False`` (and implements neither).

This option works with dict classes but should never be necessary.
`512 <https://github.com/python-attrs/attrs/issues/512>`_,
`513 <https://github.com/python-attrs/attrs/issues/513>`_,
`642 <https://github.com/python-attrs/attrs/issues/642>`_
- Fixed a ``ValueError: Cell is empty`` bug that could happen in some rare edge cases.
`590 <https://github.com/python-attrs/attrs/issues/590>`_
- ``attrs`` can now automatically detect your own implementations and infer ``init=False``, ``repr=False``, ``eq=False``, ``order=False``, and ``hash=False`` if you set ``attr.s(auto_detect=True)``.
``attrs`` will ignore inherited methods.
If the argument implies more than one method (e.g. ``eq=True`` creates both ``__eq__`` and ``__ne__``), it's enough for *one* of them to exist and ``attrs`` will create *neither*.

This feature requires Python 3.
`607 <https://github.com/python-attrs/attrs/issues/607>`_
- Added ``attr.converters.pipe()``.
The feature allows combining multiple conversion callbacks into one by piping the value through all of them, and retuning the last result.

As part of this feature, we had to relax the type information for converter callables.
`618 <https://github.com/python-attrs/attrs/issues/618>`_
- Fixed serialization behavior of non-slots classes with ``cache_hash=True``.
The hash cache will be cleared on operations which make "deep copies" of instances of classes with hash caching,
though the cache will not be cleared with shallow copies like those made by ``copy.copy()``.

Previously, ``copy.deepcopy()`` or serialization and deserialization with ``pickle`` would result in an un-initialized object.

This change also allows the creation of ``cache_hash=True`` classes with a custom ``__setstate__``,
which was previously forbidden (`494 <https://github.com/python-attrs/attrs/issues/494>`_).
`620 <https://github.com/python-attrs/attrs/issues/620>`_
- It is now possible to specify hooks that are called whenever an attribute is set **after** a class has been instantiated.

You can pass ``on_setattr`` both to ``attr.s()`` to set the default for all attributes on a class, and to ``attr.ib()`` to overwrite it for individual attributes.

``attrs`` also comes with a new module ``attr.setters`` that brings helpers that run validators, converters, or allow to freeze a subset of attributes.
`645 <https://github.com/python-attrs/attrs/issues/645>`_,
`660 <https://github.com/python-attrs/attrs/issues/660>`_
- **Provisional** APIs called ``attr.define()``, ``attr.mutable()``, and ``attr.frozen()`` have been added.

They are only available on Python 3.6 and later, and call ``attr.s()`` with different default values.

If nothing comes up, they will become the official way for creating classes in 20.2.0 (see above).

**Please note** that it may take some time until mypy – and other tools that have dedicated support for ``attrs`` – recognize these new APIs.
Please **do not** open issues on our bug tracker, there is nothing we can do about it.
`666 <https://github.com/python-attrs/attrs/issues/666>`_
- We have also provisionally added ``attr.field()`` that supplants ``attr.ib()``.
It also requires at least Python 3.6 and is keyword-only.
Other than that, it only dropped a few arguments, but changed no defaults.

As with ``attr.s()``: ``attr.ib()`` is not going anywhere.
`669 <https://github.com/python-attrs/attrs/issues/669>`_


----
Links

Update beautifulsoup4 from 4.9.1 to 4.10.0.

Changelog

4.10.0

* This is the first release of Beautiful Soup to only support Python
3. I dropped Python 2 support to maintain support for newer versions
(58 and up) of setuptools. See:
https://github.com/pypa/setuptools/issues/2769 [bug=1942919]

* The behavior of methods like .get_text() and .strings now differs
depending on the type of tag. The change is visible with HTML tags
like <script>, <style>, and <template>. Starting in 4.9.0, methods
like get_text() returned no results on such tags, because the
contents of those tags are not considered 'text' within the document
as a whole.

But a user who calls script.get_text() is working from a different
definition of 'text' than a user who calls div.get_text()--otherwise
there would be no need to call script.get_text() at all. In 4.10.0,
the contents of (e.g.) a <script> tag are considered 'text' during a
get_text() call on the tag itself, but not considered 'text' during
a get_text() call on the tag's parent.

Because of this change, calling get_text() on each child of a tag
may now return a different result than calling get_text() on the tag
itself. That's because different tags now have different
understandings of what counts as 'text'. [bug=1906226] [bug=1868861]

* NavigableString and its subclasses now implement the get_text()
method, as well as the properties .strings and
.stripped_strings. These methods will either return the string
itself, or nothing, so the only reason to use this is when iterating
over a list of mixed Tag and NavigableString objects. [bug=1904309]

* The 'html5' formatter now treats attributes whose values are the
empty string as HTML boolean attributes. Previously (and in other
formatters), an attribute value must be set as None to be treated as
a boolean attribute. In a future release, I plan to also give this
behavior to the 'html' formatter. Patch by Isaac Muse. [bug=1915424]

* The 'replace_with()' method now takes a variable number of arguments,
and can be used to replace a single element with a sequence of elements.
Patch by Bill Chandos. [rev=605]

* Corrected output when the namespace prefix associated with a
namespaced attribute is the empty string, as opposed to
None. [bug=1915583]

* Performance improvement when processing tags that speeds up overall
tree construction by 2%. Patch by Morotti. [bug=1899358]

* Corrected the use of special string container classes in cases when a
single tag may contain strings with different containers; such as
the <template> tag, which may contain both TemplateString objects
and Comment objects. [bug=1913406]

* The html.parser tree builder can now handle named entities
found in the HTML5 spec in much the same way that the html5lib
tree builder does. Note that the lxml HTML tree builder doesn't handle
named entities this way. [bug=1924908]

* Added a second way to pass specify encodings to UnicodeDammit and
EncodingDetector, based on the order of precedence defined in the
HTML5 spec, starting at:
https://html.spec.whatwg.org/multipage/parsing.html#parsing-with-a-known-character-encoding

Encodings in 'known_definite_encodings' are tried first, then
byte-order-mark sniffing is run, then encodings in 'user_encodings'
are tried. The old argument, 'override_encodings', is now a
deprecated alias for 'known_definite_encodings'.

This changes the default behavior of the html.parser and lxml tree
builders, in a way that may slightly improve encoding
detection but will probably have no effect. [bug=1889014]

* Improve the warning issued when a directory name (as opposed to
the name of a regular file) is passed as markup into the BeautifulSoup
constructor. [bug=1913628]

4.9.3

* Implemented a significant performance optimization to the process of
searching the parse tree. Patch by Morotti. [bug=1898212]

4.9.2

* Fixed a bug that caused too many tags to be popped from the tag
stack during tree building, when encountering a closing tag that had
no matching opening tag. [bug=1880420]

* Fixed a bug that inconsistently moved elements over when passing
a Tag, rather than a list, into Tag.extend(). [bug=1885710]

* Specify the soupsieve dependency in a way that complies with
PEP 508. Patch by Mike Nerone. [bug=1893696]

* Change the signatures for BeautifulSoup.insert_before and insert_after
(which are not implemented) to match PageElement.insert_before and
insert_after, quieting warnings in some IDEs. [bug=1897120]
Links

Update colorama from 0.4.3 to 0.4.4.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update cycler from 0.10.0 to 0.11.0.

Changelog

0.11.0

This is the first Cycler feature release in some years. New features include:

* Added `Cycler.by_key`, which produces values by key (26)
* Added `Cycler.__contains__`, which adds support for `in` checks (34)
* Wheels now includes the LICENSE file (48)
* The sdist now includes the LICENSE (58) and tests (32)
* Cycler no longer supports Python 2. Supported versions of Python are 3.6 and above.
Links

Update decorator from 4.4.2 to 5.1.1.

Changelog

5.1.1

Sangwoo Shim contributed a fix so that cythonized functions can be decorated.
Brian McFee pointed out an issue in the `decorator_apply` example and
Wim Glenn pointed out that the "fix" in version 5.1 broke
`decorator.contextmanager` even more. Both issues are now solved.

5.1.0

Added a function `decoratorx` using the `FunctionMaker` and thus
preserving the signature of `__code__` objects. Then fixed three small bugs:
- Sphinx was printing a few warnings when building the documentation, as
signaled by Tomasz Kłoczko
- functions decorated with `decorator.contextmanager` were one-shot,
as discovered by Alex Pizarro.
- `decorator.decorator` was not passing the kwsyntax argument.

5.0.9

Fixed a test breaking PyPy. Restored support for Sphinx.

5.0.8

Made the decorator module more robust when decorating builtin functions
lacking dunder attributes, like `dict.__setitem__`.

5.0.7

The decorator module was not passing correctly the defaults inside the
`*args` tuple, thanks to Dan Shult for the fix. Also fixed some mispellings
in the documentation and integrated codespell in the CI, thanks to 
Christian Clauss.

5.0.6

The decorator module was not copying the __module__ attribute anymore.
Thanks to Nikolay Markov for the notice.

5.0.5

Dropped support for Python < 3.5 with a substantial simplification of
the code base (now building a decorator does not require calling "exec").
Added a way to mimic functools.wraps-generated decorators.
Ported the Continuous Integration from Travis to GitHub.
Links

Update eppy from 0.5.52 to 0.5.57.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update kiwisolver from 1.2.0 to 1.3.2.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update lxml from 4.5.2 to 4.8.0.

Changelog

4.8.0

==================

Features added
--------------

* GH337: Path-like objects are now supported throughout the API instead of just strings.
Patch by Henning Janssen.

* The ``ElementMaker`` now supports ``QName`` values as tags, which always override
the default namespace of the factory.

Bugs fixed
----------

* GH338: In lxml.objectify, the XSI float annotation "nan" and "inf" were spelled in
lower case, whereas XML Schema datatypes define them as "NaN" and "INF" respectively.
Patch by Tobias Deiminger.

Other changes
-------------

* Built with Cython 0.29.28.

4.7.1

==================

Features added
--------------

* Chunked Unicode string parsing via ``parser.feed()`` now encodes the input data
to the native UTF-8 encoding directly, instead of going through ``Py_UNICODE`` /
``wchar_t`` encoding first, which previously required duplicate recoding in most cases.

Bugs fixed
----------

* The standard namespace prefixes were mishandled during "C14N2" serialisation on Python 3.
See https://mail.python.org/archives/list/lxmlpython.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/

* ``lxml.objectify`` previously accepted non-XML numbers with underscores (like "1_000")
as integers or float values in Python 3.6 and later. It now adheres to the number
format of the XML spec again.

* LP1939031: Static wheels of lxml now contain the header files of zlib and libiconv
(in addition to the already provided headers of libxml2/libxslt/libexslt).

Other changes
-------------

* Wheels include libxml2 2.9.12+ and libxslt 1.1.34 (also on Windows).

4.7.0

==================

* Release retracted due to missing files in lxml/includes/.

4.6.5

==================

Bugs fixed
----------

* A vulnerability (GHSL-2021-1038) in the HTML cleaner allowed sneaking script
content through SVG images (CVE-2021-43818).

* A vulnerability (GHSL-2021-1037) in the HTML cleaner allowed sneaking script
content through CSS imports and other crafted constructs (CVE-2021-43818).

4.6.4

==================

Features added
--------------

* GH317: A new property ``system_url`` was added to DTD entities.
Patch by Thirdegree.

* GH314: The ``STATIC_*`` variables in ``setup.py`` can now be passed via env vars.
Patch by Isaac Jurado.

4.6.3

==================

Bugs fixed
----------

* A vulnerability (CVE-2021-28957) was discovered in the HTML Cleaner by Kevin Chung,
which allowed JavaScript to pass through.  The cleaner now removes the HTML5
``formaction`` attribute.

4.6.2

==================

Bugs fixed
----------

* A vulnerability (CVE-2020-27783) was discovered in the HTML Cleaner by Yaniv Nizry,
which allowed JavaScript to pass through.  The cleaner now removes more sneaky
"style" content.

4.6.1

==================

Bugs fixed
----------

* A vulnerability was discovered in the HTML Cleaner by Yaniv Nizry, which allowed
JavaScript to pass through.  The cleaner now removes more sneaky "style" content.

4.6.0

==================

Features added
--------------

* GH310: ``lxml.html.InputGetter`` supports ``__len__()`` to count the number of input fields.
Patch by Aidan Woolley.

* ``lxml.html.InputGetter`` has a new ``.items()`` method to ease processing all input fields.

* ``lxml.html.InputGetter.keys()`` now returns the field names in document order.

* GH-309: The API documentation is now generated using ``sphinx-apidoc``.
Patch by Chris Mayo.

Bugs fixed
----------

* LP1869455: C14N 2.0 serialisation failed for unprefixed attributes
when a default namespace was defined.

* ``TreeBuilder.close()`` raised ``AssertionError`` in some error cases where it
should have raised ``XMLSyntaxError``.  It now raises a combined exception to
keep up backwards compatibility, while switching to ``XMLSyntaxError`` as an
interface.
Links

Update matplotlib from 3.3.0 to 3.5.1.

Changelog

3.5.1

This is the first bugfix release of the 3.5.x series.

This release contains several critical bug-fixes:

* fix installation issues when setting a default backend
* fix `add_lines` on horizontal colorbars
* fix `streamplot` with start points on right or top edge
* fix colorbars with boundaries or `NoNorm`
* fix colorbars with negative contours
* fix colorbars with tight layout
* fix setting Axis label alignment to center
* fix subfigure tight bounding box
* fix subplot parameter window on macosx backend
* fix unit handling in `Collections.set_offsets`
* fix unyt integration in `errorbar`
* re-display date offset in `ConciseDataFormatter` after zoom
* reduce `do_3d_projection` deprecation warnings in external artists

3.4.3

This is the third bugfix release of the 3.4.x series.

This release contains several critical bug-fixes:

* Clarify deprecation of `Axes.figbox`
* Disable `MultiCursor` widget on `Axes` subplots which it is not tracking
* Don't simplify path in `LineCollection.get_segments`
* Fix DPI in subfigures, affecting tick spacing, and scatter marker size
* Fix broken EPS output when using Type 42 STIX fonts
* Fix change in tick behaviour when calling `Axes.clear`
* Fix class docstrings for `Norm`s created from `Scale`s
* Fix compatibility with NumPy 1.21.0
* Fix crash on broken TrueType fonts
* Fix incorrect hits from `Path.intersects_path`
* Fix leak if affine_transform is passed invalid vertices
* Fix legends of `stackplot` with `edgecolors='face'`
* Fix plot directive when building in parallel
* Fix `supxlabel` and `supylabel` behaviour in constrained layout
* Fix tests with latest Inkscape and Ghostscript
* Improve `DateFormatter` styling for month names when `usetex=True`
* Re-disable autoscaling after interactive zoom
* Work around bug in Pillow 8.3.0

3.4.2

This is the second bugfix release of the 3.4.x series.

This release contains several critical bug-fixes:

* Generate wheels usable on older PyPy7.3.{0,1}
* Fix compatibility with Python 3.10
* Add `subplot_mosaic` Axes in the order the user gave them to us
* Correctly handle 'none' *facecolors* in `do_3d_projection`
* Ensure that Matplotlib is importable even if there's no HOME
* Fix `CenteredNorm` with *halfrange*
* Fix `bar_label` for bars with NaN values
* Fix clip paths when zoomed such that they are outside the figure
* Fix creation of `RangeSlider` with *valinit*
* Fix handling of "d" glyph in backend_ps, fixing EPS output
* Fix handling of datetime coordinates in `pcolormesh` with Pandas
* Fix processing of some `errorbar` arguments
* Fix removal of shared polar Axes
* Fix resetting grid visibility
* Fix subfigure indexing error and tight bbox
* Fix textbox cursor color
* Fix TkAgg event loop error on window close
* Ignore errors for sip with no setapi (Qt4Agg import errors)

3.4.1

This is the first bugfix release of the 3.4.x series.

This release contains several critical bug-fixes:

* fix errorbar when specifying fillstyle
* fix Inkscape cleanup at exit on Windows for tests
* fix legends of colour-mapped scatter plots
* fix positioning of annotation fancy arrows
* fix size and color rendering for 3D scatter plots
* fix suptitle manual positioning when using constrained layout
* respect antialiasing settings in cairo backends as well

3.4.0

Highlights of this release include:

- Figure and Axes creation / management
 - New subfigure functionality
 - Single-line string notation for `subplot_mosaic`
 - Changes to behavior of Axes creation methods (`gca`, `add_axes`, `add_subplot`)
 - `add_subplot`/`add_axes` gained an *axes_class* parameter
 - Subplot and subplot2grid can now work with constrained layout
- Plotting methods
 - `axline` supports transform parameter
 - New automatic labeling for bar charts
 - A list of hatches can be specified to `bar` and `barh`
 - Setting `BarContainer` orientation
 - Contour plots now default to using `ScalarFormatter`
 - `Axes.errorbar` cycles non-color properties correctly
 - `errorbar` *errorevery* parameter matches *markevery*
 - `hexbin` supports data reference for *C* parameter
 - Support callable for formatting of Sankey labels
 - `Axes.spines` access shortcuts
 - New `stairs` method and `StepPatch` artist
 - Added *orientation* parameter for stem plots
 - Angles on Bracket arrow styles
 - `TickedStroke` patheffect
- Colors and colormaps
 - Collection color specification and mapping
 - Transparency (alpha) can be set as an array in collections
 - pcolormesh has improved transparency handling by enabling snapping
 - IPython representations for Colormap objects
 - `Colormap.set_extremes` and `Colormap.with_extremes`
 - Get under/over/bad colors of Colormap objects
 - New `cm.unregister_cmap` function
 - New `CenteredNorm` for symmetrical data around a center
 - New `FuncNorm` for arbitrary normalizations
 - GridSpec-based colorbars can now be positioned above or to the left of the main axes
- Titles, ticks, and labels
 - supxlabel and supylabel
 - Shared-axes `subplots` tick label visibility is now correct for top or left labels
 - An iterable object with labels can be passed to `Axes.plot`
- Fonts and Text
 - Text transform can rotate text direction
 - `matplotlib.mathtext` now supports *overset* and *underset* LaTeX symbols
 - *math_fontfamily* parameter to change `Text` font family
 - `TextArea`/`AnchoredText` support *horizontalalignment*
 - PDF supports URLs on Text artists
- rcParams improvements
 - New rcParams for dates: set converter and whether to use interval_multiples
 - Date formatters now respect *usetex* rcParam
 - Setting *image.cmap* to a Colormap
 - Tick and tick label colors can be set independently using rcParams
- 3D Axes improvements
 - Errorbar method in 3D Axes
 - Stem plots in 3D Axes
 - 3D Collection properties are now modifiable
 - Panning in 3D Axes
- Interactive tool improvements
 - New `RangeSlider` widget
 - Sliders can now snap to arbitrary values
 - Pausing and Resuming Animations
- Sphinx extensions
 - `plot_directive` *caption* option
- Backend-specific improvements
 - Consecutive rasterized draws now merged
 - Support raw/rgba frame format in `FFMpegFileWriter`
 - nbAgg/WebAgg support middle-click and double-click
 - nbAgg support binary communication
 - Indexed color for PNG images in PDF files when possible
 - Improved font subsettings in PDF/PS
 - Kerning added to strings in PDFs
 - Fully-fractional HiDPI in QtAgg
 - wxAgg supports fullscreen toggle

3.4.0rc3

This is the third release candidate for Matplotlib 3.4.0.

3.4.0rc2

This is the second release candidate for Matplotlib 3.4.0.

3.4.0rc1

This is the first release candidate for Matplotlib 3.4.0.

3.3.4

This is the fourth bugfix release of the 3.3.x series.

This release contains several critical bug-fixes:

* Fix WebAgg initialization.
* Fix parsing `QT_API` setting with mixed case.
* Fix build with link-time optimization disabled in environment.
* Fix test compatibility with NumPy 1.20.
* Fix test compatibility with pytest 6.2.

3.3.3

This is the third bugfix release of the 3.3.x series.

This release contains several critical bug-fixes:

* Fix calls to `Axis.grid` with argument `visible=True`.
* Fix fully masked `imshow`.
* Fix inconsistent color mapping in scatter for 3D plots.
* Fix notebook/nbAgg figures when used with ipywidgets in the same cell.
* Fix notebook/nbAgg/WebAgg on older (e.g., Firefox ESR) browsers.
* Fix pcolormesh with `datetime` coordinates.
* Fix performance regression with `datetime`s.
* Fix singular ticks with small log ranges.
* Fix timers/animations on wx and notebook backends.
* Remove certifi as a hard runtime dependency.

3.3.2

This is the second bugfix release of the 3.3.x series.

This release contains several critical bug-fixes:

* fix `Axis` scale on twinned `Axes`
* fix auto-close of `Figure`s in nbagg
* fix automatic title placement if `Axes` is off the `Figure`
* fix autoranging of log scales with barstacked histogram
* fix extra redraws when using `Button` or `TextBox` widgets
* fix imshow with `LogNorm` and large vmin/vmax ranges
* fix plotting Pandas `DataFrame` with string `MultiIndex`
* fix `scatter` with `marker=''`
* fix `scatter3d` color/linewidth re-projection
* fix state of mode buttons in TkAgg backends
* include license files in built distribution
* reduce Visual C++ runtime requirements on Windows

3.3.1

This is the first bugfix release of the 3.3.x series.

This release contains several critical bug-fixes:

* fix docstring import issues when running Python with optimization
* fix `hist` with categorical data, such as with Pandas
* fix install on BSD systems
* fix nbagg compatibility with Chrome 84+
* fix ordering of scatter marker size in 3D plots
* fix performance regression when plotting `Path`s
* fix reading from URL in `imread`
* fix several regressions with new date epoch handling
* fix some bad constrained and tight layout interactions with colorbars
* fix use of customized toolbars in TkAgg and WXAgg backends
Links

Update more-itertools from 8.4.0 to 8.12.0.

Changelog

8.12.0

------

* Bug fixes
 * Some documentation issues were fixed (thanks to Masynchin, spookylukey, astrojuanlu, and stephengmatthews)
 * Python 3.5 support was temporarily restored (thanks to mattbonnell)

8.11.0

------

* New functions
 * The :func:`before_and_after`, :func:`sliding_window`, and :func:`triplewise` recipes from the Python 3.10 docs were added
 * :func:`duplicates_everseen` and :func:`duplicates_justseen` (thanks to OrBin and DavidPratt512)
 * :func:`minmax` (thanks to Ricocotam, MSeifert04, and ruancomelli)
 * :func:`strictly_n` (thanks to hwalinga and NotWearingPants)
 * :func:`unique_in_window`

* Changes to existing functions
 * :func:`groupby_transform` had its type stub improved (thanks to mjk4 and ruancomelli)
 * :func:`is_sorted` now accepts a ``strict`` parameter (thanks to Dutcho and ruancomelli)
 * :func:`zip_broadcast` was updated to fix a bug (thanks to kalekundert)

8.10.0

------

* Changes to existing functions
 * The type stub for :func:`iter_except` was improved (thanks to  MarcinKonowalczyk)

* Other changes:
 *  Type stubs now ship with the source release (thanks to saaketp)
 *  The Sphinx docs were improved (thanks to MarcinKonowalczyk)

8.9.0

-----

* New functions
 * :func:`interleave_evenly` (thanks to mbugert)
 * :func:`repeat_each` (thanks to FinalSh4re)
 * :func:`chunked_even` (thanks to valtron)
 * :func:`map_if` (thanks to sassbalint)
 * :func:`zip_broadcast` (thanks to kalekundert)

* Changes to existing functions
 * The type stub for :func:`chunked` was improved (thanks to  PhilMacKay)
 * The type stubs for :func:`zip_equal` and `zip_offset` were improved (thanks to maffoo)
 * Building Sphinx docs locally was improved (thanks to MarcinKonowalczyk)

8.8.0

-----

* New functions
 * :func:`countable` (thanks to krzysieq)

* Changes to existing functions
 * :func:`split_before` was updated to handle empy collections (thanks to TiunovNN)
 * :func:`unique_everseen` got a performance boost (thanks to Numerlor)
 * The type hint for :func:`value_chain` was corrected (thanks to vr2262)

8.7.0

-----

* New functions
 * :func:`convolve` (from the Python itertools docs)
 * :func:`product_index`, :func:`combination_index`, and :func:`permutation_index` (thanks to N8Brooks)
 * :func:`value_chain` (thanks to jenstroeger)

* Changes to existing functions
 * :func:`distinct_combinations` now uses a non-recursive algorithm (thanks to  knutdrand)
 * :func:`pad_none` is now the preferred name for :func:`padnone`, though the latter remains available.
 * :func:`pairwise` will now use the Python standard library implementation on Python 3.10+
 * :func:`sort_together` now accepts a ``key`` argument (thanks to brianmaissy)
 * :func:`seekable` now has a ``peek`` method, and can indicate whether the iterator it's wrapping is exhausted (thanks to gsakkis)
 * :func:`time_limited` can now indicate whether its iterator has expired (thanks to roysmith)
 * The implementation of :func:`unique_everseen` was improved (thanks to plammens)

* Other changes:
 * Various documentation updates (thanks to cthoyt, Evantm, and cyphase)

8.6.0

-----

* New itertools
 * :func:`all_unique` (thanks to brianmaissy)
 * :func:`nth_product` and :func:`nth_permutation` (thanks to N8Brooks)

* Changes to existing itertools
 * :func:`chunked` and :func:`sliced` now accept a ``strict`` parameter (thanks to shlomif and jtwool)

* Other changes
 * Python 3.5 has reached its end of life and is no longer supported.
 * Python 3.9 is officially supported.
 * Various documentation fixes (thanks to timgates42)

8.5.0

-----

* New itertools
 * :func:`windowed_complete` (thanks to MarcinKonowalczyk)

* Changes to existing itertools:
 * The :func:`is_sorted` implementation was improved (thanks to cool-RR)
 * The :func:`groupby_transform` now accepts a ``reducefunc`` parameter.
 * The :func:`last` implementation was improved (thanks to brianmaissy)

* Other changes
 * Various documentation fixes (thanks to craigrosie, samuelstjean, PiCT0)
 * The tests for :func:`distinct_combinations` were improved (thanks to Minabsapi)
 * Automated tests now run on GitHub Actions. All commits now check:
     * That unit tests pass
     * That the examples in docstrings work
     * That test coverage remains high (using `coverage`)
     * For linting errors (using `flake8`)
     * For consistent style (using `black`)
     * That the type stubs work (using `mypy`)
     * That the docs build correctly (using `sphinx`)
     * That packages build correctly (using `twine`)
Links

Update numpy from 1.19.1 to 1.22.2.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update pluggy from 0.13.1 to 1.0.0.

Changelog

1.0.0

=========================

Deprecations and Removals
-------------------------

- `116 <https://github.com/pytest-dev/pluggy/issues/116>`_: Remove deprecated ``implprefix`` support.
Decorate hook implementations using an instance of HookimplMarker instead.
The deprecation was announced in release ``0.7.0``.


- `120 <https://github.com/pytest-dev/pluggy/issues/120>`_: Remove the deprecated ``proc`` argument to ``call_historic``.
Use ``result_callback`` instead, which has the same behavior.
The deprecation was announced in release ``0.7.0``.


- `265 <https://github.com/pytest-dev/pluggy/issues/265>`_: Remove the ``_Result.result`` property. Use ``_Result.get_result()`` instead.
Note that unlike ``result``, ``get_result()`` raises the exception if the hook raised.
The deprecation was announced in release ``0.6.0``.


- `267 <https://github.com/pytest-dev/pluggy/issues/267>`_: Remove official support for Python 3.4.


- `272 <https://github.com/pytest-dev/pluggy/issues/272>`_: Dropped support for Python 2.
Continue to use pluggy 0.13.x for Python 2 support.


- `308 <https://github.com/pytest-dev/pluggy/issues/308>`_: Remove official support for Python 3.5.


- `313 <https://github.com/pytest-dev/pluggy/issues/313>`_: The internal ``pluggy.callers``, ``pluggy.manager`` and ``pluggy.hooks`` are now explicitly marked private by a ``_`` prefix (e.g. ``pluggy._callers``).
Only API exported by the top-level ``pluggy`` module is considered public.


- `59 <https://github.com/pytest-dev/pluggy/issues/59>`_: Remove legacy ``__multicall__`` recursive hook calling system.
The deprecation was announced in release ``0.5.0``.



Features
--------

- `282 <https://github.com/pytest-dev/pluggy/issues/282>`_: When registering a hookimpl which is declared as ``hookwrapper=True`` but whose
function is not a generator function, a ``PluggyValidationError`` exception is
now raised.

Previously this problem would cause an error only later, when calling the hook.

In the unlikely case that you have a hookwrapper that *returns* a generator
instead of yielding directly, for example:

.. code-block:: python

   def my_hook_real_implementation(arg):
       print("before")
       yield
       print("after")


   hookimpl(hookwrapper=True)
   def my_hook(arg):
       return my_hook_implementation(arg)

change it to use ``yield from`` instead:

.. code-block:: python

   hookimpl(hookwrapper=True)
   def my_hook(arg):
       yield from my_hook_implementation(arg)


- `309 <https://github.com/pytest-dev/pluggy/issues/309>`_: Add official support for Python 3.9.
Links

Update py from 1.9.0 to 1.11.0.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update pyclipper from 1.2.0 to 1.3.0.post2.

Changelog

1.3.0.post2

Added wheels for Python 3.10, mac universal2 and linux aarch64 and pypy3 (44).
Fixed issue with automatic wheel deployment.
No code changes since 1.3.0.

1.3.0

Export `pyclipper.__version__` string (40).
Removed long-deprecated `SCALING_FACTOR` global variable.

1.2.1

No code changes in the main library. Only added wheels for Python 3.9.
Links

Update pyparsing from 2.4.7 to 3.0.7.

Changelog

3.0.7

---------------
- Fixed bug 345, in which delimitedList changed expressions in place
using expr.streamline(). Reported by Kim Gräsman, thanks!

- Fixed bug 346, when a string of word characters was passed to WordStart
or WordEnd instead of just taking the default value. Originally posted
as a question by Parag on StackOverflow, good catch!

- Fixed bug 350, in which White expressions could fail to match due to
unintended whitespace-skipping. Reported by Fu Hanxi, thank you!

- Fixed bug 355, when a QuotedString is defined with characters in its
quoteChar string containing regex-significant characters such as ., *,
?, [, ], etc.

- Fixed bug in ParserElement.run_tests where comments would be displayed
using with_line_numbers.

- Added optional "min" and "max" arguments to `delimited_list`. PR
submitted by Marius, thanks!

- Added new API change note in `whats_new_in_pyparsing_3_0_0`, regarding
a bug fix in the `bool()` behavior of `ParseResults`.

Prior to pyparsing 3.0.x, the `ParseResults` class implementation of
`__bool__` would return `False` if the `ParseResults` item list was empty,
even if it contained named results. In 3.0.0 and later, `ParseResults` will
return `True` if either the item list is not empty *or* if the named
results dict is not empty.

    generate an empty ParseResults by parsing a blank string with
    a ZeroOrMore
   result = Word(alphas)[...].parse_string("")
   print(result.as_list())
   print(result.as_dict())
   print(bool(result))

    add a results name to the result
   result["name"] = "empty result"
   print(result.as_list())
   print(result.as_dict())
   print(bool(result))

Prints:

   []
   {}
   False

   []
   {'name': 'empty result'}
   True

In previous versions, the second call to `bool()` would return `False`.

- Minor enhancement to Word generation of internal regular expression, to
emit consecutive characters in range, such as "ab", as "ab", not "a-b".

- Fixed character ranges for search terms using non-Western characters
in booleansearchparser, PR submitted by tc-yu, nice work!

- Additional type annotations on public methods.

3.0.6

---------------
- Added `suppress_warning()` method to individually suppress a warning on a
specific ParserElement. Used to refactor `original_text_for` to preserve
internal results names, which, while undocumented, had been adopted by
some projects.

- Fix bug when `delimited_list` was called with a str literal instead of a
parse expression.

3.0.5

---------------
- Added return type annotations for `col`, `line`, and `lineno`.

- Fixed bug when `warn_ungrouped_named_tokens_in_collection` warning was raised
when assigning a results name to an `original_text_for` expression.
(Issue 110, would raise warning in packaging.)

- Fixed internal bug where ParserElement.streamline() would not return self if
already streamlined.

- Changed run_tests() output to default to not showing line and column numbers.
If line numbering is desired, call with `with_line_numbers=True`. Also fixed
minor bug where separating line was not included after a test failure.

3.0.4

---------------
- Fixed bug in which `Dict` classes did not correctly return tokens as nested
`ParseResults`, reported by and fix identified by Bu Sun Kim, many thanks!!!

- Documented API-changing side-effect of converting `ParseResults` to use `__slots__`
to pre-define instance attributes. This means that code written like this (which
was allowed in pyparsing 2.4.7):

 result = Word(alphas).parseString("abc")
 result.xyz = 100

now raises this Python exception:

 AttributeError: 'ParseResults' object has no attribute 'xyz'

To add new attribute values to ParseResults object in 3.0.0 and later, you must
assign them using indexed notation:

 result["xyz"] = 100

You will still be able to access this new value as an attribute or as an
indexed item.

- Fixed bug in railroad diagramming where the vertical limit would count all
expressions in a group, not just those that would create visible railroad
elements.

3.0.3

---------------
- Fixed regex typo in `one_of` fix for `as_keyword=True`.

- Fixed a whitespace-skipping bug, Issue 319, introduced as part of the revert
of the `LineStart` changes. Reported by Marc-Alexandre Côté,
thanks!

- Added header column labeling > 100 in `with_line_numbers` - some input lines
are longer than others.

3.0.2

---------------
- Reverted change in behavior with `LineStart` and `StringStart`, which changed the
interpretation of when and how `LineStart` and `StringStart` should match when
a line starts with spaces. In 3.0.0, the `xxxStart` expressions were not
really treated like expressions in their own right, but as modifiers to the
following expression when used like `LineStart() + expr`, so that if there
were whitespace on the line before `expr` (which would match in versions prior
to 3.0.0), the match would fail.

3.0.0 implemented this by automatically promoting `LineStart() + expr` to
`AtLineStart(expr)`, which broke existing parsers that did not expect `expr` to
necessarily be right at the start of the line, but only be the first token
found on the line. This was reported as a regression in Issue 317.

In 3.0.2, pyparsing reverts to the previous behavior, but will retain the new
`AtLineStart` and `AtStringStart` expression classes, so that parsers can chose
whichever behavior applies in their specific instance. Specifically:

    matches expr if it is the first token on the line
    (allows for leading whitespace)
   LineStart() + expr

    matches only if expr is found in column 1
   AtLineStart(expr)

- Performance enhancement to `one_of` to always generate an internal `Regex`,
even if `caseless` or `as_keyword` args are given as `True` (unless explicitly
disabled by passing `use_regex=False`).

- `IndentedBlock` class now works with `recursive` flag. By default, the
results parsed by an `IndentedBlock` are grouped. This can be disabled by constructing
the `IndentedBlock` with `grouped=False`.

3.0.1

---------------
- Fixed bug where `Word(max=n)` did not match word groups less than length 'n'.
Thanks to Joachim Metz for catching this!

- Fixed bug where `ParseResults` accidentally created recursive contents.
Joachim Metz on this one also!

- Fixed bug where `warn_on_multiple_string_args_to_oneof` warning is raised
even when not enabled.

3.0.0

---------------
- A consolidated list of all the changes in the 3.0.0 release can be found in
`docs/whats_new_in_3_0_0.rst`.
(https://github.com/pyparsing/pyparsing/blob/master/docs/whats_new_in_3_0_0.rst)


Version 3.0.0.final -
---------------------
- Added support for python `-W` warning option to call `enable_all_warnings`() at startup.
Also detects setting of `PYPARSINGENABLEALLWARNINGS` environment variable to any non-blank
value. (If using `-Wd` for testing, but wishing to disable pyparsing warnings, add
`-Wi:::pyparsing`.)

- Fixed named results returned by `url` to match fields as they would be parsed
using `urllib.parse.urlparse`.

- Early response to `with_line_numbers` was positive, with some requested enhancements:
. added a trailing "|" at the end of each line (to show presence of trailing spaces);
 can be customized using `eol_mark` argument
. added expand_tabs argument, to control calling str.expandtabs (defaults to True
 to match `parseString`)
. added mark_spaces argument to support display of a printing character in place of
 spaces, or Unicode symbols for space and tab characters
. added mark_control argument to support highlighting of control characters using
 '.' or Unicode symbols, such as "␍" and "␊".

- Modified helpers `common_html_entity` and `replace_html_entity()` to use the HTML
entity definitions from `html.entities.html5`.

- Updated the class diagram in the pyparsing docs directory, along with the supporting
.puml file (PlantUML markup) used to create the diagram.

- Added global method `autoname_elements()` to call `set_name()` on all locally
defined `ParserElements` that haven't been explicitly named using `set_name()`, using
their local variable name. Useful for setting names on multiple elements when
creating a railroad diagram.

         a = pp.Literal("a")
         b = pp.Literal("b").set_name("bbb")
         pp.autoname_elements()

`a` will get named "a", while `b` will keep its name "bbb".

3.0.0rc2

------------------
- Added `url` expression to `pyparsing_common`. (Sample code posted by Wolfgang Fahl,
very nice!)

This new expression has been added to the `urlExtractorNew.py` example, to show how
it extracts URL fields into separate results names.

- Added method to `pyparsing_test` to help debugging, `with_line_numbers`.
Returns a string with line and column numbers corresponding to values shown
when parsing with expr.set_debug():

   data = """\
      A
         100"""
   expr = pp.Word(pp.alphanums).set_name("word").set_debug()
   print(ppt.with_line_numbers(data))
   expr[...].parseString(data)

prints:

             1
    1234567890
  1:   A
  2:      100
 Match word at loc 3(1,4)
      A
      ^
 Matched word -> ['A&#x2

@pyup-bot
Copy link
Collaborator Author

pyup-bot commented Apr 1, 2022

Closing this in favor of #236

@pyup-bot pyup-bot closed this Apr 1, 2022
@jamiebull1 jamiebull1 deleted the pyup-scheduled-update-2022-03-01 branch April 1, 2022 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant