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

Pytest does not follow symlinks correctly when passed full path and tries to import conftest.py twice #4174

Closed
bertjwregeer opened this Issue Oct 17, 2018 · 4 comments

Comments

Projects
None yet
3 participants
@bertjwregeer

bertjwregeer commented Oct 17, 2018

This is an issue with the latest version of pytest, that didn't happen with pytest 3.8.2, likely related to the change at #4108

Here's the setup:

We set up a symlink for Jenkins that points the workspace to a new folder on different mount:

/jenkins/workspace -> /scratch0/workspace

According to Jenkins for a job, /jenkins/workspace/job-name/ is the $WORKSPACE.

We clone a project using pytest into /jenkins/workspace/job-name/pytest_example/, it looks like this:

.
./conftest.py  # contains: collect_ignore = ['ignore']
./ignore
./ignore/test_stuff.py
./tests
./tests/test_something.py

We then run (while in /jenkins/workspace/job-name/):

pytest $WORKSPACE/pytest_example/ignore/

This will blow up stating it is attempting to load a plugin again, here's an example from my local laptop, temp2 is a symlink to temp:

(testing) Riley:temp2 xistence$ pytest /Users/xistence/Projects/temp2/pytest_example/ignore/
Test session starts (platform: darwin, Python 3.7.0, pytest 3.9.1, pytest-sugar 0.9.1)
rootdir: /Users/xistence/Projects, inifile:
plugins: sugar-0.9.1, flake8-1.0.2, cov-2.6.0, backports.unittest-mock-1.4

―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ERROR collecting  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:388: in _getconftestmodules
    return self._path2confmods[directory]
E   KeyError: local('/Users/xistence/Projects/temp/pytest_example/ignore')

During handling of the above exception, another exception occurred:
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:416: in _importconftest
    return self._conftestpath2mod[conftestpath]
E   KeyError: local('/Users/xistence/Projects/temp/pytest_example/conftest.py')

During handling of the above exception, another exception occurred:
../../.ve/testing/lib/python3.7/site-packages/py/_path/common.py:377: in visit
    for x in Visitor(fil, rec, ignore, bf, sort).gen(self):
../../.ve/testing/lib/python3.7/site-packages/py/_path/common.py:418: in gen
    dirs = self.optsort([p for p in entries
../../.ve/testing/lib/python3.7/site-packages/py/_path/common.py:419: in <listcomp>
    if p.check(dir=1) and (rec is None or rec(p))])
../../.ve/testing/lib/python3.7/site-packages/_pytest/main.py:562: in _recurse
    ihook = self.gethookproxy(path.dirpath())
../../.ve/testing/lib/python3.7/site-packages/_pytest/main.py:422: in gethookproxy
    my_conftestmodules = pm._getconftestmodules(fspath)
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:399: in _getconftestmodules
    mod = self._importconftest(conftestpath)
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:450: in _importconftest
    self.consider_conftest(mod)
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:473: in consider_conftest
    self.register(conftestmodule, name=conftestmodule.__file__)
../../.ve/testing/lib/python3.7/site-packages/_pytest/config/__init__.py:296: in register
    ret = super(PytestPluginManager, self).register(plugin, name)
../../.ve/testing/lib/python3.7/site-packages/pluggy/manager.py:80: in register
    % (plugin_name, plugin, self._name2plugin)
