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 weekly dependency update for week 05 #314

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

pyup-bot
Copy link
Contributor

Update aiohttp from 3.7.4 to 3.8.1.

Changelog

3.8.0

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

Features
--------

- Added a ``GunicornWebWorker`` feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return ``web.AppRunner`` object.
`2988 <https://github.com/aio-libs/aiohttp/issues/2988>`_
- Switch from ``http-parser`` to ``llhttp``
`3561 <https://github.com/aio-libs/aiohttp/issues/3561>`_
- Use Brotli instead of brotlipy
`3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_
- Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators.  Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode.  Note that Pure-Python
mode is significantly slower than compiled one.
`3828 <https://github.com/aio-libs/aiohttp/issues/3828>`_
- Make access log use local time with timezone
`3853 <https://github.com/aio-libs/aiohttp/issues/3853>`_
- Implemented ``readuntil`` in ``StreamResponse``
`4054 <https://github.com/aio-libs/aiohttp/issues/4054>`_
- FileResponse now supports ETag.
`4594 <https://github.com/aio-libs/aiohttp/issues/4594>`_
- Add a request handler type alias ``aiohttp.typedefs.Handler``.
`4686 <https://github.com/aio-libs/aiohttp/issues/4686>`_
- ``AioHTTPTestCase`` is more async friendly now.

For people who use unittest and are used to use :py:exc:`~unittest.TestCase`
it will be easier to write new test cases like the sync version of the :py:exc:`~unittest.TestCase` class,
without using the decorator `unittest_run_loop`, just `async def test_*`.
The only difference is that for the people using python3.7 and below a new dependency is needed, it is ``asynctestcase``.
`4700 <https://github.com/aio-libs/aiohttp/issues/4700>`_
- Add validation of HTTP header keys and values to prevent header injection.
`4818 <https://github.com/aio-libs/aiohttp/issues/4818>`_
- Add predicate to ``AbstractCookieJar.clear``.
Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only.
`4942 <https://github.com/aio-libs/aiohttp/issues/4942>`_
- Add keepalive_timeout parameter to web.run_app.
`5094 <https://github.com/aio-libs/aiohttp/issues/5094>`_
- Tracing for client sent headers
`5105 <https://github.com/aio-libs/aiohttp/issues/5105>`_
- Make type hints for http parser stricter
`5267 <https://github.com/aio-libs/aiohttp/issues/5267>`_
- Add final declarations for constants.
`5275 <https://github.com/aio-libs/aiohttp/issues/5275>`_
- Switch to external frozenlist and aiosignal libraries.
`5293 <https://github.com/aio-libs/aiohttp/issues/5293>`_
- Don't send secure cookies by insecure transports.

By default, the transport is secure if https or wss scheme is used.
Use `CookieJar(treat_as_secure_origin="http://127.0.0.1")` to override the default security checker.
`5571 <https://github.com/aio-libs/aiohttp/issues/5571>`_
- Always create a new event loop in ``aiohttp.web.run_app()``.
This adds better compatibility with ``asyncio.run()`` or if trying to run multiple apps in sequence.
`5572 <https://github.com/aio-libs/aiohttp/issues/5572>`_
- Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin.
`5585 <https://github.com/aio-libs/aiohttp/issues/5585>`_
- Added a ``socket_factory`` argument to ``BaseTestServer``.
`5844 <https://github.com/aio-libs/aiohttp/issues/5844>`_
- Add compression strategy parameter to enable_compression method.
`5909 <https://github.com/aio-libs/aiohttp/issues/5909>`_
- Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`.
`5927 <https://github.com/aio-libs/aiohttp/issues/5927>`_
- Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`.
`5930 <https://github.com/aio-libs/aiohttp/issues/5930>`_
- Added optional auto_decompress argument for HttpRequestParser
`5957 <https://github.com/aio-libs/aiohttp/issues/5957>`_
- Added support for HTTPS proxies to the extent CPython's
:py:mod:`asyncio` supports it -- by :user:`bmbouter`,
:user:`jborean93` and :user:`webknjaz`.
`5992 <https://github.com/aio-libs/aiohttp/issues/5992>`_
- Added ``base_url`` parameter to the initializer of :class:`~aiohttp.ClientSession`.
`6013 <https://github.com/aio-libs/aiohttp/issues/6013>`_
- Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`.
`6079 <https://github.com/aio-libs/aiohttp/issues/6079>`_
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
`6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_
- Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`.
`6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_


Bugfixes
--------

- Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition.
`2934 <https://github.com/aio-libs/aiohttp/issues/2934>`_
- Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop.
`3450 <https://github.com/aio-libs/aiohttp/issues/3450>`_
- Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
`4012 <https://github.com/aio-libs/aiohttp/issues/4012>`_
- Fixed HTTP client requests to honor ``no_proxy`` environment variables.
`4431 <https://github.com/aio-libs/aiohttp/issues/4431>`_
- Fix supporting WebSockets proxies configured via environment variables.
`4648 <https://github.com/aio-libs/aiohttp/issues/4648>`_
- Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
`4748 <https://github.com/aio-libs/aiohttp/issues/4748>`_
- Ensure a cleanup context is cleaned up even when an exception occurs during startup.
`4799 <https://github.com/aio-libs/aiohttp/issues/4799>`_
- Added a new exception type for Unix socket client errors which provides a more useful error message.
`4984 <https://github.com/aio-libs/aiohttp/issues/4984>`_
- Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
`5106 <https://github.com/aio-libs/aiohttp/issues/5106>`_
- Only depend on typing_extensions for Python <3.8
`5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_
- Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
`5192 <https://github.com/aio-libs/aiohttp/issues/5192>`_
- Fix cookies disappearing from HTTPExceptions.
`5233 <https://github.com/aio-libs/aiohttp/issues/5233>`_
- StaticResource prefixes no longer match URLs with a non-folder prefix. For example ``routes.static('/foo', '/foo')`` no longer matches the URL ``/foobar``. Previously, this would attempt to load the file ``/foo/ar``.
`5250 <https://github.com/aio-libs/aiohttp/issues/5250>`_
- Acquire the connection before running traces to prevent race condition.
`5259 <https://github.com/aio-libs/aiohttp/issues/5259>`_
- Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager``
`5329 <https://github.com/aio-libs/aiohttp/issues/5329>`_
- Ensure sending a zero byte file does not throw an exception (round 2)
`5380 <https://github.com/aio-libs/aiohttp/issues/5380>`_
- Set "text/plain" when data is an empty string in client requests.
`5392 <https://github.com/aio-libs/aiohttp/issues/5392>`_
- Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests.
`5403 <https://github.com/aio-libs/aiohttp/issues/5403>`_
- Include query parameters from `params` keyword argument in tracing `URL`.
`5432 <https://github.com/aio-libs/aiohttp/issues/5432>`_
- Fix annotations
`5466 <https://github.com/aio-libs/aiohttp/issues/5466>`_
- Fixed the multipart POST requests processing to always release file
descriptors for the ``tempfile.Temporaryfile``-created
``_io.BufferedRandom`` instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:`webknjaz`.
`5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_
- Fix 0 being incorrectly treated as an immediate timeout.
`5527 <https://github.com/aio-libs/aiohttp/issues/5527>`_
- Fixes failing tests when an environment variable <scheme>_proxy is set.
`5554 <https://github.com/aio-libs/aiohttp/issues/5554>`_
- Replace deprecated app handler design in ``tests/autobahn/server.py`` with call to ``web.run_app``; replace deprecated ``aiohttp.ws_connect`` calls in ``tests/autobahn/client.py`` with ``aiohttp.ClienSession.ws_connect``.
`5606 <https://github.com/aio-libs/aiohttp/issues/5606>`_
- Fixed test for ``HTTPUnauthorized`` that access the ``text`` argument. This is not used in any part of the code, so it's removed now.
`5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_
- Remove incorrect default from docs
`5727 <https://github.com/aio-libs/aiohttp/issues/5727>`_
- Remove external test dependency to http://httpbin.org
`5840 <https://github.com/aio-libs/aiohttp/issues/5840>`_
- Don't cancel current task when entering a cancelled timer.
`5853 <https://github.com/aio-libs/aiohttp/issues/5853>`_
- Added ``params`` keyword argument to ``ClientSession.ws_connect``. --  :user:`hoh`.
`5868 <https://github.com/aio-libs/aiohttp/issues/5868>`_
- Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread.
`5877 <https://github.com/aio-libs/aiohttp/issues/5877>`_
- Fix the error in handling the return value of `getaddrinfo`.
`getaddrinfo` will return an `(int, bytes)` tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
`--disable-ipv6` option but his system enable the ipv6.
`5901 <https://github.com/aio-libs/aiohttp/issues/5901>`_
- Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls
`5905 <https://github.com/aio-libs/aiohttp/issues/5905>`_
- Return ``None`` from ``request.if_modified_since``, ``request.if_unmodified_since``, ``request.if_range`` and ``response.last_modified`` when corresponding http date headers are invalid.
`5925 <https://github.com/aio-libs/aiohttp/issues/5925>`_
- Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`.
`6130 <https://github.com/aio-libs/aiohttp/issues/6130>`_
- Raise ``400: Content-Length can't be present with Transfer-Encoding`` if both ``Content-Length`` and ``Transfer-Encoding`` are sent by peer by both C and Python implementations
`6182 <https://github.com/aio-libs/aiohttp/issues/6182>`_


Improved Documentation
----------------------

- Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi``
`5326 <https://github.com/aio-libs/aiohttp/issues/5326>`_
- Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
`5725 <https://github.com/aio-libs/aiohttp/issues/5725>`_
- Documented that the HTTP client ``Authorization`` header is removed
on redirects to a different host or protocol.
`5850 <https://github.com/aio-libs/aiohttp/issues/5850>`_


Misc
----

- `3927 <https://github.com/aio-libs/aiohttp/issues/3927>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#5389 <https://github.com/aio-libs/aiohttp/issues/5389>`_, `#5457 <https://github.com/aio-libs/aiohttp/issues/5457>`_, `#5486 <https://github.com/aio-libs/aiohttp/issues/5486>`_, `#5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_, `#5515 <https://github.com/aio-libs/aiohttp/issues/5515>`_, `#5625 <https://github.com/aio-libs/aiohttp/issues/5625>`_, `#5635 <https://github.com/aio-libs/aiohttp/issues/5635>`_, `#5648 <https://github.com/aio-libs/aiohttp/issues/5648>`_, `#5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_, `#5890 <https://github.com/aio-libs/aiohttp/issues/5890>`_, `#5914 <https://github.com/aio-libs/aiohttp/issues/5914>`_, `#5932 <https://github.com/aio-libs/aiohttp/issues/5932>`_, `#6002 <https://github.com/aio-libs/aiohttp/issues/6002>`_, `#6045 <https://github.com/aio-libs/aiohttp/issues/6045>`_, `#6131 <https://github.com/aio-libs/aiohttp/issues/6131>`_, `#6156 <https://github.com/aio-libs/aiohttp/issues/6156>`_, `#6165 <https://github.com/aio-libs/aiohttp/issues/6165>`_, `#6166 <https://github.com/aio-libs/aiohttp/issues/6166>`_


----

3.7.4.post0

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

Misc
----

- Bumped upper bound of the ``chardet`` runtime dependency
to allow their v4.0 version stream.
`5366 <https://github.com/aio-libs/aiohttp/issues/5366>`_


----
Links

Update attrs from 19.2.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>`_


----

19.3.0

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

Changes
^^^^^^^

- Fixed ``auto_attribs`` usage when default values cannot be compared directly with ``==``, such as ``numpy`` arrays.
`585 <https://github.com/python-attrs/attrs/issues/585>`_


----
Links

Update flake8 from 3.7.8 to 4.0.1.

Changelog

3.9.2

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

You can view the `3.9.2 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix error message for ``E111`` in ``pycodestyle`` (See also :pull:`1328`,
:issue:`1327`).

Deprecations
~~~~~~~~~~~~

- ``indent_size_str`` is deprecated, use ``str(indent_size)`` instead (See
also :pull:`1328`, :issue:`1327`).


.. all links
.. _3.9.2 milestone:
 https://github.com/PyCQA/flake8/milestone/40

3.9.1

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

You can view the `3.9.1 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix codes being ignored by plugins utilizing ``extend_default_ignore`` (See
also :pull:`1317`)


.. all links
.. _3.9.1 milestone:
 https://github.com/PyCQA/flake8/milestone/38

3.9.0

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

You can view the `3.9.0 milestone`_ on GitHub for more details.

New Dependency Information
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Pyflakes has been updated to >= 2.3.0, < 2.4.0 (See also :issue:`1006`)

- pycodestyle has been updated to >= 2.7.0, < 2.8.0 (See also :issue:`1007`)

Deprecations
~~~~~~~~~~~~

- Drop support for python 3.4 (See also :issue:`1283`)

Features
~~~~~~~~

- Add ``--no-show-source`` option to disable ``--show-source`` (See also
:issue:`995`)

Bugs Fixed
~~~~~~~~~~

- Fix handling of ``crlf`` line endings when linting stdin (See also
:issue:`1002`)


.. all links
.. _3.9.0 milestone:
 https://github.com/pycqa/flake8/milestone/37

3.8.4

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

You can view the `3.8.4 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix multiprocessing errors on platforms without ``sem_open`` syscall.  (See
also :issue:`1282`)

- Fix skipping of physical checks on the last line of a file which does not
end in a newline (See also :issue:`997`)

.. all links
.. _3.8.4 milestone:
 https://github.com/pycqa/flake8/milestone/36

3.8.3

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

You can view the `3.8.3 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Also catch ``SyntaxError`` when tokenizing (See also :issue:`992`,
:issue:`747`)

- Fix ``--jobs`` default display in ``flake8 --help`` (See also :issue:`1272`,
:issue:`750`)

.. all links
.. _3.8.3 milestone:
 https://github.com/pycqa/flake8/milestone/35

3.8.2

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

You can view the `3.8.2 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Improve performance by eliminating unnecessary sort (See also :issue:`991`)

- Improve messaging of ``--jobs`` argument by utilizing ``argparse`` (See also
:issue:`1269`, :issue:`1110`)

- Fix file configuration options to be relative to the config passed on the
command line (See also :issue:`442`, :issue:`736`)

- Fix incorrect handling of ``--extend-exclude`` by treating its values as
files (See also :issue:`1271`, :issue:`738`)

.. all links
.. _3.8.2 milestone:
 https://github.com/pycqa/flake8/milestone/34

3.8.1

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

You can view the `3.8.1 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix ``--output-file`` (regression in 3.8.0) (See also :issue:`990`,
:issue:`725`)


.. all links
.. _3.8.1 milestone:
 https://github.com/pycqa/flake8/milestone/33

3.8.0

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

You can view the `3.8.0 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix logical checks which report positions out of bounds (See also
:issue:`987`, :issue:`723`)

- Fix ``--exclude=.*`` accidentally matching ``.`` and ``..`` (See also
:issue:`441`, :issue:`360`)

Deprecations
~~~~~~~~~~~~

- Add deprecation message for vcs hooks (See also :issue:`985`,
:issue:`296`)

3.8.0a2

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

You can view the `3.8.0 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Fix ``type="str"`` optparse options (See also :issue:`984`)

3.8.0a1

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

You can view the `3.8.0 milestone`_ on GitHub for more details.

New Dependency Information
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Remove dependency on ``entrypoints`` and add dependency on
``importlib-metadata`` (only for ``python<3.8``) (See also :issue:`1297`,
:issue:`297`)

- Pyflakes has been updated to >= 2.2.0, < 2.3.0 (See also :issue:`982`)

- pycodestyle has been updated to >= 2.6.0a1, < 2.7.0 (See also :issue:`983`)

Features
~~~~~~~~

- Add ``--extend-exclude`` option to add to ``--exclude`` without overwriting
(See also :issue:`1211`, :issue:`1091`)

