Drop support for EOL Python 3.5
This commit is contained in:
		
							parent
							
								
									f61d4ed9d5
								
							
						
					
					
						commit
						a642650e17
					
				|  | @ -89,7 +89,7 @@ Features | ||||||
| - Can run `unittest <https://docs.pytest.org/en/stable/unittest.html>`_ (or trial), | - Can run `unittest <https://docs.pytest.org/en/stable/unittest.html>`_ (or trial), | ||||||
|   `nose <https://docs.pytest.org/en/stable/nose.html>`_ test suites out of the box |   `nose <https://docs.pytest.org/en/stable/nose.html>`_ test suites out of the box | ||||||
| 
 | 
 | ||||||
| - Python 3.5+ and PyPy3 | - Python 3.6+ and PyPy3 | ||||||
| 
 | 
 | ||||||
| - Rich plugin architecture, with over 850+ `external plugins <http://plugincompat.herokuapp.com>`_ and thriving community | - Rich plugin architecture, with over 850+ `external plugins <http://plugincompat.herokuapp.com>`_ and thriving community | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| Installation and Getting Started | Installation and Getting Started | ||||||
| =================================== | =================================== | ||||||
| 
 | 
 | ||||||
| **Pythons**: Python 3.5, 3.6, 3.7, 3.8, 3.9, PyPy3 | **Pythons**: Python 3.6, 3.7, 3.8, 3.9, PyPy3 | ||||||
| 
 | 
 | ||||||
| **Platforms**: Linux and Windows | **Platforms**: Linux and Windows | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -69,7 +69,7 @@ Features | ||||||
| 
 | 
 | ||||||
| - Can run :ref:`unittest <unittest>` (including trial) and :ref:`nose <noseintegration>` test suites out of the box | - Can run :ref:`unittest <unittest>` (including trial) and :ref:`nose <noseintegration>` test suites out of the box | ||||||
| 
 | 
 | ||||||
| - Python 3.5+ and PyPy 3 | - Python 3.6+ and PyPy 3 | ||||||
| 
 | 
 | ||||||