E   ValueError: Plugin already registered: /Users/xistence/Projects/temp/pytest_example/conftest.py=<module 'conftest' from '/Users/xistence/Projects/temp/pytest_example/conftest.py'>
E   {'4387271288': <_pytest.config.PytestPluginManager object at 0x105807278>, 'pytestconfig': <_pytest.config.Config object at 0x1061d7e80>, 'mark': <module '_pytest.mark' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/mark/__init__.py'>, 'main': <module '_pytest.main' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/main.py'>, 'terminal': <module '_pytest.terminal' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/terminal.py'>, 'runner': <module '_pytest.runner' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/runner.py'>, 'python': <module '_pytest.python' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/python.py'>, 'fixtures': <module '_pytest.fixtures' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/fixtures.py'>, 'debugging': <module '_pytest.debugging' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/debugging.py'>, 'unittest': <module '_pytest.unittest' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/unittest.py'>, 'capture': <module '_pytest.capture' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/capture.py'>, 'skipping': <module '_pytest.skipping' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/skipping.py'>, 'tmpdir': <module '_pytest.tmpdir' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/tmpdir.py'>, 'monkeypatch': <module '_pytest.monkeypatch' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/monkeypatch.py'>, 'recwarn': <module '_pytest.recwarn' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/recwarn.py'>, 'pastebin': <module '_pytest.pastebin' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/pastebin.py'>, 'helpconfig': <module '_pytest.helpconfig' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/helpconfig.py'>, 'nose': <module '_pytest.nose' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/nose.py'>, 'assertion': <module '_pytest.assertion' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/assertion/__init__.py'>, 'junitxml': <module '_pytest.junitxml' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/junitxml.py'>, 'resultlog': <module '_pytest.resultlog' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/resultlog.py'>, 'doctest': <module '_pytest.doctest' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/doctest.py'>, 'cacheprovider': <module '_pytest.cacheprovider' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/cacheprovider.py'>, 'freeze_support': <module '_pytest.freeze_support' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/freeze_support.py'>, 'setuponly': <module '_pytest.setuponly' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/setuponly.py'>, 'setupplan': <module '_pytest.setupplan' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/setupplan.py'>, 'warnings': <module '_pytest.warnings' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/warnings.py'>, 'logging': <module '_pytest.logging' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/_pytest/logging.py'>, 'sugar': <module 'pytest_sugar' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/pytest_sugar.py'>, 'flake8': <module 'pytest_flake8' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/pytest_flake8.py'>, 'pytest_cov': <module 'pytest_cov.plugin' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/pytest_cov/plugin.py'>, 'unittest_mock': <module 'backports.unittest_mock' from '/Users/xistence/.ve/testing/lib/python3.7/site-packages/backports/unittest_mock/__init__.py'>, 'capturemanager': <_pytest.capture.CaptureManager object at 0x106b46588>, '/Users/xistence/Projects/temp/pytest_example/conftest.py': <module 'conftest' from '/Users/xistence/Projects/temp/pytest_example/conftest.py'>, 'session': <Session 'Projects'>, 'lfplugin': <_pytest.cacheprovider.LFPlugin object at 0x106b6a4a8>, 'nfplugin': <_pytest.cacheprovider.NFPlugin object at 0x106b6a518>, 'logging-plugin': <_pytest.logging.LoggingPlugin object at 0x106b6a710>, 'terminalreporter': <pytest_sugar.SugarTerminalReporter object at 0x106b6ab38>, 'funcmanage': <_pytest.fixtures.FixtureManager object at 0x1063ca048>}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Results (0.24s):

If we use a relative path instead:

(testing) Riley:temp2 xistence$ pytest pytest_example/ignore/
Test session starts (platform: darwin, Python 3.7.0, pytest 3.9.1, pytest-sugar 0.9.1)
rootdir: /Users/xistence/Projects/temp, inifile:
plugins: sugar-0.9.1, flake8-1.0.2, cov-2.6.0, backports.unittest-mock-1.4

 pytest_example/ignore/test_stuff.py ✓                                                                                                                                                                                                                                                                       50% █████     

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― test_false ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

    def test_false():
>       assert False
E       assert False

pytest_example/ignore/test_stuff.py:5: AssertionError

 pytest_example/ignore/test_stuff.py ⨯                                                                                                                                                                                                                                                                      100% ██████████

Results (0.06s):
       1 passed
       1 failed
         - pytest_example/ignore/test_stuff.py:4 test_false

Or if we use the real path (without the symlink in the middle):

testing) Riley:temp2 xistence$ pytest /Users/xistence/Projects/temp/pytest_example/ignore/
Test session starts (platform: darwin, Python 3.7.0, pytest 3.9.1, pytest-sugar 0.9.1)
rootdir: /Users/xistence/Projects/temp, inifile:
plugins: sugar-0.9.1, flake8-1.0.2, cov-2.6.0, backports.unittest-mock-1.4

 pytest_example/ignore/test_stuff.py ✓                                                                                                                                                                                                                                                                       50% █████     

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― test_false ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

    def test_false():
