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

Support for Python 3.4 unittest subtests #1367

Closed
PiDelport opened this Issue Feb 9, 2016 · 32 comments

Comments

@PiDelport
Copy link

PiDelport commented Feb 9, 2016

Unittest in Python 3.4 added support for subtests, a lightweight mechanism for recording parameterised test results.

At the moment, pytest does not support this functionality: when a test that uses subTest() is run with pytest, it simply stops at and reports the first failure.

Pytest already supports its own, pytest-specific parametrizing mechanism, but it would be convenient if the pytest runner also supports the standard library's subTest() functionality.

@PiDelport

This comment has been minimized.

Copy link
Author

PiDelport commented Feb 9, 2016

There's some relevant but old discussion on the testing-in-python mailing list: "unittest subtests" (January 2013)

@RonnyPfannschmidt

This comment has been minimized.

Copy link
Member

RonnyPfannschmidt commented Feb 9, 2016

It's important to note that pytest parametrize and subtests are fundamentally completely different

@The-Compiler

This comment has been minimized.

Copy link
Member

The-Compiler commented Aug 5, 2016

While this is a nice feature, it shouldn't block 3.0. I also think this would be some more serious work due to pytest's separation of collection/running, so I'm removing the milestone here.

@aksenov007

This comment has been minimized.

Copy link

aksenov007 commented Mar 19, 2017

Any updates? Any plans to add support of this feature in nearest months?

@The-Compiler

This comment has been minimized.

Copy link
Member

The-Compiler commented Mar 19, 2017

@aksenov007 As far as I know, nobody is working on it currently - though a PR for it would certainly be appreciated! 😉

@shreyashah

This comment has been minimized.

Copy link

shreyashah commented Oct 18, 2017

Any idea if subtest feature is supported in pytest? It is an important feature to have.

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Oct 19, 2017

@shreyashah pytest supports parametrization and in general is a perfect replacement for a test using subtest, but it has a few differences in implementation and philosophy.

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Oct 19, 2017

I thought this days that we could use a mechanism similar to what pytest-rerunfailures does, where it would be probably implemented by a fixture:

def test(subtests):
    for i in range(10):
        with subtests.test():
            assert i % 2 == 0

The fixture would trap assertion errors and trigger extra pytest_runtest_logreport for each error. Of course the devil is in the details, but it is an idea.

@shreyashah

This comment has been minimized.

Copy link

shreyashah commented Nov 10, 2017

@nicoddemus : Thank you for the reply. I understand the pytest's parameterization feature, it is indeed a great feature but still that doesn't solve the purpose of not having subtests. Like you mentioned, I want to trap the error until all the subtests finish and finally pop up the error/or raise the first encountered exception at the end of test case. This helps when a test wants to check multiple aspects of a feature and all those aspects have to be inside one test case in form of subtests or steps

@shreyashah

This comment has been minimized.

Copy link

shreyashah commented Nov 10, 2017

I will look into the implementation of pytest-rerunfailures to see if i can reuse some logic to implement this.Thanks again.

@ktosiek

This comment has been minimized.

Copy link

ktosiek commented Nov 10, 2017

@shreyashah

This comment has been minimized.

Copy link

shreyashah commented Nov 10, 2017

I meant of collecting the errors and showing them at the end is with respect to each testcase. For example: if a test case has 4 subtests or 4 steps in it, with the current behavior, if subtest/step 2 fails, then step3 and 4 will never be executed since the test case aborted from step2's failure/exception.
My goal is to be able to execute all the steps/subtests even if there is an intermediate step failure. We can store this intermediate exception/failure and report it at the end when all subtests/steps are executed and mark the test case as fail because there was a step failure

@fruch

This comment has been minimized.

Copy link

fruch commented Nov 10, 2017

when going outside the scope of pure unit testing.
I.e. integration test or acceptance tests.

in cases where the setup is really time consuming. testing on android/ios real devices or other embedded devices, when you can scale your tests with just throwing cpus from AWS on it.

those type of things is highly needed, for accurate reporting where what failed.

we haves lots of those type of test, and I'll love to see py.test blessed way to address it.

I can help with trying any suggestions, and also with reviewing from a users POV.

@The-Compiler

This comment has been minimized.

Copy link
Member

The-Compiler commented Nov 10, 2017

FWIW there's also pytest-assume.

edit: Whoops, sorry, @ktosiek already mentioned that.

@fruch

This comment has been minimized.

Copy link

fruch commented Nov 10, 2017

pytest-assume looks nice, but what about exceptions ?
we have lots of helper code that uses asserts and other code that can raise ones, for example connection timeouts and such.

I think this alone isn't enough...

@hartmans

This comment has been minimized.

Copy link

hartmans commented Nov 30, 2018

I need support for subtests or something like them because of a distributed test environment. I have a controller that goes and sets up an entire collection ofVMs, networking, and potentially even physical hardware. Then the controller runs a series of tests on some nodes in the hardware and would like to collect results from these interior tests.
One approach I could use is to write a custom collector, and during the setup phase do the environment setup.
I don't really like this approach for a couple of reasons:

  • The controller needs to be able to enumerate all the tests. In some cases that requires I keep the software under test and the controller more in sync than I like. Alternatively I'd need to be able to guarantee that the environment on the controller machine was sufficient to run all the potential tests at least enough to collect them; that's also not something I prefer. I could go set up the environment in the collect phase, but that's very expensive in some cases and something I'd like to avoid. So, I think I'd rather be able to Report results that are not enumerated during the collection phase

  • I definitely do not want to run the tests in the runtest hook of the Items. I want to go ask the node under test to go run a bunch of tests and come back with results. I don't want to give it tests as a one-off for each test. I don't know if a Collector can have a nontrivial runtest hook; if so, that would be a work around for this.

  • Even if I was able to run the tests in the runtest hook of the controller, I think that would make things a bit complicated. It'd be fine if things really were as simple as go set up the environment, run test series alpha on node 1 and series beta on node 2. But it might be more like set up environment, run alpha on node 1, adjust the environment, make some assertions that can only be made from outside of the systems under test, run beta on node 2. So, I actually think I want the user to be able to write supertests that collect a bunch of subtest results from the distributed systems and report those results.

I've considered pytest-xdist and it seems like the wrong direction in a number of ways. It seems targeted for a different problem than I'm solving, and while a big enough hammer can pound square nails into round holes, that doesn't make it a good thing to do so.

So, I really do think I want something that looks a lot like subtests.
But it doesn't seem very hard to get what I want. As a simple test I did:

import pytest
import _pytest.runner as runner

def test_foo(request):
    n = pytest.Item("bar", parent = request.node)
    n.runtest = lambda *x: True
    res =     runner.call_and_report(n, when = "call", log = True)

That seems to log an interior successful result inside test_foo.
I'm violating a couple invariants:

  • I've created a non-terminal Item

  • I've created nodes outside of the collection process.

And yet, it seems like writing a subtest_pass and subtest_fail function that took a request, name and optional exception and did something like the above would give me over 90% of what I need.

I don't get to select subtest by keyword or exclude them.
I think this might fail horribly with xdist.
But I think something relatively simple like the above would meet my needs and those of several of the others who commented.
I don't need help moving forward; I'm commenting here to seek input on pitfalls I may have missed and on how much of the use cases people hav this covers.

@RonnyPfannschmidt

This comment has been minimized.

Copy link
Member

RonnyPfannschmidt commented Nov 30, 2018

That ins should habe gone to a New issue or the ml

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Dec 1, 2018

I've decided to give my idea a spin, it was surprisingly easy (and made possible only due to the recent refactorings by @RonnyPfannschmidt to CallInfo):

# conftest.py
from contextlib import contextmanager
from time import time

import attr

import pytest
from _pytest._code import ExceptionInfo
from _pytest.runner import CallInfo


@pytest.fixture
def subtests(request):
    yield SubTests(request.node.ihook, request.node)


@attr.s
class SubTests:
    
    ihook = attr.ib()
    item = attr.ib()

    @contextmanager
    def test(self):
        start = time()
        exc_info = None
        try:
            yield
        except Exception:
            exc_info = ExceptionInfo.from_current()
        stop = time()
        call_info = CallInfo(None, exc_info, start, stop, when='call')
        report = self.ihook.pytest_runtest_makereport(item=self.item, call=call_info)
        self.ihook.pytest_runtest_logreport(report=report)

Using this test case:

# test.py
def test(subtests):
    for i in range(5):
        with subtests.test():
            assert i % 2 == 0

Produces:

======================== test session starts ========================
...
collected 1 item

.tmp\subtests\test.py .F.F..                                   [100%]

============================= FAILURES ==============================
_______________________________ test ________________________________

subtests = SubTests(ihook=<pluggy.hooks._HookRelay object at 0x00000181619A6E10>, item=<Function test>)

    def test(subtests):
        for i in range(5):
            with subtests.test():
>               assert i % 2 == 0
E               assert (1 % 2) == 0

.tmp\subtests\test.py:7: AssertionError
_______________________________ test ________________________________

subtests = SubTests(ihook=<pluggy.hooks._HookRelay object at 0x00000181619A6E10>, item=<Function test>)

    def test(subtests):
        for i in range(5):
            with subtests.test():
>               assert i % 2 == 0
E               assert (3 % 2) == 0