- Move argument parsing from ``optparse`` to ``argparse`` (See also
:issue:`939`

- Group plugin options in ``--help`` (See also :issue:`1219`, :issue:`294`)

- Remove parsing of ``verbose`` from configuration files as it was not
consistently applied (See also :issue:`1245`, :issue:`245`)

- Remove parsing of ``output_file`` from configuration files as it was not
consistently applied (See also :issue:`1246`)

- Resolve configuration files relative to ``cwd`` instead of common prefix of
passed filenames.  You may need to change ``flake8 subproject`` to
``cd subproject && flake8 .`` (See also :issue:`952`)

- Officially support python3.8 (See also :issue:`963`)

- ``--disable-noqa`` now also disables `` flake8: noqa`` (See also
:issue:`1296`, :issue:`318`)

- Ensure that a missing file produces a ``E902`` error (See also :issue:`1262`,
:issue:`328`)

- `` noqa`` comments now apply to all of the lines in an explicit ``\``
continuation or in a line continued by a multi-line string (See also
:issue:`1266`, :issue:`621`)

Bugs Fixed
~~~~~~~~~~

- Fix ``--exclude=./t.py`` to only match ``t.py`` at the top level (See also
:issue:`1208`, :issue:`628`)

- Fix ``--show-source`` when a file is indented with tabs (See also
:issue:`1218`, :issue:`719`)

- Fix crash when ``--max-line-length`` is given a non-integer (See also
:issue:`939`, :issue:`704`)

- Prevent flip-flopping of ``indent_char`` causing extra ``E101`` errors (See
also :issue:`949`, `pycodestyle886`_)

- Only enable multiprocessing when the method is ``fork`` fixing issues
on macos with python3.8+ (See also :issue:`955`, :issue:`315`) (note: this
fix also landed in 3.7.9)

- ``noqa`` is now only handled by flake8 fixing specific-noqa.  Plugins
requesting this parameter will always receive ``False`` (See also
:issue:`1214`, :issue:`1104`)

- Fix duplicate loading of plugins when invoked via ``python -m flake8`` (See
also :issue:`1297`)

- Fix early exit when ``--exit-zero`` and ``--diff`` are provided and the diff
is empty (See also :issue:`970`)

- Consistently split lines when ``\f`` is present when reading from stdin (See
also :issue:`976`, :issue:`202`)

Deprecations
~~~~~~~~~~~~

- ``python setup.py flake8`` (setuptools integration) is now deprecated and
will be removed in a future version (See also :issue:`935`, :issue:`1098`)

- ``type='string'`` (optparse) types are deprecated, use
``type=callable`` (argparse) instead.  Support for ``type='string'`` will
be removed in a future version (See also :issue:`939`)

- ``%default`` in plugin option help text is deprecated, use ``%(default)s``
instead.  Support for ``%default`` will be removed in a future version (See
also :issue:`939`)

- optparse-style ``action='callback'`` setting for options is deprecated, use
argparse action classes instead.  This will be removed in a future version
(See also :issue:`939`)


.. all links
.. _3.8.0 milestone:
 https://github.com/pycqa/flake8/milestone/31

.. issue links
.. _pycodestyle886:
https://github.com/PyCQA/pycodestyle/issues/886

3.7.9

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

You can view the `3.7.9 milestone`_ on GitHub for more details.

Bugs Fixed
~~~~~~~~~~

- Disable multiprocessing when the multiprocessing method is ``spawn`` (such
as on macos in python3.8) (See also :issue:`956`, :issue:`315`)


.. all links
.. _3.7.9 milestone:
 https://github.com/pycqa/flake8/milestone/32
Links

Update ipdb from 0.12.2 to 0.13.9.

Changelog

0.13.9

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

- Fix again when `pyproject.toml` does not contain `tool` section.
[markab108]

0.13.8

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

- Fix when `pyproject.toml` does not contain `tool` section.
[anjos]

- Add the convenience function ``iex()``.
[alanbernstein]

0.13.7

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

- Do not instantiate IPython on import
[adamchainz]

0.13.6

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

- Fix broken parsing of pyproject.toml
[alexandrebarbaruiva]

0.13.5

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

- Add support for pyproject.toml as configuration file
[alexandrebarbaruiva]

- For users using python 3.4, install 6.0.0 <= IPython < 7.0.0,
for users using python 3.5, install 7.0.0 <= IPython < 7.10.0,
for users using python 3.6, install 7.10.0 <= IPython < 7.17.0,
for users using python>3.6, install IPython >= 7.17.0.
[d1618033]

0.13.4

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

- Add '-m' option
[mrmino]

0.13.3

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

- Allow runcall, runeval to also use set context value
[meowser]

- Add condition argument to set_trace
[alexandrebarbaruiva]

0.13.2

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

- Remove leftover debug code
[gotcha]

0.13.1

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

- Fix when no configuration file
[gotcha]

0.13.0

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

- Add option to set context via environment variable or configuration file
[alexandrebarbaruiva]

0.12.3

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

- Fix version in usage
[gotcha]
Links

Update ipython from 7.16.3 to 8.0.1.

Changelog

7.18.1

We do not use GitHub release anymore. Please see PyPI https://pypi.org/project/ipython/
Links

Update pytest from 5.2.1 to 6.2.5.

Changelog

6.2.5

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


Trivial/Internal Changes
------------------------

- :issue:`8494`: Python 3.10 is now supported.


- :issue:`9040`: Enable compatibility with ``pluggy 1.0`` or later.

6.2.4

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

Bug Fixes
---------

- :issue:`8539`: Fixed assertion rewriting on Python 3.10.

6.2.3

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

Bug Fixes
---------

- :issue:`8414`: pytest used to create directories under ``/tmp`` with world-readable
permissions. This means that any user in the system was able to read
information written by tests in temporary directories (such as those created by
the ``tmp_path``/``tmpdir`` fixture). Now the directories are created with
private permissions.

pytest used to silenty use a pre-existing ``/tmp/pytest-of-<username>`` directory,
even if owned by another user. This means another user could pre-create such a
directory and gain control of another user's temporary directory. Now such a
condition results in an error.

6.2.2

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

Bug Fixes
---------

- :issue:`8152`: Fixed "(<Skipped instance>)" being shown as a skip reason in the verbose test summary line when the reason is empty.


- :issue:`8249`: Fix the ``faulthandler`` plugin for occasions when running with ``twisted.logger`` and using ``pytest --capture=no``.

6.2.1

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

Bug Fixes
---------

- :issue:`7678`: Fixed bug where ``ImportPathMismatchError`` would be raised for files compiled in
the host and loaded later from an UNC mounted path (Windows).


- :issue:`8132`: Fixed regression in ``approx``: in 6.2.0 ``approx`` no longer raises
``TypeError`` when dealing with non-numeric types, falling back to normal comparison.
Before 6.2.0, array types like tf.DeviceArray fell through to the scalar case,
and happened to compare correctly to a scalar if they had only one element.
After 6.2.0, these types began failing, because they inherited neither from
standard Python number hierarchy nor from ``numpy.ndarray``.

``approx`` now converts arguments to ``numpy.ndarray`` if they expose the array
protocol and are not scalars. This treats array-like objects like numpy arrays,
regardless of size.

6.2.0

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

Breaking Changes
----------------

- :issue:`7808`: pytest now supports python3.6+ only.



Deprecations
------------

- :issue:`7469`: Directly constructing/calling the following classes/functions is now deprecated:

- ``_pytest.cacheprovider.Cache``
- ``_pytest.cacheprovider.Cache.for_config()``
- ``_pytest.cacheprovider.Cache.clear_cache()``
- ``_pytest.cacheprovider.Cache.cache_dir_from_config()``
- ``_pytest.capture.CaptureFixture``
- ``_pytest.fixtures.FixtureRequest``
- ``_pytest.fixtures.SubRequest``
- ``_pytest.logging.LogCaptureFixture``
- ``_pytest.pytester.Pytester``
- ``_pytest.pytester.Testdir``
- ``_pytest.recwarn.WarningsRecorder``
- ``_pytest.recwarn.WarningsChecker``
- ``_pytest.tmpdir.TempPathFactory``
- ``_pytest.tmpdir.TempdirFactory``

These have always been considered private, but now issue a deprecation warning, which may become a hard error in pytest 8.0.0.


- :issue:`7530`: The ``--strict`` command-line option has been deprecated, use ``--strict-markers`` instead.

We have plans to maybe in the future to reintroduce ``--strict`` and make it an encompassing flag for all strictness
related options (``--strict-markers`` and ``--strict-config`` at the moment, more might be introduced in the future).


- :issue:`7988`: The ``pytest.yield_fixture`` decorator/function is now deprecated. Use :func:`pytest.fixture` instead.

``yield_fixture`` has been an alias for ``fixture`` for a very long time, so can be search/replaced safely.



Features
--------

- :issue:`5299`: pytest now warns about unraisable exceptions and unhandled thread exceptions that occur in tests on Python>=3.8.
See :ref:`unraisable` for more information.


- :issue:`7425`: New :fixture:`pytester` fixture, which is identical to :fixture:`testdir` but its methods return :class:`pathlib.Path` when appropriate instead of ``py.path.local``.

This is part of the movement to use :class:`pathlib.Path` objects internally, in order to remove the dependency to ``py`` in the future.

Internally, the old :class:`Testdir <_pytest.pytester.Testdir>` is now a thin wrapper around :class:`Pytester <_pytest.pytester.Pytester>`, preserving the old interface.


- :issue:`7695`: A new hook was added, `pytest_markeval_namespace` which should return a dictionary.
This dictionary will be used to augment the "global" variables available to evaluate skipif/xfail/xpass markers.

Pseudo example

``conftest.py``:

.. code-block:: python

  def pytest_markeval_namespace():
      return {"color": "red"}

``test_func.py``:

.. code-block:: python

  pytest.mark.skipif("color == 'blue'", reason="Color is not red")
  def test_func():
      assert False


- :issue:`8006`: It is now possible to construct a :class:`~pytest.MonkeyPatch` object directly as ``pytest.MonkeyPatch()``,
in cases when the :fixture:`monkeypatch` fixture cannot be used. Previously some users imported it
from the private `_pytest.monkeypatch.MonkeyPatch` namespace.

Additionally, :meth:`MonkeyPatch.context <pytest.MonkeyPatch.context>` is now a classmethod,
and can be used as ``with MonkeyPatch.context() as mp: ...``. This is the recommended way to use
``MonkeyPatch`` directly, since unlike the ``monkeypatch`` fixture, an instance created directly
is not ``undo()``-ed automatically.



Improvements
------------

- :issue:`1265`: Added an ``__str__`` implementation to the :class:`~pytest.pytester.LineMatcher` class which is returned from ``pytester.run_pytest().stdout`` and similar. It returns the entire output, like the existing ``str()`` method.


- :issue:`2044`: Verbose mode now shows the reason that a test was skipped in the test's terminal line after the "SKIPPED", "XFAIL" or "XPASS".


- :issue:`7469` The types of builtin pytest fixtures are now exported so they may be used in type annotations of test functions.
The newly-exported types are:

- ``pytest.FixtureRequest`` for the :fixture:`request` fixture.
- ``pytest.Cache`` for the :fixture:`cache` fixture.
- ``pytest.CaptureFixture[str]`` for the :fixture:`capfd` and :fixture:`capsys` fixtures.
- ``pytest.CaptureFixture[bytes]`` for the :fixture:`capfdbinary` and :fixture:`capsysbinary` fixtures.
- ``pytest.LogCaptureFixture`` for the :fixture:`caplog` fixture.
- ``pytest.Pytester`` for the :fixture:`pytester` fixture.
- ``pytest.Testdir`` for the :fixture:`testdir` fixture.
- ``pytest.TempdirFactory`` for the :fixture:`tmpdir_factory` fixture.
- ``pytest.TempPathFactory`` for the :fixture:`tmp_path_factory` fixture.
- ``pytest.MonkeyPatch`` for the :fixture:`monkeypatch` fixture.
- ``pytest.WarningsRecorder`` for the :fixture:`recwarn` fixture.

Constructing them is not supported (except for `MonkeyPatch`); they are only meant for use in type annotations.
Doing so will emit a deprecation warning, and may become a hard-error in pytest 8.0.

Subclassing them is also not supported. This is not currently enforced at runtime, but is detected by type-checkers such as mypy.


- :issue:`7527`: When a comparison between :func:`namedtuple <collections.namedtuple>` instances of the same type fails, pytest now shows the differing field names (possibly nested) instead of their indexes.


- :issue:`7615`: :meth:`Node.warn <_pytest.nodes.Node.warn>` now permits any subclass of :class:`Warning`, not just :class:`PytestWarning <pytest.PytestWarning>`.


- :issue:`7701`: Improved reporting when using ``--collected-only``. It will now show the number of collected tests in the summary stats.


- :issue:`7710`: Use strict equality comparison for non-numeric types in :func:`pytest.approx` instead of
raising :class:`TypeError`.

This was the undocumented behavior before 3.7, but is now officially a supported feature.


- :issue:`7938`: New ``--sw-skip`` argument which is a shorthand for ``--stepwise-skip``.


- :issue:`8023`: Added ``'node_modules'`` to default value for :confval:`norecursedirs`.


- :issue:`8032`: :meth:`doClassCleanups <unittest.TestCase.doClassCleanups>` (introduced in :mod:`unittest` in Python and 3.8) is now called appropriately.



Bug Fixes
---------

- :issue:`4824`: Fixed quadratic behavior and improved performance of collection of items using autouse fixtures and xunit fixtures.


- :issue:`7758`: Fixed an issue where some files in packages are getting lost from ``--lf`` even though they contain tests that failed. Regressed in pytest 5.4.0.


- :issue:`7911`: Directories created by by :fixture:`tmp_path` and :fixture:`tmpdir` are now considered stale after 3 days without modification (previous value was 3 hours) to avoid deleting directories still in use in long running test suites.


- :issue:`7913`: Fixed a crash or hang in :meth:`pytester.spawn <_pytest.pytester.Pytester.spawn>` when the :mod:`readline` module is involved.


- :issue:`7951`: Fixed handling of recursive symlinks when collecting tests.


- :issue:`7981`: Fixed symlinked directories not being followed during collection. Regressed in pytest 6.1.0.


- :issue:`8016`: Fixed only one doctest being collected when using ``pytest --doctest-modules path/to/an/__init__.py``.



Improved Documentation
----------------------

- :issue:`7429`: Add more information and use cases about skipping doctests.


- :issue:`7780`: Classes which should not be inherited from are now marked ``final class`` in the API reference.


- :issue:`7872`: ``_pytest.config.argparsing.Parser.addini()`` accepts explicit ``None`` and ``"string"``.


- :issue:`7878`: In pull request section, ask to commit after editing changelog and authors file.



Trivial/Internal Changes
------------------------

- :issue:`7802`: The ``attrs`` dependency requirement is now >=19.2.0 instead of >=17.4.0.


- :issue:`8014`: `.pyc` files created by pytest's assertion rewriting now conform to the newer :pep:`552` format on Python>=3.7.
(These files are internal and only interpreted by pytest itself.)

6.1.2

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

Bug Fixes
---------

- :issue:`7758`: Fixed an issue where some files in packages are getting lost from ``--lf`` even though they contain tests that failed. Regressed in pytest 5.4.0.


- :issue:`7911`: Directories created by `tmpdir` are now considered stale after 3 days without modification (previous value was 3 hours) to avoid deleting directories still in use in long running test suites.



Improved Documentation
----------------------

- :issue:`7815`: Improve deprecation warning message for ``pytest._fillfuncargs()``.

6.1.1

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

Bug Fixes
---------

- :issue:`7807`: Fixed regression in pytest 6.1.0 causing incorrect rootdir to be determined in some non-trivial cases where parent directories have config files as well.


- :issue:`7814`: Fixed crash in header reporting when :confval:`testpaths` is used and contains absolute paths (regression in 6.1.0).

6.1.0

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

Breaking Changes
----------------

- :issue:`5585`: As per our policy, the following features which have been deprecated in the 5.X series are now
removed:

* The ``funcargnames`` read-only property of ``FixtureRequest``, ``Metafunc``, and ``Function`` classes. Use ``fixturenames`` attribute.

* ``pytest.fixture`` no longer supports positional arguments, pass all arguments by keyword instead.

* Direct construction of ``Node`` subclasses now raise an error, use ``from_parent`` instead.

* The default value for ``junit_family`` has changed to ``xunit2``. If you require the old format, add ``junit_family=xunit1`` to your configuration file.

* The ``TerminalReporter`` no longer has a ``writer`` attribute. Plugin authors may use the public functions of the ``TerminalReporter`` instead of accessing the ``TerminalWriter`` object directly.

* The ``--result-log`` option has been removed. Users are recommended to use the `pytest-reportlog <https://github.com/pytest-dev/pytest-reportlog>`__ plugin instead.


For more information consult :std:doc:`deprecations` in the docs.



Deprecations
------------

- :issue:`6981`: The ``pytest.collect`` module is deprecated: all its names can be imported from ``pytest`` directly.


- :issue:`7097`: The ``pytest._fillfuncargs`` function is deprecated. This function was kept
for backward compatibility with an older plugin.

It's functionality is not meant to be used directly, but if you must replace
it, use `function._request._fillfixtures()` instead, though note this is not
a public API and may break in the future.


- :issue:`7210`: The special ``-k '-expr'`` syntax to ``-k`` is deprecated. Use ``-k 'not expr'``
instead.

The special ``-k 'expr:'`` syntax to ``-k`` is deprecated. Please open an issue
if you use this and want a replacement.


- :issue:`7255`: The :func:`pytest_warning_captured <_pytest.hookspec.pytest_warning_captured>` hook is deprecated in favor
of :func:`pytest_warning_recorded <_pytest.hookspec.pytest_warning_recorded>`, and will be removed in a future version.


- :issue:`7648`: The ``gethookproxy()`` and ``isinitpath()`` methods of ``FSCollector`` and ``Package`` are deprecated;
use ``self.session.gethookproxy()`` and ``self.session.isinitpath()`` instead.
This should work on all pytest versions.



Features
--------

- :issue:`7667`: New ``--durations-min`` command-line flag controls the minimal duration for inclusion in the slowest list of tests shown by ``--durations``. Previously this was hard-coded to ``0.005s``.



Improvements
------------

- :issue:`6681`: Internal pytest warnings issued during the early stages of initialization are now properly handled and can filtered through :confval:`filterwarnings` or ``--pythonwarnings/-W``.

This also fixes a number of long standing issues: :issue:`2891`, :issue:`7620`, :issue:`7426`.


- :issue:`7572`: When a plugin listed in ``required_plugins`` is missing or an unknown config key is used with ``--strict-config``, a simple error message is now shown instead of a stacktrace.


- :issue:`7685`: Added two new attributes :attr:`rootpath <_pytest.config.Config.rootpath>` and :attr:`inipath <_pytest.config.Config.inipath>` to :class:`Config <_pytest.config.Config>`.
These attributes are :class:`pathlib.Path` versions of the existing :attr:`rootdir <_pytest.config.Config.rootdir>` and :attr:`inifile <_pytest.config.Config.inifile>` attributes,
and should be preferred over them when possible.


- :issue:`7780`: Public classes which are not designed to be inherited from are now marked :func:`final <typing.final>`.
Code which inherits from these classes will trigger a type-checking (e.g. mypy) error, but will still work in runtime.
Currently the ``final`` designation does not appear in the API Reference but hopefully will in the future.



Bug Fixes
---------

- :issue:`1953`: Fixed error when overwriting a parametrized fixture, while also reusing the super fixture value.

.. code-block:: python

    conftest.py
   import pytest


   pytest.fixture(params=[1, 2])
   def foo(request):
       return request.param


    test_foo.py
   import pytest


   pytest.fixture
   def foo(foo):
       return foo * 2


- :issue:`4984`: Fixed an internal error crash with ``IndexError: list index out of range`` when
collecting a module which starts with a decorated function, the decorator
raises, and assertion rewriting is enabled.


- :issue:`7591`: pylint shouldn't complain anymore about unimplemented abstract methods when inheriting from :ref:`File <non-python tests>`.


- :issue:`7628`: Fixed test collection when a full path without a drive letter was passed to pytest on Windows (for example ``\projects\tests\test.py`` instead of ``c:\projects\tests\pytest.py``).


- :issue:`7638`: Fix handling of command-line options that appear as paths but trigger an OS-level syntax error on Windows, such as the options used internally by ``pytest-xdist``.


- :issue:`7742`: Fixed INTERNALERROR when accessing locals / globals with faulty ``exec``.



Improved Documentation
----------------------

- :issue:`1477`: Removed faq.rst and its reference in contents.rst.



Trivial/Internal Changes
------------------------

- :issue:`7536`: The internal ``junitxml`` plugin has rewritten to use ``xml.etree.ElementTree``.
The order of attributes in XML elements might differ. Some unneeded escaping is
no longer performed.


- :issue:`7587`: The dependency on the ``more-itertools`` package has been removed.


- :issue:`7631`: The result type of :meth:`capfd.readouterr() <_pytest.capture.CaptureFixture.readouterr>` (and similar) is no longer a namedtuple,
but should behave like one in all respects. This was done for technical reasons.


- :issue:`7671`: When collecting tests, pytest finds test classes and functions by examining the
attributes of python objects (modules, classes and instances). To speed up this
process, pytest now ignores builtin attributes (like ``__class__``,
``__delattr__`` and ``__new__``) without consulting the :confval:`python_classes` and
:confval:`python_functions` configuration options and without passing them to plugins
using the :func:`pytest_pycollect_makeitem <_pytest.hookspec.pytest_pycollect_makeitem>` hook.

6.0.2

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

Bug Fixes
---------

- :issue:`7148`: Fixed ``--log-cli`` potentially causing unrelated ``print`` output to be swallowed.


- :issue:`7672`: Fixed log-capturing level restored incorrectly if ``caplog.set_level`` is called mo

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.

1 participant