>       assert False
E       assert False

pytest_example/ignore/test_stuff.py:5: AssertionError

 pytest_example/ignore/test_stuff.py ⨯                                                                                                                                                                                                                                                                      100% ██████████

Results (0.06s):
       1 passed
       1 failed
         - pytest_example/ignore/test_stuff.py:4 test_false

@bertjwregeer bertjwregeer changed the title from Pytest rootdir does not follow symlinks and tries to import conftest.py twice to Pytest does not follow symlinks correctly when passed full path and tries to import conftest.py twice Oct 17, 2018

@nicoddemus

This comment has been minimized.

Member

nicoddemus commented Oct 17, 2018

Hi @bertjwregeerm, thanks for the report.

I'm short on time right now, but I'll cc @blueyed in case he wants to comment. 👍

@bertjwregeer

This comment has been minimized.

bertjwregeer commented Oct 17, 2018

No worries. The work-around of using the relative path works for us :-)

@blueyed

This comment has been minimized.

Contributor

blueyed commented Oct 22, 2018

JFI: I have a fix for this already, will create a PR later (might take a while):

diff --git c/src/_pytest/config/__init__.py i/src/_pytest/config/__init__.py
index 88cbf14b..14198455 100644
--- c/src/_pytest/config/__init__.py
+++ i/src/_pytest/config/__init__.py
@@ -380,6 +380,7 @@ def _getconftestmodules(self, path):
         if self._noconftest:
             return []
 
+        path = path.realpath()
         if path.isfile():
             directory = path.dirpath()
         else:
@blueyed

This comment has been minimized.

Contributor

blueyed commented Oct 22, 2018

Please test #4214 - it uses a simpler setup than outlined here (i.e. not the absolute path triggers it, but a symlink already).

blueyed added a commit to blueyed/pytest that referenced this issue Oct 23, 2018

blueyed added a commit to blueyed/pytest that referenced this issue Oct 23, 2018

pdonorio added a commit to proof-media/rchain-grpc that referenced this issue Oct 28, 2018