| - Rich plugin architecture, with over 315+ `external plugins <http://plugincompat.herokuapp.com>`_ and thriving community | - Rich plugin architecture, with over 315+ `external plugins <http://plugincompat.herokuapp.com>`_ and thriving community | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ filterwarnings = [ | ||||||
|     "ignore:.*U.*mode is deprecated:DeprecationWarning:(?!(pytest|_pytest))", |     "ignore:.*U.*mode is deprecated:DeprecationWarning:(?!(pytest|_pytest))", | ||||||
|     # produced by pytest-xdist |     # produced by pytest-xdist | ||||||
|     "ignore:.*type argument to addoption.*:DeprecationWarning", |     "ignore:.*type argument to addoption.*:DeprecationWarning", | ||||||
|     # produced by python >=3.5 on execnet (pytest-xdist) |     # produced on execnet (pytest-xdist) | ||||||
|     "ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning", |     "ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning", | ||||||
|     # pytest's own futurewarnings |     # pytest's own futurewarnings | ||||||
|     "ignore::pytest.PytestExperimentalApiWarning", |     "ignore::pytest.PytestExperimentalApiWarning", | ||||||
|  |  | ||||||
|  | @ -99,7 +99,7 @@ class AssertionRewritingHook(importlib.abc.MetaPathFinder, importlib.abc.Loader) | ||||||
|             spec is None |             spec is None | ||||||
|             # this is a namespace package (without `__init__.py`) |             # this is a namespace package (without `__init__.py`) | ||||||
|             # there's nothing to rewrite there |             # there's nothing to rewrite there | ||||||
|             # python3.5 - python3.6: `namespace` |             # python3.6: `namespace` | ||||||
|             # python3.7+: `None` |             # python3.7+: `None` | ||||||
|             or spec.origin == "namespace" |             or spec.origin == "namespace" | ||||||
|             or spec.origin is None |             or spec.origin is None | ||||||
|  | @ -1005,7 +1005,7 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|         return res, outer_expl |         return res, outer_expl | ||||||
| 
 | 
 | ||||||
|     def visit_Starred(self, starred: ast.Starred) -> Tuple[ast.Starred, str]: |     def visit_Starred(self, starred: ast.Starred) -> Tuple[ast.Starred, str]: | ||||||
|         # From Python 3.5, a Starred node can appear in a function call. |         # A Starred node can appear in a function call. | ||||||
|         res, expl = self.visit(starred.value) |         res, expl = self.visit(starred.value) | ||||||
|         new_starred = ast.Starred(res, starred.ctx) |         new_starred = ast.Starred(res, starred.ctx) | ||||||
|         return new_starred, "*" + expl |         return new_starred, "*" + expl | ||||||
|  |  | ||||||
|  | @ -497,8 +497,6 @@ class FDCapture(FDCaptureBinary): | ||||||
| class CaptureResult(Generic[AnyStr]): | class CaptureResult(Generic[AnyStr]): | ||||||
|     """The result of :method:`CaptureFixture.readouterr`.""" |     """The result of :method:`CaptureFixture.readouterr`.""" | ||||||
| 
 | 
 | ||||||
|     # Can't use slots in Python<3.5.3 due to https://bugs.python.org/issue31272 |  | ||||||
|     if sys.version_info >= (3, 5, 3): |  | ||||||
|     __slots__ = ("out", "err") |     __slots__ = ("out", "err") | ||||||
| 
 | 
 | ||||||
|     def __init__(self, out: AnyStr, err: AnyStr) -> None: |     def __init__(self, out: AnyStr, err: AnyStr) -> None: | ||||||
|  |  | ||||||
|  | @ -443,7 +443,7 @@ def approx(expected, rel=None, abs=None, nan_ok: bool = False) -> ApproxBase: | ||||||
|       both ``a`` and ``b``, this test is symmetric (i.e.  neither ``a`` nor |       both ``a`` and ``b``, this test is symmetric (i.e.  neither ``a`` nor | ||||||
|       ``b`` is a "reference value").  You have to specify an absolute tolerance |       ``b`` is a "reference value").  You have to specify an absolute tolerance | ||||||
|       if you want to compare to ``0.0`` because there is no tolerance by |       if you want to compare to ``0.0`` because there is no tolerance by | ||||||
|       default.  Only available in python>=3.5.  `More information...`__ |       default.  `More information...`__ | ||||||
| 
 | 
 | ||||||
|       __ https://docs.python.org/3/library/math.html#math.isclose |       __ https://docs.python.org/3/library/math.html#math.isclose | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -162,11 +162,6 @@ class TestRaises: | ||||||
| 
 | 
 | ||||||
|         class T: |         class T: | ||||||
|             def __call__(self): |             def __call__(self): | ||||||
|                 # Early versions of Python 3.5 have some bug causing the |  | ||||||
|                 # __call__ frame to still refer to t even after everything |  | ||||||
|                 # is done. This makes the test pass for them. |  | ||||||
|                 if sys.version_info < (3, 5, 2): |  | ||||||
|                     del self |  | ||||||
|                 raise ValueError |                 raise ValueError | ||||||
| 
 | 
 | ||||||
|         t = T() |         t = T() | ||||||
|  |  | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| import sys |  | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import Sequence | from typing import Sequence | ||||||
| from typing import Union | from typing import Union | ||||||
|  | @ -346,32 +345,6 @@ class TestReportSerialization: | ||||||
|         from subprocess to main process creates an artificial exception, which ExceptionInfo |         from subprocess to main process creates an artificial exception, which ExceptionInfo | ||||||
|         can't obtain the ReprFileLocation from. |         can't obtain the ReprFileLocation from. | ||||||
|         """ |         """ | ||||||
|         # somehow in Python 3.5 on Windows this test fails with: |  | ||||||
|         #   File "c:\...\3.5.4\x64\Lib\multiprocessing\connection.py", line 302, in _recv_bytes |  | ||||||
|         #     overlapped=True) |  | ||||||
|         # OSError: [WinError 6] The handle is invalid |  | ||||||
|         # |  | ||||||
|         # so in this platform we opted to use a mock traceback which is identical to the |  | ||||||
|         # one produced by the multiprocessing module |  | ||||||
|         if sys.version_info[:2] <= (3, 5) and sys.platform.startswith("win"): |  | ||||||
|             testdir.makepyfile( |  | ||||||
|                 """ |  | ||||||
|                 # equivalent of multiprocessing.pool.RemoteTraceback |  | ||||||
|                 class RemoteTraceback(Exception): |  | ||||||
|                     def __init__(self, tb): |  | ||||||
|                         self.tb = tb |  | ||||||
|                     def __str__(self): |  | ||||||
|                         return self.tb |  | ||||||
|                 def test_a(): |  | ||||||
|                     try: |  | ||||||
|                         raise ValueError('value error') |  | ||||||
|                     except ValueError as e: |  | ||||||
|                         # equivalent to how multiprocessing.pool.rebuild_exc does it |  | ||||||
|                         e.__cause__ = RemoteTraceback('runtime error') |  | ||||||
|                         raise e |  | ||||||
|             """ |  | ||||||
|             ) |  | ||||||
|         else: |  | ||||||
|         testdir.makepyfile( |         testdir.makepyfile( | ||||||
|             """ |             """ | ||||||
|             from concurrent.futures import ProcessPoolExecutor |             from concurrent.futures import ProcessPoolExecutor | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue