From 311110abcd8ab648dbf1803e36a8ba5d93fa019b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 11 Jun 2020 18:26:23 +0200 Subject: bpo-40275: Move TransientResource to test_urllib2net (GH-20812) Move TransientResource, time_out, socket_peer_reset and ioerror_peer_reset from test.support to test_urllib2net. Remove "import errno" from test.support. --- Doc/library/test.rst | 9 --------- Lib/test/support/__init__.py | 35 ----------------------------------- Lib/test/test_support.py | 1 - Lib/test/test_urllib2net.py | 40 +++++++++++++++++++++++++++++++++++++--- 4 files changed, 37 insertions(+), 48 deletions(-) diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 8432018..b39b601 100644 --- a/Doc/library/test.rst +++ b/Doc/library/test.rst @@ -922,15 +922,6 @@ The :mod:`test.support` module defines the following functions: The :mod:`test.support` module defines the following classes: -.. class:: TransientResource(exc, **kwargs) - - Instances are a context manager that raises :exc:`ResourceDenied` if the - specified exception type is raised. Any keyword arguments are treated as - attribute/value pairs to be compared against any exception raised within the - :keyword:`with` statement. Only if all pairs match properly against - attributes on the exception is :exc:`ResourceDenied` raised. - - .. class:: SuppressCrashReport() A context manager used to try to prevent crash dialog popups on tests that diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index fa54ebe..f078ad7 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -4,7 +4,6 @@ if __name__ != 'test.support': raise ImportError('support must be imported from the test package') import contextlib -import errno import functools import os import re @@ -49,7 +48,6 @@ __all__ = [ "is_resource_enabled", "requires", "requires_freebsd_version", "requires_linux_version", "requires_mac_ver", "check_syntax_error", - "TransientResource", "time_out", "socket_peer_reset", "ioerror_peer_reset", "BasicTestRunner", "run_unittest", "run_doctest", "requires_gzip", "requires_bz2", "requires_lzma", "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute", @@ -551,39 +549,6 @@ def open_urlresource(url, *args, **kw): raise TestFailed('invalid resource %r' % fn) -class TransientResource(object): - - """Raise ResourceDenied if an exception is raised while the context manager - is in effect that matches the specified exception and attributes.""" - - def __init__(self, exc, **kwargs): - self.exc = exc - self.attrs = kwargs - - def __enter__(self): - return self - - def __exit__(self, type_=None, value=None, traceback=None): - """If type_ is a subclass of self.exc and value has attributes matching - self.attrs, raise ResourceDenied. Otherwise let the exception - propagate (if any).""" - if type_ is not None and issubclass(self.exc, type_): - for attr, attr_value in self.attrs.items(): - if not hasattr(value, attr): - break - if getattr(value, attr) != attr_value: - break - else: - raise ResourceDenied("an optional resource is not available") - -# Context managers that raise ResourceDenied when various issues -# with the Internet connection manifest themselves as exceptions. -# XXX deprecate these and use transient_internet() instead -time_out = TransientResource(OSError, errno=errno.ETIMEDOUT) -socket_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET) -ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET) - - @contextlib.contextmanager def captured_output(stream_name): """Return a context manager used by captured_stdout/stdin/stderr diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index b5a16f9..a7d5b1b 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -660,7 +660,6 @@ class TestSupport(unittest.TestCase): # findfile # check_warnings # EnvironmentVarGuard - # TransientResource # transient_internet # run_with_locale # set_memlimit diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index ba4c500..cb74685 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -1,3 +1,4 @@ +import errno import unittest from test import support from test.support import socket_helper @@ -39,6 +40,39 @@ _urlopen_with_retry = _wrap_with_retry_thrice(urllib.request.urlopen, urllib.error.URLError) +class TransientResource(object): + + """Raise ResourceDenied if an exception is raised while the context manager + is in effect that matches the specified exception and attributes.""" + + def __init__(self, exc, **kwargs): + self.exc = exc + self.attrs = kwargs + + def __enter__(self): + return self + + def __exit__(self, type_=None, value=None, traceback=None): + """If type_ is a subclass of self.exc and value has attributes matching + self.attrs, raise ResourceDenied. Otherwise let the exception + propagate (if any).""" + if type_ is not None and issubclass(self.exc, type_): + for attr, attr_value in self.attrs.items(): + if not hasattr(value, attr): + break + if getattr(value, attr) != attr_value: + break + else: + raise ResourceDenied("an optional resource is not available") + +# Context managers that raise ResourceDenied when various issues +# with the Internet connection manifest themselves as exceptions. +# XXX deprecate these and use transient_internet() instead +time_out = TransientResource(OSError, errno=errno.ETIMEDOUT) +socket_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET) +ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET) + + class AuthTests(unittest.TestCase): """Tests urllib2 authentication features.""" @@ -237,9 +271,9 @@ class OtherNetworkTests(unittest.TestCase): raise else: try: - with support.time_out, \ - support.socket_peer_reset, \ - support.ioerror_peer_reset: + with time_out, \ + socket_peer_reset, \ + ioerror_peer_reset: buf = f.read() debug("read %d bytes" % len(buf)) except socket.timeout: -- cgit v0.12