.tmp\subtests\test.py:7: AssertionError
================ 2 failed, 4 passed in 0.06 seconds =================

While it was simple, I see two problems:

  • I can't seem to be able to customize the node id displayed, so it is not easy to distinguish each each subtest invocation.

  • We have 6 reports, 5 for the subtests and one for the other test.

Also there's the question how this will play with other plugins (xdist works fine).

@RonnyPfannschmidt do you see other problems with the implementation? What's your opinion?

@RonnyPfannschmidt

This comment has been minimized.

Copy link
Member

RonnyPfannschmidt commented Dec 1, 2018

We should introduce a new report type, subtests in their first iteration are fundamentally different ffrom tests

@dmwyatt

This comment has been minimized.

Copy link

dmwyatt commented Dec 2, 2018

I might be wrong on this, because we're just considering switching over to pytest from unittest so I don't yet understand everything about pytest...

But, it looks like the recent comments have been more about implementing subtest-like features in pytest and not about the original point of this issue which is supporting running unittest.TestCase tests that use subtests. (Though, I can envision a system where pytest has to implement its own subtest functionality first. Like I said, I don't understand the details of pytest yet)

Anyway, I just wanted to comment in case people were getting off-track of the original purpose of this issue.

Just to highlight a reason for supporting unittest.TestCase subtests:

We have a couple thousands tests implementing unittest.TestCase and almost all of them make use of subtests. The best and most feasible way for us to migrate over to pytest is by taking advantage of it's ability to run unittest.TestCase tests, and if it won't work with subtests we just can't use it at all.

@fruch

This comment has been minimized.

Copy link

fruch commented Dec 2, 2018

I agree with @dmwyatt having pytest to support unittest subtests is the goal here. luckily for us all our tests started as py.test. and I'm really excited that this is gaining traction again.

@fruch

This comment has been minimized.

Copy link

fruch commented Dec 2, 2018

As for the report also for the main test, I think that's how unittest subtests also behaves (or it least sounds reasonable to me). as for id/names, we not title them the same way we do parameterized tests I.e. test_01[subtest title]

@RonnyPfannschmidt

This comment has been minimized.

Copy link
Member

RonnyPfannschmidt commented Dec 2, 2018

well, the thing is - to support subtests sanely pytest needs at least a basic mechanism for reporting them as well

else it would just be pretended

@nicoddemus nicoddemus added this to the 4.4 milestone Feb 25, 2019

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Feb 25, 2019

Thinking about this a bit further, I believe we should use a separate hook, say pytest_runtest_logreport_subtest besides using a separate report type. This will ensure we don't break other plugins. Then it is a matter of implementing the hook in terminal and make sure xdist transfer the call from worker to master.

What do you think @RonnyPfannschmidt?

@RonnyPfannschmidt

This comment has been minimized.

Copy link
Member

RonnyPfannschmidt commented Feb 25, 2019

lets mark the hook experimental and see where it goes, im not going to dig deeper into it anytime soon as im currently not active

nicoddemus added a commit to nicoddemus/pytest that referenced this issue Mar 19, 2019

nicoddemus added a commit to nicoddemus/pytest that referenced this issue Mar 19, 2019

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Mar 20, 2019

For those watching this issue: #4920 and https://github.com/pytest-dev/pytest-subtests will add both subTest() support and a new subtests fixture. 🎉

An external plugin is a better approach here IMO because it allows it make more frequent iterations on the details and mature outside of pytest's release cycle. After the plugin matures, we can consider introducing it into the core.

It will be ready for consumption after the 4.4 release. 👍

@PiDelport

This comment has been minimized.

Copy link
Author

PiDelport commented Mar 20, 2019

@nicoddemus: Awesome, thank you for letting us know! ☕️

@fruch

This comment has been minimized.

Copy link

fruch commented Mar 24, 2019

@nicoddemus this is nice, does it play nice with the junit-xml output ? i.e. those subtests looks like regular tests in reports ?

@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Mar 24, 2019

Yes, given this file:

from unittest import TestCase, main

class T(TestCase):

    def test_foo(self):
        for i in range(5):
            with self.subTest(msg="custom", i=i):
                self.assertEqual(i % 2, 0)

if __name__ == '__main__':
    main()

Here's the report:

<?xml version="1.0" encoding="utf-8"?><testsuite errors="0" failures="2" name="pytest" skipped="0" tests="3" time="0.087"><testcase classname="test_foo.T" file="test_foo.py" line="4" name="test_foo" time="0.024"><failure message="AssertionError: 1 != 0">self = &lt;test_foo.T testMethod=test_foo&gt;

    def test_foo(self):
        for i in range(5):
            with self.subTest(msg=&quot;custom&quot;, i=i):
&gt;               self.assertEqual(i % 2, 0)
E               AssertionError: 1 != 0

test_foo.py:8: AssertionError</failure><failure message="AssertionError: 1 != 0">self = &lt;test_foo.T testMethod=test_foo&gt;

    def test_foo(self):
        for i in range(5):
            with self.subTest(msg=&quot;custom&quot;, i=i):
&gt;               self.assertEqual(i % 2, 0)
E               AssertionError: 1 != 0

test_foo.py:8: AssertionError</failure></testcase></testsuite>
@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Mar 31, 2019

pytest 4.4 is out. I will be working on releasing pytest-subtests in the next few days. 👍

bors bot added a commit to rehandalal/therapist that referenced this issue Apr 1, 2019

Merge #66
66: Update pytest to 4.4.0 r=rehandalal a=pyup-bot


This PR updates [pytest](https://pypi.org/project/pytest) from **4.3.1** to **4.4.0**.



<details>
  <summary>Changelog</summary>
  
  
   ### 4.4.0
   ```
   =========================

Features
--------

- `2224 &lt;https://github.com/pytest-dev/pytest/issues/2224&gt;`_: ``async`` test functions are skipped and a warning is emitted when a suitable
  async plugin is not installed (such as ``pytest-asyncio`` or ``pytest-trio``).

  Previously ``async`` functions would not execute at all but still be marked as &quot;passed&quot;.


- `2482 &lt;https://github.com/pytest-dev/pytest/issues/2482&gt;`_: Include new ``disable_test_id_escaping_and_forfeit_all_rights_to_community_support`` option to disable ascii-escaping in parametrized values. This may cause a series of problems and as the name makes clear, use at your own risk.


- `4718 &lt;https://github.com/pytest-dev/pytest/issues/4718&gt;`_: The ``-p`` option can now be used to early-load plugins also by entry-point name, instead of just
  by module name.

  This makes it possible to early load external plugins like ``pytest-cov`` in the command-line::

      pytest -p pytest_cov


- `4855 &lt;https://github.com/pytest-dev/pytest/issues/4855&gt;`_: The ``--pdbcls`` option handles classes via module attributes now (e.g.
  ``pdb:pdb.Pdb`` with `pdb++`_), and its validation was improved.

  .. _pdb++: https://pypi.org/project/pdbpp/


- `4875 &lt;https://github.com/pytest-dev/pytest/issues/4875&gt;`_: The `testpaths &lt;https://docs.pytest.org/en/latest/reference.htmlconfval-testpaths&gt;`__ configuration option is now displayed next
  to the ``rootdir`` and ``inifile`` lines in the pytest header if the option is in effect, i.e., directories or file names were
  not explicitly passed in the command line.

  Also, ``inifile`` is only displayed if there&#39;s a configuration file, instead of an empty ``inifile:`` string.


- `4911 &lt;https://github.com/pytest-dev/pytest/issues/4911&gt;`_: Doctests can be skipped now dynamically using ``pytest.skip()``.


- `4920 &lt;https://github.com/pytest-dev/pytest/issues/4920&gt;`_: Internal refactorings have been made in order to make the implementation of the
  `pytest-subtests &lt;https://github.com/pytest-dev/pytest-subtests&gt;`__ plugin
  possible, which adds unittest sub-test support and a new ``subtests`` fixture as discussed in
  `1367 &lt;https://github.com/pytest-dev/pytest/issues/1367&gt;`__.

  For details on the internal refactorings, please see the details on the related PR.


- `4931 &lt;https://github.com/pytest-dev/pytest/issues/4931&gt;`_: pytester&#39;s ``LineMatcher`` asserts that the passed lines are a sequence.


- `4936 &lt;https://github.com/pytest-dev/pytest/issues/4936&gt;`_: Handle ``-p plug`` after ``-p no:plug``.

  This can be used to override a blocked plugin (e.g. in &quot;addopts&quot;) from the
  command line etc.


- `4951 &lt;https://github.com/pytest-dev/pytest/issues/4951&gt;`_: Output capturing is handled correctly when only capturing via fixtures (capsys, capfs) with ``pdb.set_trace()``.


- `4956 &lt;https://github.com/pytest-dev/pytest/issues/4956&gt;`_: ``pytester`` sets ``$HOME`` and ``$USERPROFILE`` to the temporary directory during test runs.

  This ensures to not load configuration files from the real user&#39;s home directory.


- `4980 &lt;https://github.com/pytest-dev/pytest/issues/4980&gt;`_: Namespace packages are handled better with ``monkeypatch.syspath_prepend`` and ``testdir.syspathinsert`` (via ``pkg_resources.fixup_namespace_packages``).


- `4993 &lt;https://github.com/pytest-dev/pytest/issues/4993&gt;`_: The stepwise plugin reports status information now.


- `5008 &lt;https://github.com/pytest-dev/pytest/issues/5008&gt;`_: If a ``setup.cfg`` file contains ``[tool:pytest]`` and also the no longer supported ``[pytest]`` section, pytest will use ``[tool:pytest]`` ignoring ``[pytest]``. Previously it would unconditionally error out.

  This makes it simpler for plugins to support old pytest versions.



Bug Fixes
---------

- `1895 &lt;https://github.com/pytest-dev/pytest/issues/1895&gt;`_: Fix bug where fixtures requested dynamically via ``request.getfixturevalue()`` might be teardown
  before the requesting fixture.


- `4851 &lt;https://github.com/pytest-dev/pytest/issues/4851&gt;`_: pytester unsets ``PYTEST_ADDOPTS`` now to not use outer options with ``testdir.runpytest()``.


- `4903 &lt;https://github.com/pytest-dev/pytest/issues/4903&gt;`_: Use the correct modified time for years after 2038 in rewritten ``.pyc`` files.


- `4928 &lt;https://github.com/pytest-dev/pytest/issues/4928&gt;`_: Fix line offsets with ``ScopeMismatch`` errors.


- `4957 &lt;https://github.com/pytest-dev/pytest/issues/4957&gt;`_: ``-p no:plugin`` is handled correctly for default (internal) plugins now, e.g. with ``-p no:capture``.

  Previously they were loaded (imported) always, making e.g. the ``capfd`` fixture available.


- `4968 &lt;https://github.com/pytest-dev/pytest/issues/4968&gt;`_: The pdb ``quit`` command is handled properly when used after the ``debug`` command with `pdb++`_.

  .. _pdb++: https://pypi.org/project/pdbpp/


- `4975 &lt;https://github.com/pytest-dev/pytest/issues/4975&gt;`_: Fix the interpretation of ``-qq`` option where it was being considered as ``-v`` instead.


- `4978 &lt;https://github.com/pytest-dev/pytest/issues/4978&gt;`_: ``outcomes.Exit`` is not swallowed in ``assertrepr_compare`` anymore.


- `4988 &lt;https://github.com/pytest-dev/pytest/issues/4988&gt;`_: Close logging&#39;s file handler explicitly when the session finishes.


- `5003 &lt;https://github.com/pytest-dev/pytest/issues/5003&gt;`_: Fix line offset with mark collection error (off by one).



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

- `4974 &lt;https://github.com/pytest-dev/pytest/issues/4974&gt;`_: Update docs for ``pytest_cmdline_parse`` hook to note availability liminations



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

- `4718 &lt;https://github.com/pytest-dev/pytest/issues/4718&gt;`_: ``pluggy&gt;=0.9`` is now required.


- `4815 &lt;https://github.com/pytest-dev/pytest/issues/4815&gt;`_: ``funcsigs&gt;=1.0`` is now required for Python 2.7.


- `4829 &lt;https://github.com/pytest-dev/pytest/issues/4829&gt;`_: Some left-over internal code related to ``yield`` tests has been removed.


- `4890 &lt;https://github.com/pytest-dev/pytest/issues/4890&gt;`_: Remove internally unused ``anypython`` fixture from the pytester plugin.


- `4912 &lt;https://github.com/pytest-dev/pytest/issues/4912&gt;`_: Remove deprecated Sphinx directive, ``add_description_unit()``,
  pin sphinx-removed-in to &gt;= 0.2.0 to support Sphinx 2.0.


- `4913 &lt;https://github.com/pytest-dev/pytest/issues/4913&gt;`_: Fix pytest tests invocation with custom ``PYTHONPATH``.


- `4965 &lt;https://github.com/pytest-dev/pytest/issues/4965&gt;`_: New ``pytest_report_to_serializable`` and ``pytest_report_from_serializable`` **experimental** hooks.

  These hooks will be used by ``pytest-xdist``, ``pytest-subtests``, and the replacement for
  resultlog to serialize and customize reports.

  They are experimental, meaning that their details might change or even be removed
  completely in future patch releases without warning.

  Feedback is welcome from plugin authors and users alike.


- `4987 &lt;https://github.com/pytest-dev/pytest/issues/4987&gt;`_: ``Collector.repr_failure`` respects the ``--tb`` option, but only defaults to ``short`` now (with ``auto``).
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Homepage: https://docs.pytest.org/en/latest/
</details>



Co-authored-by: pyup-bot <github-bot@pyup.io>

bors bot added a commit to mozilla/normandy that referenced this issue Apr 2, 2019

Merge #1832
1832: Scheduled weekly dependency update for week 13 r=rehandalal a=pyup-bot






### Update [botocore](https://pypi.org/project/botocore) from **1.12.120** to **1.12.125**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.12.125
   ```
   ========

* api-change:``comprehend``: Update comprehend client to latest version
* api-change:``cloudwatch``: Update cloudwatch client to latest version
* api-change:``greengrass``: Update greengrass client to latest version
   ```
   
  
  
   ### 1.12.124
   ```
   ========

* api-change:``servicecatalog``: Update servicecatalog client to latest version
* api-change:``medialive``: Update medialive client to latest version
* api-change:``pinpoint-email``: Update pinpoint-email client to latest version
* api-change:``workspaces``: Update workspaces client to latest version
   ```
   
  
  
   ### 1.12.123
   ```
   ========

* api-change:``ec2``: Update ec2 client to latest version
* api-change:``appmesh``: Update appmesh client to latest version
* api-change:``ecs``: Update ecs client to latest version
* api-change:``elbv2``: Update elbv2 client to latest version
* api-change:``transfer``: Update transfer client to latest version
* api-change:``storagegateway``: Update storagegateway client to latest version
* api-change:``s3``: Update s3 client to latest version
   ```
   
  
  
   ### 1.12.122
   ```
   ========

* api-change:``workmail``: Update workmail client to latest version
* api-change:``glue``: Update glue client to latest version
   ```
   
  
  
   ### 1.12.121
   ```
   ========

* api-change:``iotanalytics``: Update iotanalytics client to latest version
* api-change:``robomaker``: Update robomaker client to latest version
* api-change:``directconnect``: Update directconnect client to latest version
* api-change:``mediaconvert``: Update mediaconvert client to latest version
* api-change:``transcribe``: Update transcribe client to latest version
* api-change:``fms``: Update fms client to latest version
* api-change:``iot1click-devices``: Update iot1click-devices client to latest version
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/botocore
  - Changelog: https://pyup.io/changelogs/botocore/
  - Repo: https://github.com/boto/botocore
</details>





### Update [more-itertools](https://pypi.org/project/more-itertools) from **6.0.0** to **7.0.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 7.0.0
   ```
   See [the release notes](https://github.com/erikrose/more-itertools/blob/7fcf148de6482484298796553fccbf9ccfd31516/docs/versions.rst) for the full list of changes.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/more-itertools
  - Changelog: https://pyup.io/changelogs/more-itertools/
  - Repo: https://github.com/erikrose/more-itertools
  - Docs: https://pythonhosted.org/more-itertools/
</details>





### Update [protobuf](https://pypi.org/project/protobuf) from **3.7.0** to **3.7.1**.


*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/protobuf
  - Changelog: https://pyup.io/changelogs/protobuf/
  - Repo: https://github.com/protocolbuffers/protobuf/releases
  - Homepage: https://developers.google.com/protocol-buffers/
</details>





### Update [boto3](https://pypi.org/project/boto3) from **1.9.120** to **1.9.125**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.9.125
   ```
   =======

* api-change:``comprehend``: [``botocore``] Update comprehend client to latest version
* api-change:``cloudwatch``: [``botocore``] Update cloudwatch client to latest version
* api-change:``greengrass``: [``botocore``] Update greengrass client to latest version
   ```
   
  
  
   ### 1.9.124
   ```
   =======

* api-change:``servicecatalog``: [``botocore``] Update servicecatalog client to latest version
* api-change:``medialive``: [``botocore``] Update medialive client to latest version
* api-change:``pinpoint-email``: [``botocore``] Update pinpoint-email client to latest version
* api-change:``workspaces``: [``botocore``] Update workspaces client to latest version
   ```
   
  
  
   ### 1.9.123
   ```
   =======

* api-change:``ec2``: [``botocore``] Update ec2 client to latest version
* api-change:``appmesh``: [``botocore``] Update appmesh client to latest version
* api-change:``ecs``: [``botocore``] Update ecs client to latest version
* api-change:``elbv2``: [``botocore``] Update elbv2 client to latest version
* api-change:``transfer``: [``botocore``] Update transfer client to latest version
* api-change:``storagegateway``: [``botocore``] Update storagegateway client to latest version
* api-change:``s3``: [``botocore``] Update s3 client to latest version
   ```
   
  
  
   ### 1.9.122
   ```
   =======

* api-change:``workmail``: [``botocore``] Update workmail client to latest version
* api-change:``glue``: [``botocore``] Update glue client to latest version
   ```
   
  
  
   ### 1.9.121
   ```
   =======

* api-change:``iotanalytics``: [``botocore``] Update iotanalytics client to latest version
* api-change:``robomaker``: [``botocore``] Update robomaker client to latest version
* api-change:``directconnect``: [``botocore``] Update directconnect client to latest version
* api-change:``mediaconvert``: [``botocore``] Update mediaconvert client to latest version
* api-change:``transcribe``: [``botocore``] Update transcribe client to latest version
* api-change:``fms``: [``botocore``] Update fms client to latest version
* api-change:``iot1click-devices``: [``botocore``] Update iot1click-devices client to latest version
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/boto3
  - Changelog: https://pyup.io/changelogs/boto3/
  - Repo: https://github.com/boto/boto3
</details>





### Update [Django](https://pypi.org/project/Django) from **2.1.7** to **2.2**.


<details>
  <summary>Changelog</summary>
  
  
   ### 2.2
   ```
   ========================

*1 April 2019*

Welcome to Django 2.2!

These release notes cover the :ref:`new features &lt;whats-new-2.2&gt;`, as well as
some :ref:`backwards incompatible changes &lt;backwards-incompatible-2.2&gt;` you&#39;ll
want to be aware of when upgrading from Django 2.1 or earlier. We&#39;ve
:ref:`begun the deprecation process for some features
&lt;deprecated-features-2.2&gt;`.

See the :doc:`/howto/upgrade-version` guide if you&#39;re updating an existing
project.

Django 2.2 is designated as a :term:`long-term support release`. It will
receive security updates for at least three years after its release. Support
for the previous LTS, Django 1.11, will end in April 2020.

Python compatibility
====================

Django 2.2 supports Python 3.5, 3.6, and 3.7. We **highly recommend** and only
officially support the latest release of each series.

.. _whats-new-2.2:

What&#39;s new in Django 2.2
========================

Constraints
-----------

The new :class:`~django.db.models.CheckConstraint` and
:class:`~django.db.models.UniqueConstraint` classes enable adding custom
database constraints. Constraints are added to models using the
:attr:`Meta.constraints &lt;django.db.models.Options.constraints&gt;` option.

Minor features
--------------

:mod:`django.contrib.admin`
~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Added a CSS class to the column headers of
  :class:`~django.contrib.admin.TabularInline`.

:mod:`django.contrib.auth`
~~~~~~~~~~~~~~~~~~~~~~~~~~

* The ``HttpRequest`` is now passed as the first positional argument to
  :meth:`.RemoteUserBackend.configure_user`, if it accepts it.

:mod:`django.contrib.gis`
~~~~~~~~~~~~~~~~~~~~~~~~~

* Added Oracle support for the
  :class:`~django.contrib.gis.db.models.functions.Envelope` function.

* Added SpatiaLite support for the :lookup:`coveredby` and :lookup:`covers`
  lookups.

:mod:`django.contrib.postgres`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* The new ``ordering`` argument for
  :class:`~django.contrib.postgres.aggregates.ArrayAgg` and
  :class:`~django.contrib.postgres.aggregates.StringAgg` determines the
  ordering of the aggregated elements.

* The new :class:`~django.contrib.postgres.indexes.BTreeIndex`,
  :class:`~django.contrib.postgres.indexes.HashIndex` and
  :class:`~django.contrib.postgres.indexes.SpGistIndex` classes allow
  creating ``B-Tree``, ``hash``, and ``SP-GiST`` indexes in the database.

* :class:`~django.contrib.postgres.indexes.BrinIndex` now has the
  ``autosummarize`` parameter.

* The new ``search_type`` parameter of
  :class:`~django.contrib.postgres.search.SearchQuery` allows searching for
  a phrase or raw expression.

:mod:`django.contrib.staticfiles`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Added path matching to the :option:`collectstatic --ignore` option so that
  patterns like ``/vendor/*.js`` can be used.

Database backends
~~~~~~~~~~~~~~~~~

* Added result streaming for :meth:`.QuerySet.iterator` on SQLite.

Generic Views
~~~~~~~~~~~~~

* The new :meth:`View.setup &lt;django.views.generic.base.View.setup&gt;` hook
  initializes view attributes before calling
  :meth:`~django.views.generic.base.View.dispatch`. It allows mixins to setup
  instance attributes for reuse in child classes.

Internationalization
~~~~~~~~~~~~~~~~~~~~

* Added support and translations for the Armenian language.

Management Commands
~~~~~~~~~~~~~~~~~~~

* The new :option:`--force-color` option forces colorization of the command
  output.

* :djadmin:`inspectdb` now creates models for foreign tables on PostgreSQL.

* :option:`inspectdb --include-views` now creates models for materialized views
  on Oracle and PostgreSQL.

* The new :option:`inspectdb --include-partitions` option allows creating
  models for partition tables on PostgreSQL. In older versions, models are
  created child tables instead the parent.

* :djadmin:`inspectdb` now introspects :class:`~django.db.models.DurationField`
  for Oracle and PostgreSQL, and :class:`~django.db.models.AutoField` for
  SQLite.

* On Oracle, :djadmin:`dbshell` is wrapped with ``rlwrap``, if available.
  ``rlwrap`` provides a command history and editing of keyboard input.

* The new :option:`makemigrations --no-header` option avoids writing header
  comments in generated migration file(s). This option is also available for
  :djadmin:`squashmigrations`.

* :djadmin:`runserver` can now use `Watchman
  &lt;https://facebook.github.io/watchman/&gt;`_ to improve the performance of
  watching a large number of files for changes.

Migrations
~~~~~~~~~~

* The new :option:`migrate --plan` option prints the list of migration
  operations that will be performed.

* ``NoneType`` can now be serialized in migrations.

* You can now :ref:`register custom serializers &lt;custom-migration-serializers&gt;`
  for migrations.

Models
~~~~~~

* Added support for PostgreSQL operator classes (:attr:`.Index.opclasses`).

* Added support for partial indexes (:attr:`.Index.condition`).

* Added the :class:`~django.db.models.functions.NullIf` and
  :class:`~django.db.models.functions.Reverse` database functions, as well as
  many :ref:`math database functions &lt;math-functions&gt;`.

* Setting the new ``ignore_conflicts`` parameter of
  :meth:`.QuerySet.bulk_create` to ``True`` tells the database to ignore
  failure to insert rows that fail uniqueness constraints or other checks.

* The new :class:`~django.db.models.functions.ExtractIsoYear` function extracts
  ISO-8601 week-numbering years from :class:`~django.db.models.DateField` and
  :class:`~django.db.models.DateTimeField`, and the new :lookup:`iso_year`
  lookup allows querying by an ISO-8601 week-numbering year.

* The new :meth:`.QuerySet.bulk_update` method allows efficiently updating
  specific fields on multiple model instances.

* Django no longer always starts a transaction when a single query is being
  performed, such as ``Model.save()``, ``QuerySet.update()``, and
  ``Model.delete()``. This improves the performance of autocommit by reducing
  the number of database round trips.

* Added SQLite support for the :class:`~django.db.models.StdDev` and
  :class:`~django.db.models.Variance` functions.

* The handling of ``DISTINCT`` aggregation is added to the
  :class:`~django.db.models.Aggregate` class. Adding :attr:`allow_distinct =
  True &lt;django.db.models.Aggregate.allow_distinct&gt;` as a class attribute on
  ``Aggregate`` subclasses allows a ``distinct`` keyword argument to be
  specified on initialization to ensure that the aggregate function is only
  called for each distinct value of ``expressions``.

* The :meth:`.RelatedManager.add`, :meth:`~.RelatedManager.create`,
  :meth:`~.RelatedManager.remove`,  :meth:`~.RelatedManager.set`,
  ``get_or_create()``, and ``update_or_create()`` methods are now allowed on
  many-to-many relationships with intermediate models. The new
  ``through_defaults`` argument is used to specify values for new intermediate
  model instance(s).

Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~

* Added :attr:`.HttpRequest.headers` to allow simple access to a request&#39;s
  headers.

Serialization
~~~~~~~~~~~~~

* You can now deserialize data using natural keys containing :ref:`forward
  references &lt;natural-keys-and-forward-references&gt;` by passing
  ``handle_forward_references=True`` to ``serializers.deserialize()``.
  Additionally, :djadmin:`loaddata` handles forward references automatically.

Tests
~~~~~

* The new :meth:`.SimpleTestCase.assertURLEqual` assertion checks for a given
  URL, ignoring the ordering of the query string.
  :meth:`~.SimpleTestCase.assertRedirects` uses the new assertion.

* The test :class:`~.django.test.Client` now supports automatic JSON
  serialization of list and tuple ``data`` when
  ``content_type=&#39;application/json&#39;``.

* The new :setting:`ORACLE_MANAGED_FILES &lt;TEST_ORACLE_MANAGED_FILES&gt;` test
  database setting allows using Oracle Managed Files (OMF) tablespaces.

* Deferrable database constraints are now checked at the end of each
  :class:`~django.test.TestCase` test on SQLite 3.20+, just like on other
  backends that support deferrable constraints. These checks aren&#39;t implemented
  for older versions of SQLite because they would require expensive table
  introspection there.

* :class:`~django.test.runner.DiscoverRunner` now skips the setup of databases
  not :ref:`referenced by tests&lt;testing-multi-db&gt;`.

URLs
~~~~

* The new :attr:`.ResolverMatch.route` attribute stores the route of the
  matching URL pattern.

Validators
~~~~~~~~~~

* :class:`.MaxValueValidator`, :class:`.MinValueValidator`,
  :class:`.MinLengthValidator`, and :class:`.MaxLengthValidator` now accept
  a callable ``limit_value``.

.. _backwards-incompatible-2.2:

Backwards incompatible changes in 2.2
=====================================

Database backend API
--------------------

This section describes changes that may be needed in third-party database
backends.

* Third-party database backends must implement support for table check
  constraints or set ``DatabaseFeatures.supports_table_check_constraints`` to
  ``False``.

* Third party database backends must implement support for ignoring
  constraints or uniqueness errors while inserting or set
  ``DatabaseFeatures.supports_ignore_conflicts`` to ``False``.

* Third party database backends must implement introspection for
  ``DurationField`` or set ``DatabaseFeatures.can_introspect_duration_field``
  to ``False``.

* ``DatabaseFeatures.uses_savepoints`` now defaults to ``True``.

* Third party database backends must implement support for partial indexes or
  set ``DatabaseFeatures.supports_partial_indexes`` to ``False``.

* ``DatabaseIntrospection.table_name_converter()`` and
  ``column_name_converter()`` are removed. Third party database backends may
  need to instead implement ``DatabaseIntrospection.identifier_converter()``.
  In that case, the constraint names that
  ``DatabaseIntrospection.get_constraints()`` returns must be normalized by
  ``identifier_converter()``.

* SQL generation for indexes is moved from :class:`~django.db.models.Index` to
  ``SchemaEditor`` and these ``SchemaEditor`` methods are added:

  * ``_create_primary_key_sql()`` and ``_delete_primary_key_sql()``
  * ``_delete_index_sql()`` (to pair with ``_create_index_sql()``)
  * ``_delete_unique_sql`` (to pair with ``_create_unique_sql()``)
  * ``_delete_fk_sql()`` (to pair with ``_create_fk_sql()``)
  * ``_create_check_sql()`` and ``_delete_check_sql()``

* The third argument of ``DatabaseWrapper.__init__()``,
  ``allow_thread_sharing``, is removed.

Admin actions are no longer collected from base ``ModelAdmin`` classes
----------------------------------------------------------------------

For example, in older versions of Django::

    from django.contrib import admin

    class BaseAdmin(admin.ModelAdmin):
        actions = [&#39;a&#39;]

    class SubAdmin(BaseAdmin):
        actions = [&#39;b&#39;]

``SubAdmin`` will have actions ``&#39;a&#39;`` and ``&#39;b&#39;``.

Now ``actions`` follows standard Python inheritance. To get the same result as
before::

    class SubAdmin(BaseAdmin):
        actions = BaseAdmin.actions + [&#39;b&#39;]

:mod:`django.contrib.gis`
-------------------------

* Support for GDAL 1.9 and 1.10 is dropped.

``TransactionTestCase`` serialized data loading
-----------------------------------------------

Initial data migrations are now loaded in
:class:`~django.test.TransactionTestCase` at the end of the test, after the
database flush. In older versions, this data was loaded at the beginning of the
test, but this prevents the :option:`test --keepdb` option from working
properly (the database was empty at the end of the whole test suite). This
change shouldn&#39;t have an impact on your tests unless you&#39;ve customized
:class:`~django.test.TransactionTestCase`&#39;s internals.

``sqlparse`` is required dependency
-----------------------------------

To simplify a few parts of Django&#39;s database handling, `sqlparse
&lt;https://pypi.org/project/sqlparse/&gt;`_ is now a required dependency. It&#39;s
automatically installed along with Django.

``cached_property`` aliases
---------------------------

In usage like::

    from django.utils.functional import cached_property

    class A:

        cached_property
        def base(self):
            return ...

        alias = base

``alias`` is not cached. Where the problem can be detected (Python 3.6 and
later), such usage now raises ``TypeError: Cannot assign the same
cached_property to two different names (&#39;base&#39; and &#39;alias&#39;).``

Use this instead::

    import operator

    class A:

        ...

        alias = property(operator.attrgetter(&#39;base&#39;))

Permissions for proxy models
----------------------------

:ref:`Permissions for proxy models &lt;proxy-models-permissions-topic&gt;` are now
created using the content type of the proxy model rather than the content type
of the concrete model. A migration will update existing permissions when you
run :djadmin:`migrate`.

In the admin, the change is transparent for proxy models having the same
``app_label`` as their concrete model. However, in older versions, users with
permissions for a proxy model with a *different* ``app_label`` than its
concrete model couldn&#39;t access the model in the admin. That&#39;s now fixed, but
you might want to audit the permissions assignments for such proxy models
(``[add|view|change|delete]_myproxy``) prior to upgrading to ensure the new
access is appropriate.

Finally, proxy model permission strings must be updated to use their own
``app_label``. For example, for ``app.MyProxyModel`` inheriting from
``other_app.ConcreteModel``, update
``user.has_perm(&#39;other_app.add_myproxymodel&#39;)`` to
``user.has_perm(&#39;app.add_myproxymodel&#39;)``.

Merging of form ``Media`` assets
--------------------------------

Form ``Media`` assets are now merged using a topological sort algorithm, as the
old pairwise merging algorithm is insufficient for some cases. CSS and
JavaScript files which don&#39;t include their dependencies may now be sorted
incorrectly (where the old algorithm produced results correctly by
coincidence).

Audit all ``Media`` classes for any missing dependencies. For example,
widgets depending on ``django.jQuery`` must specify
``js=[&#39;admin/js/jquery.init.js&#39;, ...]`` when :ref:`declaring form media assets
&lt;assets-as-a-static-definition&gt;`.

Miscellaneous
-------------

* To improve readability, the ``UUIDField`` form field now displays values with
  dashes, e.g. ``550e8400-e29b-41d4-a716-446655440000`` instead of
  ``550e8400e29b41d4a716446655440000``.

* On SQLite, ``PositiveIntegerField`` and ``PositiveSmallIntegerField`` now
  include a check constraint to prevent negative values in the database. If you
  have existing invalid data and run a migration that recreates a table, you&#39;ll
  see ``CHECK constraint failed``.

* For consistency with WSGI servers, the test client now sets the
  ``Content-Length`` header to a string rather than an integer.

* The return value of :func:`django.utils.text.slugify` is no longer marked as
  HTML safe.

* The default truncation character used by the :tfilter:`urlizetrunc`,
  :tfilter:`truncatechars`, :tfilter:`truncatechars_html`,
  :tfilter:`truncatewords`, and :tfilter:`truncatewords_html` template filters
  is now the real ellipsis character (``…``) instead of 3 dots. You may have to
  adapt some test output comparisons.

* Support for bytestring paths in the template filesystem loader is removed.

* :func:`django.utils.http.urlsafe_base64_encode` now returns a string instead
  of a bytestring, and :func:`django.utils.http.urlsafe_base64_decode` may no
  longer be passed a bytestring.

* Support for ``cx_Oracle`` &lt; 6.0 is removed.

* The minimum supported version of ``mysqlclient`` is increased from 1.3.7 to
  1.3.13.

* The minimum supported version of SQLite is increased from 3.7.15 to 3.8.3.

* In an attempt to provide more semantic query data, ``NullBooleanSelect`` now
  renders ``&lt;option&gt;`` values of ``unknown``, ``true``, and ``false`` instead
  of ``1``, ``2``, and ``3``. For backwards compatibility, the old values are
  still accepted as data.

* :attr:`Group.name &lt;django.contrib.auth.models.Group.name&gt;` ``max_length``
  is increased from 80 to 150 characters.

* Tests that violate deferrable database constraints now error when run on
  SQLite 3.20+, just like on other backends that support such constraints.

* To catch usage mistakes, the test :class:`~django.test.Client` and
  :func:`django.utils.http.urlencode` now raise ``TypeError`` if ``None`` is
  passed as a value to encode because ``None`` can&#39;t be encoded in GET and POST
  data. Either pass an empty string or omit the value.

* The :djadmin:`ping_google` management command now defaults to ``https``
  instead of ``http`` for the sitemap&#39;s URL. If your site uses http, use the
  new :option:`ping_google --sitemap-uses-http` option. If you use the
  :func:`~django.contrib.sitemaps.ping_google` function, set the new
  ``sitemap_uses_https`` argument to ``False``.

* :djadmin:`runserver` no longer supports `pyinotify` (replaced by Watchman).

* The :class:`~django.db.models.Avg`, :class:`~django.db.models.StdDev`, and
  :class:`~django.db.models.Variance` aggregate functions now return a
  ``Decimal`` instead of a ``float`` when the input is ``Decimal``.

* Tests will fail on SQLite if apps without migrations have relations to apps
  with migrations. This has been a documented restriction since migrations were
  added in Django 1.7, but it fails more reliably now. You&#39;ll see tests failing
  with errors like ``no such table: &lt;app_label&gt;_&lt;model&gt;``. This was observed
  with several third-party apps that had models in tests without migrations.
  You must add migrations for such models.

.. _deprecated-features-2.2:

Features deprecated in 2.2
==========================

Model ``Meta.ordering`` will no longer affect ``GROUP BY`` queries
------------------------------------------------------------------

A model&#39;s ``Meta.ordering`` affecting ``GROUP BY`` queries (such as
``.annotate().values()``) is a common source of confusion. Such queries now
issue a deprecation warning with the advice to add an ``order_by()`` to retain
the current query. ``Meta.ordering`` will be ignored in such queries starting
in Django 3.1.

Miscellaneous
-------------

* ``django.utils.timezone.FixedOffset`` is deprecated in favor of
  :class:`datetime.timezone`.

* The undocumented ``QuerySetPaginator`` alias of
  ``django.core.paginator.Paginator`` is deprecated.

* The ``FloatRangeField`` model and form fields in ``django.contrib.postgres``
  are deprecated in favor of a new name, ``DecimalRangeField``, to match the
  underlying ``numrange`` data type used in the database.

* The ``FILE_CHARSET`` setting is deprecated. Starting with Django 3.1, files
  read from disk must be UTF-8 encoded.

* ``django.contrib.staticfiles.storage.CachedStaticFilesStorage`` is
  deprecated due to the intractable problems that it has. Use
  :class:`.ManifestStaticFilesStorage` or a third-party cloud storage instead.

* :meth:`.RemoteUserBackend.configure_user` is now passed ``request`` as the
  first positional argument, if it accepts it. Support for overrides that don&#39;t
  accept it will be removed in Django 3.1.

* The :attr:`.SimpleTestCase.allow_database_queries`,
  :attr:`.TransactionTestCase.multi_db`, and :attr:`.TestCase.multi_db`
  attributes are deprecated in favor of :attr:`.SimpleTestCase.databases`,
  :attr:`.TransactionTestCase.databases`, and :attr:`.TestCase.databases`.
  These new attributes allow databases dependencies to be declared in order to
  prevent unexpected queries against non-default databases to leak state
  between tests. The previous behavior of ``allow_database_queries=True`` and
  ``multi_db=True`` can be achieved by setting ``databases=&#39;__all__&#39;``.


==========================
   ```
   
  
  
   ### 2.1.8
   ```
   ==========================

*April 1, 2019*

Django 2.1.8 fixes a bug in 2.1.7.

Bugfixes
========

* Prevented admin inlines for a ``ManyToManyField``\&#39;s implicit through model
  from being editable if the user only has the view permission
  (🎫`30289`).


==========================
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/django
  - Changelog: https://pyup.io/changelogs/django/
  - Homepage: https://www.djangoproject.com/
</details>





### Update [newrelic](https://pypi.org/project/newrelic) from **4.14.0.115** to **4.16.1.117**.


<details>
  <summary>Changelog</summary>
  
  
   ### 4.16.1.117
   ```
   This release of the Python agent fixes a memory leak that occurs on Python 2 when monitoring WSGI applications.

The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.

Bug Fixes


Fix memory leak on Python 2 WSGI applications

When using the 4.16.0 agent on Python 2 to monitor WSGI applications, the agent would cause memory to be allocated on each request. On Python 2, this memory was never deallocated due to a reference cycle. This has now been corrected.
   ```
   
  
  
   ### 4.16.0.116
   ```
   This release of the Python agent adds support for native coroutines and generators with a new web_transaction API, as well as bugfixes.

The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.

Features


Add a new web_transaction API

This method is now exposed both as a public API through newrelic.agent.api.wrap_web_transaction, and as a decorator with newrelic.agent.api.web_transaction. It can be used to instrument non-WSGI web transactions. For usage of this API see https://docs.newrelic.com/docs/agents/python-agent/python-agent-api/webt...


Bug Fixes


The presence of unicode values in a SQL query on Python 2 may cause an application crash

The agent was not properly handling unicode values when recording SQL queries in Python 2. As a result, the presence of unicode values in SQL queries in Python 2 applications may have resulted in an application crash. Unicode values in Python 2 SQL queries are now properly handled.
The Python Agent may have improperly biased the random sampling of distributed traces

Distributed traces are randomly sampled across services. The agent is responsible for propagating the state of its sampling decision to other services. In propagating that decision, an improper sampling bias may have been introduced in downstream services.
The agent will no longer report the command arguments used to start newrelic-admin

The agent previously reported the startup command and arguments when using newrelic-admin run-program and newrelic-admin run-python. The command and arguments are no longer sent to New Relic. This data may continue to be logged to the agent log files when debug level logs are enabled.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/newrelic
  - Changelog: https://pyup.io/changelogs/newrelic/
  - Homepage: http://newrelic.com/docs/python/new-relic-for-python
</details>





### Update [pytest](https://pypi.org/project/pytest) from **4.3.1** to **4.4.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 4.4.0
   ```
   =========================

Features
--------

- `2224 &lt;https://github.com/pytest-dev/pytest/issues/2224&gt;`_: ``async`` test functions are skipped and a warning is emitted when a suitable
  async plugin is not installed (such as ``pytest-asyncio`` or ``pytest-trio``).

  Previously ``async`` functions would not execute at all but still be marked as &quot;passed&quot;.


- `2482 &lt;https://github.com/pytest-dev/pytest/issues/2482&gt;`_: Include new ``disable_test_id_escaping_and_forfeit_all_rights_to_community_support`` option to disable ascii-escaping in parametrized values. This may cause a series of problems and as the name makes clear, use at your own risk.


- `4718 &lt;https://github.com/pytest-dev/pytest/issues/4718&gt;`_: The ``-p`` option can now be used to early-load plugins also by entry-point name, instead of just
  by module name.

  This makes it possible to early load external plugins like ``pytest-cov`` in the command-line::

      pytest -p pytest_cov


- `4855 &lt;https://github.com/pytest-dev/pytest/issues/4855&gt;`_: The ``--pdbcls`` option handles classes via module attributes now (e.g.
  ``pdb:pdb.Pdb`` with `pdb++`_), and its validation was improved.

  .. _pdb++: https://pypi.org/project/pdbpp/


- `4875 &lt;https://github.com/pytest-dev/pytest/issues/4875&gt;`_: The `testpaths &lt;https://docs.pytest.org/en/latest/reference.htmlconfval-testpaths&gt;`__ configuration option is now displayed next
  to the ``rootdir`` and ``inifile`` lines in the pytest header if the option is in effect, i.e., directories or file names were
  not explicitly passed in the command line.

  Also, ``inifile`` is only displayed if there&#39;s a configuration file, instead of an empty ``inifile:`` string.


- `4911 &lt;https://github.com/pytest-dev/pytest/issues/4911&gt;`_: Doctests can be skipped now dynamically using ``pytest.skip()``.


- `4920 &lt;https://github.com/pytest-dev/pytest/issues/4920&gt;`_: Internal refactorings have been made in order to make the implementation of the
  `pytest-subtests &lt;https://github.com/pytest-dev/pytest-subtests&gt;`__ plugin
  possible, which adds unittest sub-test support and a new ``subtests`` fixture as discussed in
  `1367 &lt;https://github.com/pytest-dev/pytest/issues/1367&gt;`__.

  For details on the internal refactorings, please see the details on the related PR.


- `4931 &lt;https://github.com/pytest-dev/pytest/issues/4931&gt;`_: pytester&#39;s ``LineMatcher`` asserts that the passed lines are a sequence.


- `4936 &lt;https://github.com/pytest-dev/pytest/issues/4936&gt;`_: Handle ``-p plug`` after ``-p no:plug``.

  This can be used to override a blocked plugin (e.g. in &quot;addopts&quot;) from the
  command line etc.


- `4951 &lt;https://github.com/pytest-dev/pytest/issues/4951&gt;`_: Output capturing is handled correctly when only capturing via fixtures (capsys, capfs) with ``pdb.set_trace()``.


- `4956 &lt;https://github.com/pytest-dev/pytest/issues/4956&gt;`_: ``pytester`` sets ``$HOME`` and ``$USERPROFILE`` to the temporary directory during test runs.

  This ensures to not load configuration files from the real user&#39;s home directory.


- `4980 &lt;https://github.com/pytest-dev/pytest/issues/4980&gt;`_: Namespace packages are handled better with ``monkeypatch.syspath_prepend`` and ``testdir.syspathinsert`` (via ``pkg_resources.fixup_namespace_packages``).


- `4993 &lt;https://github.com/pytest-dev/pytest/issues/4993&gt;`_: The stepwise plugin reports status information now.


- `5008 &lt;https://github.com/pytest-dev/pytest/issues/5008&gt;`_: If a ``setup.cfg`` file contains ``[tool:pytest]`` and also the no longer supported ``[pytest]`` section, pytest will use ``[tool:pytest]`` ignoring ``[pytest]``. Previously it would unconditionally error out.

  This makes it simpler for plugins to support old pytest versions.



Bug Fixes
---------

- `1895 &lt;https://github.com/pytest-dev/pytest/issues/1895&gt;`_: Fix bug where fixtures requested dynamically via ``request.getfixturevalue()`` might be teardown
  before the requesting fixture.


- `4851 &lt;https://github.com/pytest-dev/pytest/issues/4851&gt;`_: pytester unsets ``PYTEST_ADDOPTS`` now to not use outer options with ``testdir.runpytest()``.


- `4903 &lt;https://github.com/pytest-dev/pytest/issues/4903&gt;`_: Use the correct modified time for years after 2038 in rewritten ``.pyc`` files.


- `4928 &lt;https://github.com/pytest-dev/pytest/issues/4928&gt;`_: Fix line offsets with ``ScopeMismatch`` errors.


- `4957 &lt;https://github.com/pytest-dev/pytest/issues/4957&gt;`_: ``-p no:plugin`` is handled correctly for default (internal) plugins now, e.g. with ``-p no:capture``.

  Previously they were loaded (imported) always, making e.g. the ``capfd`` fixture available.


- `4968 &lt;https://github.com/pytest-dev/pytest/issues/4968&gt;`_: The pdb ``quit`` command is handled properly when used after the ``debug`` command with `pdb++`_.

  .. _pdb++: https://pypi.org/project/pdbpp/


- `4975 &lt;https://github.com/pytest-dev/pytest/issues/4975&gt;`_: Fix the interpretation of ``-qq`` option where it was being considered as ``-v`` instead.


- `4978 &lt;https://github.com/pytest-dev/pytest/issues/4978&gt;`_: ``outcomes.Exit`` is not swallowed in ``assertrepr_compare`` anymore.


- `4988 &lt;https://github.com/pytest-dev/pytest/issues/4988&gt;`_: Close logging&#39;s file handler explicitly when the session finishes.


- `5003 &lt;https://github.com/pytest-dev/pytest/issues/5003&gt;`_: Fix line offset with mark collection error (off by one).



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

- `4974 &lt;https://github.com/pytest-dev/pytest/issues/4974&gt;`_: Update docs for ``pytest_cmdline_parse`` hook to note availability liminations



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

- `4718 &lt;https://github.com/pytest-dev/pytest/issues/4718&gt;`_: ``pluggy&gt;=0.9`` is now required.


- `4815 &lt;https://github.com/pytest-dev/pytest/issues/4815&gt;`_: ``funcsigs&gt;=1.0`` is now required for Python 2.7.


- `4829 &lt;https://github.com/pytest-dev/pytest/issues/4829&gt;`_: Some left-over internal code related to ``yield`` tests has been removed.


- `4890 &lt;https://github.com/pytest-dev/pytest/issues/4890&gt;`_: Remove internally unused ``anypython`` fixture from the pytester plugin.


- `4912 &lt;https://github.com/pytest-dev/pytest/issues/4912&gt;`_: Remove deprecated Sphinx directive, ``add_description_unit()``,
  pin sphinx-removed-in to &gt;= 0.2.0 to support Sphinx 2.0.


- `4913 &lt;https://github.com/pytest-dev/pytest/issues/4913&gt;`_: Fix pytest tests invocation with custom ``PYTHONPATH``.


- `4965 &lt;https://github.com/pytest-dev/pytest/issues/4965&gt;`_: New ``pytest_report_to_serializable`` and ``pytest_report_from_serializable`` **experimental** hooks.

  These hooks will be used by ``pytest-xdist``, ``pytest-subtests``, and the replacement for
  resultlog to serialize and customize reports.

  They are experimental, meaning that their details might change or even be removed
  completely in future patch releases without warning.

  Feedback is welcome from plugin authors and users alike.


- `4987 &lt;https://github.com/pytest-dev/pytest/issues/4987&gt;`_: ``Collector.repr_failure`` respects the ``--tb`` option, but only defaults to ``short`` now (with ``auto``).
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Homepage: https://docs.pytest.org/en/latest/
</details>





### Update [pytest-mock](https://pypi.org/project/pytest-mock) from **1.10.2** to **1.10.3**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.10.3
   ```
   ------

* Fix test suite in Python 3.8. Thanks `hroncok`_ for the report and `blueyed`_ for the PR (`140`_).

.. _140: pytest-dev/pytest-mock#140
.. _hroncok: https://github.com/hroncok
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest-mock
  - Changelog: https://pyup.io/changelogs/pytest-mock/
  - Repo: https://github.com/pytest-dev/pytest-mock/
</details>





### Update [drf-yasg](https://pypi.org/project/drf-yasg) from **1.14.0** to **1.15.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.15.0
   ```
   **********

*Release date: Apr 01, 2019*

- **ADDED:** added ``is_list_view`` and ``has_list_response`` extension points to ``SwaggerAutoSchema`` (:issue:`331`)
- **IMPROVED:** updated ``swagger-ui`` to version 3.22.0
- **IMPROVED:** updated ``ReDoc`` to version 2.0.0-rc.4
- **FIXED:** ``ListModelMixin`` will now always be treated as a list view (:issue:`306`)
- **FIXED:** non-primtive values in field ``choices`` will now be handled properly (:issue:`340`)

**********
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/drf-yasg
  - Changelog: https://pyup.io/changelogs/drf-yasg/
  - Repo: https://github.com/axnsan12/drf-yasg
</details>





### Update [Sphinx](https://pypi.org/project/Sphinx) from **1.8.5** to **2.0.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 2.0.0
   ```
   ====================================

Dependencies
------------

* LaTeX builder now depends on TeX Live 2015 or above.
* LaTeX builder (with ``&#39;pdflatex&#39;`` :confval:`latex_engine`) will process
  Unicode Greek letters in text (not in math mark-up) via the text font and
  will not escape them to math mark-up. See the discussion of the
  ``&#39;fontenc&#39;`` key of :confval:`latex_elements`; such (optional) support for
  Greek adds, for example on Ubuntu xenial, the ``texlive-lang-greek`` and (if
  default font set-up is not modified) ``cm-super(-minimal)`` as additional
  Sphinx LaTeX requirements.
* LaTeX builder with :confval:`latex_engine` set to ``&#39;xelatex&#39;`` or to
  ``&#39;lualatex&#39;`` requires (by default) the ``FreeFont`` fonts,
  which in Ubuntu xenial are provided by package ``fonts-freefont-otf``, and
  e.g. in Fedora 29 via package ``texlive-gnu-freefont``.
* requests 2.5.0 or above
* The six package is no longer a dependency
* The sphinxcontrib-websupport package is no longer a dependency
* Some packages are separated to sub packages:

  - sphinxcontrib.applehelp
  - sphinxcontrib.devhelp
  - sphinxcontrib.htmlhelp
  - sphinxcontrib.jsmath
  - sphinxcontrib.serializinghtml
  - sphinxcontrib.qthelp

Incompatible changes
--------------------

* Drop python 2.7 and 3.4 support
* Drop docutils 0.11 support
* The default setting for :confval:`master_doc` is changed to ``&#39;index&#39;`` which
  has been longly used as default of sphinx-quickstart.
* LaTeX: Move message resources to ``sphinxmessage.sty``
* LaTeX: Stop using ``\captions&lt;lang&gt;`` macro for some labels
* LaTeX: for ``&#39;xelatex&#39;`` and ``&#39;lualatex&#39;``, use the ``FreeFont`` OpenType
  fonts as default choice (refs: 5645)
* LaTeX: ``&#39;xelatex&#39;`` and ``&#39;lualatex&#39;`` now use ``\small`` in code-blocks
  (due to ``FreeMono`` character width) like ``&#39;pdflatex&#39;`` already did (due
  to ``Courier`` character width).  You may need to adjust this via
  :confval:`latex_elements` ``&#39;fvset&#39;`` key, in case of usage of some other
  OpenType fonts (refs: 5768)
* LaTeX: Greek letters in text are not escaped to math mode mark-up, and they
  will use the text font not the math font. The ``LGR`` font encoding must be
  added to the ``&#39;fontenc&#39;`` key of :confval:`latex_elements` for this to work
  (only if it is needed by the document, of course).
* LaTeX: setting the :confval:`language` to ``&#39;en&#39;`` triggered ``Sonny`` option
  of ``fncychap``, now it is ``Bjarne`` to match case of no language specified.
  (refs: 5772)
* 5770: doctest: Follow :confval:`highlight_language` on highlighting doctest
  block.  As a result, they are highlighted as python3 by default.
* The order of argument for ``HTMLTranslator``, ``HTML5Translator`` and
  ``ManualPageTranslator`` are changed
* LaTeX: hard-coded redefinitions of ``\lsection`` and ``\lsubsection``
  formerly done during loading of ``&#39;manual&#39;`` docclass get executed later, at
  time of ``\sphinxtableofcontents``.  This means that custom user definitions
  from LaTeX preamble now get overwritten.  Use ``\sphinxtableofcontentshook``
  to insert custom user definitions.  See :ref:`latex-macros`.
* quickstart: Simplify generated ``conf.py``
* 4148: quickstart: some questions are removed.  They are still able to specify
  via command line options
* websupport: unbundled from sphinx core. Please use sphinxcontrib-websupport
* C++, the visibility of base classes is now always rendered as present in the
  input. That is, ``private`` is now shown, where it was ellided before.
* LaTeX: graphics inclusion of oversized images rescales to not exceed
  the text width and height, even if width and/or height option were used.
  (refs: 5956)
* epub: ``epub_title`` defaults to the :confval:`project` option
* 4550: All tables and figures without ``align`` option are displayed to center
* 4587: html: Output HTML5 by default

Deprecated
----------

* Support for evaluating Python 2 syntax is deprecated. This includes
  configuration files which should be converted to Python 3.
* The arguments of ``EpubBuilder.build_mimetype()``,
  ``EpubBuilder.build_container()``, ``EpubBuilder.bulid_content()``,
  ``EpubBuilder.build_toc()`` and ``EpubBuilder.build_epub()``
* The arguments of ``Epub3Builder.build_navigation_doc()``
* The config variables

  - :confval:`html_experimental_html5_writer`

* The ``encoding`` argument of ``autodoc.Documenter.get_doc()``,
  ``autodoc.DocstringSignatureMixin.get_doc()``,
  ``autodoc.DocstringSignatureMixin._find_signature()``, and
  ``autodoc.ClassDocumenter.get_doc()`` are deprecated.
* The ``importer`` argument of ``sphinx.ext.autodoc.importer._MockModule``
* The ``nodetype`` argument of ``sphinx.search.WordCollector.
  is_meta_keywords()``
* The ``suffix`` argument of ``env.doc2path()`` is deprecated.
* The string style ``base`` argument of ``env.doc2path()`` is deprecated.
* The fallback to allow omitting the ``filename`` argument from an overridden
  ``IndexBuilder.feed()`` method is deprecated.
* ``sphinx.addnodes.abbreviation``
* ``sphinx.application.Sphinx._setting_up_extension``
* ``sphinx.builders.epub3.Epub3Builder.validate_config_value()``
* ``sphinx.builders.html.SingleFileHTMLBuilder``
* ``sphinx.builders.htmlhelp.HTMLHelpBuilder.open_file()``
* ``sphinx.cmd.quickstart.term_decode()``
* ``sphinx.cmd.quickstart.TERM_ENCODING``
* ``sphinx.config.check_unicode()``
* ``sphinx.config.string_classes``
* ``sphinx.domains.cpp.DefinitionError.description``
* ``sphinx.domains.cpp.NoOldIdError.description``
* ``sphinx.domains.cpp.UnsupportedMultiCharacterCharLiteral.decoded``
* ``sphinx.ext.autodoc.importer._MockImporter``
* ``sphinx.ext.autosummary.Autosummary.warn()``
* ``sphinx.ext.autosummary.Autosummary.genopt``
* ``sphinx.ext.autosummary.Autosummary.warnings``
* ``sphinx.ext.autosummary.Autosummary.result``
* ``sphinx.ext.doctest.doctest_encode()``
* ``sphinx.io.SphinxBaseFileInput``
* ``sphinx.io.SphinxFileInput.supported``
* ``sphinx.io.SphinxRSTFileInput``
* ``sphinx.registry.SphinxComponentRegistry.add_source_input()``
* ``sphinx.roles.abbr_role()``
* ``sphinx.roles.emph_literal_role()``
* ``sphinx.roles.menusel_role()``
* ``sphinx.roles.index_role()``
* ``sphinx.roles.indexmarkup_role()``
* ``sphinx.testing.util.remove_unicode_literal()``
* ``sphinx.util.attrdict``
* ``sphinx.util.force_decode()``
* ``sphinx.util.get_matching_docs()``
* ``sphinx.util.inspect.Parameter``
* ``sphinx.util.jsonimpl``
* ``sphinx.util.osutil.EEXIST``
* ``sphinx.util.osutil.EINVAL``
* ``sphinx.util.osutil.ENOENT``
* ``sphinx.util.osutil.EPIPE``
* ``sphinx.util.osutil.walk()``
* ``sphinx.util.PeekableIterator``
* ``sphinx.util.pycompat.NoneType``
* ``sphinx.util.pycompat.TextIOWrapper``
* ``sphinx.util.pycompat.UnicodeMixin``
* ``sphinx.util.pycompat.htmlescape``
* ``sphinx.util.pycompat.indent``
* ``sphinx.util.pycompat.sys_encoding``
* ``sphinx.util.pycompat.terminal_safe()``
* ``sphinx.util.pycompat.u``
* ``sphinx.writers.latex.ExtBabel``
* ``sphinx.writers.latex.LaTeXTranslator._make_visit_admonition()``
* ``sphinx.writers.latex.LaTeXTranslator.babel_defmacro()``
* ``sphinx.writers.latex.LaTeXTranslator.collect_footnotes()``
* ``sphinx.writers.latex.LaTeXTranslator.generate_numfig_format()``
* ``sphinx.writers.texinfo.TexinfoTranslator._make_visit_admonition()``
* ``sphinx.writers.text.TextTranslator._make_depart_admonition()``
* template variables for LaTeX template

  - ``logo``
  - ``numfig_format``
  - ``pageautorefname``
  - ``translatablestrings``

For more details, see :ref:`deprecation APIs list &lt;dev-deprecated-apis&gt;`.

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

* 1618: The search results preview of generated HTML documentation is
  reader-friendlier: instead of showing the snippets as raw reStructuredText
  markup, Sphinx now renders the corresponding HTML.  This means the Sphinx
  extension `Sphinx: pretty search results`__ is no longer necessary.  Note that
  changes to the search function of your custom or 3rd-party HTML template might
  overwrite this improvement.

  __ https://github.com/sphinx-contrib/sphinx-pretty-searchresults

* 4182: autodoc: Support :confval:`suppress_warnings`
* 5533: autodoc: :confval:`autodoc_default_options` supports ``member-order``
* 5394: autodoc: Display readable names in type annotations for mocked objects
* 5459: autodoc: :confval:`autodoc_default_options` accepts ``True`` as a value
* 1148: autodoc: Add :rst:dir:`autodecorator` directive for decorators
* 5635: autosummary: Add :confval:`autosummary_mock_imports` to mock external
  libraries on importing targets
* 4018: htmlhelp: Add :confval:`htmlhelp_file_suffix` and
  :confval:`htmlhelp_link_suffix`
* 5559: text: Support complex tables (colspan and rowspan)
* LaTeX: support rendering (not in math, yet) of Greek and Cyrillic Unicode
  letters in non-Cyrillic document even with ``&#39;pdflatex&#39;`` as
  :confval:`latex_engine` (refs: 5645)
* 5660: The ``versionadded``, ``versionchanged`` and ``deprecated`` directives
  are now generated with their own specific CSS classes
  (``added``, ``changed`` and ``deprecated``, respectively) in addition to the
  generic ``versionmodified`` class.
* 5841: apidoc: Add --extensions option to sphinx-apidoc
* 4981: C++, added an alias directive for inserting lists of declarations,
  that references existing declarations (e.g., for making a synopsis).
* C++: add ``cpp:struct`` to complement ``cpp:class``.
* 1341 the HTML search considers words that contain a search term of length
  three or longer a match.
* 4611: epub: Show warning for duplicated ToC entries
* 1851: Allow to omit an argument for :rst:dir:`code-block` directive.  If
  omitted, it follows :rst:dir:`highlight` or :confval:`highlight_language`
* 4587: html: Add :confval:`html4_writer` to use old HTML4 writer
* 6016: HTML search: A placeholder for the search summary prevents search
  result links from changing their position when the search terminates.  This
  makes navigating search results easier.
* 5196: linkcheck also checks remote images exist
* 5924: githubpages: create CNAME file for custom domains when
  :confval:`html_baseurl` set
* 4261: autosectionlabel: restrict the labeled sections by new config value;
  :confval:`autosectionlabel_maxdepth`


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

* 1682: LaTeX: writer should not translate Greek unicode, but use textgreek
  package
* 5247: LaTeX: PDF does not build with default font config for Russian
  language and ``&#39;xelatex&#39;`` or ``&#39;lualatex&#39;`` as :confval:`latex_engine`
  (refs: 5251)
* 5248: LaTeX: Greek letters in section titles disappear from PDF bookmarks
* 5249: LaTeX: Unicode Greek letters in math directive break PDF build
  (fix requires extra set-up, see :confval:`latex_elements` ``&#39;textgreek&#39;`` key
  and/or :confval:`latex_engine` setting)
* 5772: LaTeX: should the Bjarne style of fncychap be used for English also
  if passed as language option?
* 5179: LaTeX: (lualatex only) escaping of ``&gt;`` by ``\textgreater{}`` is not
  enough as ``\textgreater{}\textgreater{}`` applies TeX-ligature
* LaTeX: project name is not escaped if :confval:`latex_documents` omitted
* LaTeX: authors are not shown if :confval:`latex_documents` omitted
* HTML: Invalid HTML5 file is generated for a glossary having multiple terms for
  one description (refs: 4611)
* QtHelp: OS dependent path separator is used in .qhp file
* HTML search: search always returns nothing when multiple search terms are
  used and one term is shorter than three characters

Testing
--------

* Stop to use ``SPHINX_TEST_TEMPDIR`` envvar
   ```
   
  
  
   ### 1.8.6
   ```
   Dependencies
------------

Incompatible changes
--------------------

Deprecated
----------

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

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

Testing
--------
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/sphinx
  - Changelog: https://pyup.io/changelogs/sphinx/
  - Homepage: http://sphinx-doc.org/
</details>







Co-authored-by: pyup-bot <github-bot@pyup.io>
Co-authored-by: Mike Cooper <mythmon@gmail.com>
@nicoddemus

This comment has been minimized.

Copy link
Member

nicoddemus commented Apr 2, 2019

pytest-subtests 0.1.0 is out. Would appreciate if people could give it a try and let me know if they encounter any issues in https://github.com/pytest-dev/pytest-subtests/issues. 👍

I'm closing this now then; if we decide to merge this into the core in the future we can create a new issue.

Thanks everyone for participating!

@nicoddemus nicoddemus closed this Apr 2, 2019

@PiDelport

This comment has been minimized.

Copy link
Author

PiDelport commented Apr 2, 2019

Yaaay! Thank you. 😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.