Update pytest to 3.9.3 (#16)
This PR updates [pytest](https://pypi.org/project/pytest) from **3.9.2** to **3.9.3**.



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

Bug Fixes
---------

- `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.


- `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.


- `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



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

- `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



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

- `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
   ```
   
  
</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>

peterbe added a commit to peterbe/django-peterbecom that referenced this issue Oct 28, 2018

Update pytest to 3.9.3 (#400)
This PR updates [pytest](https://pypi.org/project/pytest) from **3.9.2** to **3.9.3**.



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

Bug Fixes
---------

- `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.


- `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.


- `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



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

- `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



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

- `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
   ```
   
  
</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>

bors bot added a commit to rehandalal/therapist that referenced this issue Oct 30, 2018

Merge #43
43: Update pytest to 3.9.3 r=rehandalal a=pyup-bot


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



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

Bug Fixes
---------

- `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.


- `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.


- `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



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

- `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



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

- `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
   ```
   
  
  
   ### 3.9.2
   ```
   =========================

Bug Fixes
---------

- `2909 &lt;https://github.com/pytest-dev/pytest/issues/2909&gt;`_: Improve error message when a recursive dependency between fixtures is detected.


- `3340 &lt;https://github.com/pytest-dev/pytest/issues/3340&gt;`_: Fix logging messages not shown in hooks ``pytest_sessionstart()`` and ``pytest_sessionfinish()``.


- `3533 &lt;https://github.com/pytest-dev/pytest/issues/3533&gt;`_: Fix unescaped XML raw objects in JUnit report for skipped tests


- `3691 &lt;https://github.com/pytest-dev/pytest/issues/3691&gt;`_: Python 2: safely format warning message about passing unicode strings to ``warnings.warn``, which may cause
  surprising ``MemoryError`` exception when monkey patching ``warnings.warn`` itself.


- `4026 &lt;https://github.com/pytest-dev/pytest/issues/4026&gt;`_: Improve error message when it is not possible to determine a function&#39;s signature.


- `4177 &lt;https://github.com/pytest-dev/pytest/issues/4177&gt;`_: Pin ``setuptools&gt;=40.0`` to support ``py_modules`` in ``setup.cfg``


- `4179 &lt;https://github.com/pytest-dev/pytest/issues/4179&gt;`_: Restore the tmpdir behaviour of symlinking the current test run.


- `4192 &lt;https://github.com/pytest-dev/pytest/issues/4192&gt;`_: Fix filename reported by ``warnings.warn`` when using ``recwarn`` under python2.
   ```
   
  
  
   ### 3.9.1
   ```
   =========================

Features
--------

- `4159 &lt;https://github.com/pytest-dev/pytest/issues/4159&gt;`_: For test-suites containing test classes, the information about the subclassed
  module is now output only if a higher verbosity level is specified (at least
  &quot;-vv&quot;).
   ```
   
  
  
   ### 3.9.0
   ```
   =========================================================================

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

- `3616 &lt;https://github.com/pytest-dev/pytest/issues/3616&gt;`_: The following accesses have been documented as deprecated for years, but are now actually emitting deprecation warnings.

  * Access of ``Module``, ``Function``, ``Class``, ``Instance``, ``File`` and ``Item`` through ``Node`` instances. Now
    users will this warning::

          usage of Function.Module is deprecated, please use pytest.Module instead

    Users should just ``import pytest`` and access those objects using the ``pytest`` module.

  * ``request.cached_setup``, this was the precursor of the setup/teardown mechanism available to fixtures. You can
    consult `funcarg comparison section in the docs &lt;https://docs.pytest.org/en/latest/funcarg_compare.html&gt;`_.

  * Using objects named ``&quot;Class&quot;`` as a way to customize the type of nodes that are collected in ``Collector``
    subclasses has been deprecated. Users instead should use ``pytest_collect_make_item`` to customize node types during
    collection.

    This issue should affect only advanced plugins who create new collection types, so if you see this warning
    message please contact the authors so they can change the code.

  * The warning that produces the message below has changed to ``RemovedInPytest4Warning``::

          getfuncargvalue is deprecated, use getfixturevalue


- `3988 &lt;https://github.com/pytest-dev/pytest/issues/3988&gt;`_: Add a Deprecation warning for pytest.ensuretemp as it was deprecated since a while.



Features
--------

- `2293 &lt;https://github.com/pytest-dev/pytest/issues/2293&gt;`_: Improve usage errors messages by hiding internal details which can be distracting and noisy.

  This has the side effect that some error conditions that previously raised generic errors (such as
  ``ValueError`` for unregistered marks) are now raising ``Failed`` exceptions.


- `3332 &lt;https://github.com/pytest-dev/pytest/issues/3332&gt;`_: Improve the error displayed when a ``conftest.py`` file could not be imported.

  In order to implement this, a new ``chain`` parameter was added to ``ExceptionInfo.getrepr``
  to show or hide chained tracebacks in Python 3 (defaults to ``True``).


- `3849 &lt;https://github.com/pytest-dev/pytest/issues/3849&gt;`_: Add ``empty_parameter_set_mark=fail_at_collect`` ini option for raising an exception when parametrize collects an empty set.


- `3964 &lt;https://github.com/pytest-dev/pytest/issues/3964&gt;`_: Log messages generated in the collection phase are shown when
  live-logging is enabled and/or when they are logged to a file.


- `3985 &lt;https://github.com/pytest-dev/pytest/issues/3985&gt;`_: Introduce ``tmp_path`` as a fixture providing a Path object.


- `4013 &lt;https://github.com/pytest-dev/pytest/issues/4013&gt;`_: Deprecation warnings are now shown even if you customize the warnings filters yourself. In the previous version
  any customization would override pytest&#39;s filters and deprecation warnings would fall back to being hidden by default.


- `4073 &lt;https://github.com/pytest-dev/pytest/issues/4073&gt;`_: Allow specification of timeout for ``Testdir.runpytest_subprocess()`` and ``Testdir.run()``.


- `4098 &lt;https://github.com/pytest-dev/pytest/issues/4098&gt;`_: Add returncode argument to pytest.exit() to exit pytest with a specific return code.


- `4102 &lt;https://github.com/pytest-dev/pytest/issues/4102&gt;`_: Reimplement ``pytest.deprecated_call`` using ``pytest.warns`` so it supports the ``match=&#39;...&#39;`` keyword argument.

  This has the side effect that ``pytest.deprecated_call`` now raises ``pytest.fail.Exception`` instead
  of ``AssertionError``.


- `4149 &lt;https://github.com/pytest-dev/pytest/issues/4149&gt;`_: Require setuptools&gt;=30.3 and move most of the metadata to ``setup.cfg``.



Bug Fixes
---------

- `2535 &lt;https://github.com/pytest-dev/pytest/issues/2535&gt;`_: Improve error message when test functions of ``unittest.TestCase`` subclasses use a parametrized fixture.


- `3057 &lt;https://github.com/pytest-dev/pytest/issues/3057&gt;`_: ``request.fixturenames`` now correctly returns the name of fixtures created by ``request.getfixturevalue()``.


- `3946 &lt;https://github.com/pytest-dev/pytest/issues/3946&gt;`_: Warning filters passed as command line options using ``-W`` now take precedence over filters defined in ``ini``
  configuration files.


- `4066 &lt;https://github.com/pytest-dev/pytest/issues/4066&gt;`_: Fix source reindenting by using ``textwrap.dedent`` directly.


- `4102 &lt;https://github.com/pytest-dev/pytest/issues/4102&gt;`_: ``pytest.warn`` will capture previously-warned warnings in Python 2. Previously they were never raised.


- `4108 &lt;https://github.com/pytest-dev/pytest/issues/4108&gt;`_: Resolve symbolic links for args.

  This fixes running ``pytest tests/test_foo.py::test_bar``, where ``tests``
  is a symlink to ``project/app/tests``:
  previously ``project/app/conftest.py`` would be ignored for fixtures then.


- `4132 &lt;https://github.com/pytest-dev/pytest/issues/4132&gt;`_: Fix duplicate printing of internal errors when using ``--pdb``.


- `4135 &lt;https://github.com/pytest-dev/pytest/issues/4135&gt;`_: pathlib based tmpdir cleanup now correctly handles symlinks in the folder.


- `4152 &lt;https://github.com/pytest-dev/pytest/issues/4152&gt;`_: Display the filename when encountering ``SyntaxWarning``.



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

- `3713 &lt;https://github.com/pytest-dev/pytest/issues/3713&gt;`_: Update usefixtures documentation to clarify that it can&#39;t be used with fixture functions.


- `4058 &lt;https://github.com/pytest-dev/pytest/issues/4058&gt;`_: Update fixture documentation to specify that a fixture can be invoked twice in the scope it&#39;s defined for.


- `4064 &lt;https://github.com/pytest-dev/pytest/issues/4064&gt;`_: According to unittest.rst, setUpModule and tearDownModule were not implemented, but it turns out they are. So updated the documentation for unittest.


- `4151 &lt;https://github.com/pytest-dev/pytest/issues/4151&gt;`_: Add tempir testing example to CONTRIBUTING.rst guide



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

- `2293 &lt;https://github.com/pytest-dev/pytest/issues/2293&gt;`_: The internal ``MarkerError`` exception has been removed.


- `3988 &lt;https://github.com/pytest-dev/pytest/issues/3988&gt;`_: Port the implementation of tmpdir to pathlib.


- `4063 &lt;https://github.com/pytest-dev/pytest/issues/4063&gt;`_: Exclude 0.00 second entries from ``--duration`` output unless ``-vv`` is passed on the command-line.


- `4093 &lt;https://github.com/pytest-dev/pytest/issues/4093&gt;`_: Fixed formatting of string literals in internal tests.
   ```
   
  
</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 Oct 31, 2018

Merge #1605
1605: Scheduled weekly dependency update for week 43 r=peterbe a=pyup-bot






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


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

* api-change:``sagemaker``: Update sagemaker client to latest version
* api-change:``alexaforbusiness``: Update alexaforbusiness client to latest version
* api-change:``ssm``: Update ssm client to latest version
   ```
   
  
  
   ### 1.12.32
   ```
   =======

* api-change:``ec2``: Update ec2 client to latest version
   ```
   
  
  
   ### 1.12.31
   ```
   =======

* api-change:``codestar``: Update codestar client to latest version
* api-change:``alexaforbusiness``: Update alexaforbusiness client to latest version
   ```
   
  
  
   ### 1.12.30
   ```
   =======

* api-change:``ec2``: Update ec2 client to latest version
   ```
   
  
  
   ### 1.12.29
   ```
   =======

* api-change:``inspector``: Update inspector client to latest version
* api-change:``shield``: Update shield 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 [future](https://pypi.org/project/future) from **0.16.0** to **0.17.0**.


*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/future
  - Changelog: https://pyup.io/changelogs/future/
  - Homepage: https://python-future.org
  - Docs: https://pythonhosted.org/future/
</details>





### Update [python-dateutil](https://pypi.org/project/python-dateutil) from **2.7.3** to **2.7.5**.


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

Data updates
------------

- Updated tzdata version to 2018f.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/python-dateutil
  - Changelog: https://pyup.io/changelogs/python-dateutil/
  - Docs: https://dateutil.readthedocs.io
</details>





### Update [pytz](https://pypi.org/project/pytz) from **2018.5** to **2018.7**.


*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/pytz
  - Homepage: http://pythonhosted.org/pytz
  - Docs: https://pythonhosted.org/pytz/
</details>





### Update [setuptools](https://pypi.org/project/setuptools) from **40.4.3** to **40.5.0**.


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

* 1335: In ``pkg_resources.normalize_path``, fix issue on Cygwin when cwd contains symlinks.
* 1502: Deprecated support for downloads from Subversion in package_index/easy_install.
* 1517: Dropped use of six.u in favor of `u&quot;&quot;` literals.
* 1520: Added support for ``data_files`` in ``setup.cfg``.
* 1525: Fixed rendering of the deprecation warning in easy_install doc.
   ```
   
  
</details>


 

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





### Update [urllib3](https://pypi.org/project/urllib3) from **1.23** to **1.24**.


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

* Allow key_server_hostname to be specified when initializing a PoolManager to allow custom SNI to be overridden. (Pull 1449)

* Test against Python 3.7 on AppVeyor. (Pull 1453)

* Early-out ipv6 checks when running on App Engine. (Pull 1450)

* Change ambiguous description of backoff_factor (Pull 1436)

* Add ability to handle multiple Content-Encodings (Issue 1441 and Pull 1442)

* Skip DNS names that can&#39;t be idna-decoded when using pyOpenSSL (Issue 1405).

* Add a server_hostname parameter to HTTPSConnection which allows for
  overriding the SNI hostname sent in the handshake. (Pull 1397)

* Drop support for EOL Python 2.6 (Pull 1429 and Pull 1430)

* Fixed bug where responses with header Content-Type: message/* erroneously
  raised HeaderParsingError, resulting in a warning being logged. (Pull 1439)

* Move urllib3 to src/urllib3 (Pull 1409)
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/urllib3
  - Changelog: https://pyup.io/changelogs/urllib3/
  - Docs: https://urllib3.readthedocs.io/
</details>





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


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

* api-change:``sagemaker``: [``botocore``] Update sagemaker client to latest version
* api-change:``alexaforbusiness``: [``botocore``] Update alexaforbusiness client to latest version
* api-change:``ssm``: [``botocore``] Update ssm client to latest version
   ```
   
  
  
   ### 1.9.32
   ```
   ======

* api-change:``ec2``: [``botocore``] Update ec2 client to latest version
   ```
   
  
  
   ### 1.9.31
   ```
   ======

* api-change:``codestar``: [``botocore``] Update codestar client to latest version
* api-change:``alexaforbusiness``: [``botocore``] Update alexaforbusiness client to latest version
   ```
   
  
  
   ### 1.9.30
   ```
   ======

* api-change:``ec2``: [``botocore``] Update ec2 client to latest version
   ```
   
  
  
   ### 1.9.29
   ```
   ======

* api-change:``inspector``: [``botocore``] Update inspector client to latest version
* api-change:``shield``: [``botocore``] Update shield 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 [flake8](https://pypi.org/project/flake8) from **3.5.0** to **3.6.0**.


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

You can view the `3.6.0 milestone`_ on GitLab for more details.

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

- pycodestyle has been updated to &gt;= 2.4.0, &lt; 2.5.0 (See also `GitLab381`_,
  `GitLab415`_, `GitLab!212`_, `GitLab!230`_, `GitLab!231`_)

- Pyflakes has been updated to &gt;= 2.0.0, &lt; 2.1.0 (See also `GitLab422`_,
  `GitLab!239`_)

- flake8 requires python 2.x &gt;= 2.7 or python 3.x &gt;= 3.4 (See also
  `GitLab!225`_)

Features
~~~~~~~~

- Add ``paths`` to allow local plugins to exist outside of ``sys.path`` (See
  also `GitLab379`_, `GitLab!211`_)

- Copy ``setup.cfg`` files to the temporary git hook execution directory (See
  also `GitLab!215`_)

- Only skip a file if `` flake8: noqa`` is on a line by itself (See also
  `GitLab453`_, `GitLab!219`_)

- Provide a better user experience for broken plugins (See also `GitLab!221`_)

- Report ``E902`` when a file passed on the command line does not exist (See
  also `GitLab405`_, `GitLab!227`_)

- Add ``--extend-ignore`` for extending the default ``ignore`` instead of
  overriding it (See also `GitLab!233`_)

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

- Respect a formatter&#39;s newline setting when printing (See also `GitLab!222`_)

- Fix leaking of processes in the legacy api (See also `GitLab410`_,
  `GitLab!228`_)

- Fix a ``SyntaxWarning`` for an invalid escape sequence (See also
  `GitLab!244`_)

- Fix ``DeprecationWarning`` due to import of ``abc`` classes from the
  ``collections`` module (See also `GitLab!249`_)

- Defer ``setuptools`` import to improve flake8 startup time (See also
  `GitLab365`_, `GitLab!250`_)

- Fix inconsistent line endings in ``FileProcessor.lines`` when running under
  python 3.x (See also `GitLab457`_, `GitLab!255`_)


.. all links
.. _3.6.0 milestone:
    https://gitlab.com/pycqa/flake8/milestones/21

.. issue links
.. _GitLab365:
    https://gitlab.com/pycqa/flake8/issues/365
.. _GitLab379:
    https://gitlab.com/pycqa/flake8/issues/379
.. _GitLab381:
    https://gitlab.com/pycqa/flake8/issues/381
.. _GitLab405:
    https://gitlab.com/pycqa/flake8/issues/405
.. _GitLab410:
    https://gitlab.com/pycqa/flake8/issues/410
.. _GitLab415:
    https://gitlab.com/pycqa/flake8/issues/415
.. _GitLab422:
    https://gitlab.com/pycqa/flake8/issues/422
.. _GitLab453:
    https://gitlab.com/pycqa/flake8/issues/453
.. _GitLab457:
    https://gitlab.com/pycqa/flake8/issues/457

.. merge request links
.. _GitLab!211:
    https://gitlab.com/pycqa/flake8/merge_requests/211
.. _GitLab!212:
    https://gitlab.com/pycqa/flake8/merge_requests/212
.. _GitLab!215:
    https://gitlab.com/pycqa/flake8/merge_requests/215
.. _GitLab!219:
    https://gitlab.com/pycqa/flake8/merge_requests/219
.. _GitLab!221:
    https://gitlab.com/pycqa/flake8/merge_requests/221
.. _GitLab!222:
    https://gitlab.com/pycqa/flake8/merge_requests/222
.. _GitLab!225:
    https://gitlab.com/pycqa/flake8/merge_requests/225
.. _GitLab!227:
    https://gitlab.com/pycqa/flake8/merge_requests/227
.. _GitLab!228:
    https://gitlab.com/pycqa/flake8/merge_requests/228
.. _GitLab!230:
    https://gitlab.com/pycqa/flake8/merge_requests/230
.. _GitLab!231:
    https://gitlab.com/pycqa/flake8/merge_requests/231
.. _GitLab!233:
    https://gitlab.com/pycqa/flake8/merge_requests/233
.. _GitLab!239:
    https://gitlab.com/pycqa/flake8/merge_requests/239
.. _GitLab!244:
    https://gitlab.com/pycqa/flake8/merge_requests/244
.. _GitLab!249:
    https://gitlab.com/pycqa/flake8/merge_requests/249
.. _GitLab!250:
    https://gitlab.com/pycqa/flake8/merge_requests/250
.. _GitLab!255:
    https://gitlab.com/pycqa/flake8/merge_requests/255
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/flake8
  - Changelog: https://pyup.io/changelogs/flake8/
  - Repo: https://gitlab.com/pycqa/flake8
</details>





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


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

Bug Fixes
---------

- `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.


- `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.


- `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



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

- `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



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

- `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
   ```
   
  
  
   ### 3.9.2
   ```
   =========================

Bug Fixes
---------

- `2909 &lt;https://github.com/pytest-dev/pytest/issues/2909&gt;`_: Improve error message when a recursive dependency between fixtures is detected.


- `3340 &lt;https://github.com/pytest-dev/pytest/issues/3340&gt;`_: Fix logging messages not shown in hooks ``pytest_sessionstart()`` and ``pytest_sessionfinish()``.


- `3533 &lt;https://github.com/pytest-dev/pytest/issues/3533&gt;`_: Fix unescaped XML raw objects in JUnit report for skipped tests


- `3691 &lt;https://github.com/pytest-dev/pytest/issues/3691&gt;`_: Python 2: safely format warning message about passing unicode strings to ``warnings.warn``, which may cause
  surprising ``MemoryError`` exception when monkey patching ``warnings.warn`` itself.


- `4026 &lt;https://github.com/pytest-dev/pytest/issues/4026&gt;`_: Improve error message when it is not possible to determine a function&#39;s signature.


- `4177 &lt;https://github.com/pytest-dev/pytest/issues/4177&gt;`_: Pin ``setuptools&gt;=40.0`` to support ``py_modules`` in ``setup.cfg``


- `4179 &lt;https://github.com/pytest-dev/pytest/issues/4179&gt;`_: Restore the tmpdir behaviour of symlinking the current test run.


- `4192 &lt;https://github.com/pytest-dev/pytest/issues/4192&gt;`_: Fix filename reported by ``warnings.warn`` when using ``recwarn`` under python2.
   ```
   
  
</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-testrail](https://pypi.org/project/pytest-testrail) from **1.1.6** to **2.3.0**.


<details>
  <summary>Changelog</summary>
  
  
  
  
  
  
  
  
  
  
  
  
  
</details>


 

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







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

peterbe added a commit to mozilla-services/tecken that referenced this issue Oct 31, 2018

Update pytest to 3.9.3 (#1273)
This PR updates [pytest](https://pypi.org/project/pytest) from **3.9.2** to **3.9.3**.



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

Bug Fixes
---------

- `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.


- `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.


- `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.


- `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.



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

- `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``



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

- `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.


- `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.


- `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
   ```
   
  
</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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment