bpo-30144: Import collections ABC from collections.abc rather than collections. ...
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 24 Apr 2017 06:05:00 +0000 (09:05 +0300)
committerGitHub <noreply@github.com>
Mon, 24 Apr 2017 06:05:00 +0000 (09:05 +0300)
22 files changed:
Doc/library/http.client.rst
Doc/reference/datamodel.rst
Lib/asyncio/base_events.py
Lib/cgi.py
Lib/dbm/dumb.py
Lib/http/client.py
Lib/idlelib/pyparse.py
Lib/lib2to3/fixes/fix_operator.py
Lib/locale.py
Lib/logging/__init__.py
Lib/pathlib.py
Lib/selectors.py
Lib/shelve.py
Lib/test/test_dictviews.py
Lib/test/test_functools.py
Lib/test/test_hash.py
Lib/test/test_pathlib.py
Lib/test/test_statistics.py
Lib/test/test_typing.py
Lib/tracemalloc.py
Lib/weakref.py
Lib/xml/etree/ElementTree.py

index 2f59ecebbd5bfe8b81e45eba28a875ff769ed985..53de40f63ca471042f72aba653dc2a3dfaafb943 100644 (file)
@@ -372,7 +372,7 @@ also send your request step by step, by using the four functions below.
    Section 3.3.1.  How the data is encoded is dependent on the type of
    *message_body*.  If *message_body* implements the :ref:`buffer interface
    <bufferobjects>` the encoding will result in a single chunk.
-   If *message_body* is a :class:`collections.Iterable`, each iteration
+   If *message_body* is a :class:`collections.abc.Iterable`, each iteration
    of *message_body* will result in a chunk.  If *message_body* is a
    :term:`file object`, each call to ``.read()`` will result in a chunk.
    The method automatically signals the end of the chunk-encoded data
index 35925a065fd495be91ac0307fd2b369195d68878..058fa90e1613bbbf1e0bedf9dcae8be463e74f84 100644 (file)
@@ -1375,7 +1375,7 @@ Basic customization
    :meth:`__hash__` method of a class is ``None``, instances of the class will
    raise an appropriate :exc:`TypeError` when a program attempts to retrieve
    their hash value, and will also be correctly identified as unhashable when
-   checking ``isinstance(obj, collections.Hashable)``.
+   checking ``isinstance(obj, collections.abc.Hashable)``.
 
    If a class that overrides :meth:`__eq__` needs to retain the implementation
    of :meth:`__hash__` from a parent class, the interpreter must be told this
@@ -1385,7 +1385,7 @@ Basic customization
    support, it should include ``__hash__ = None`` in the class definition.
    A class which defines its own :meth:`__hash__` that explicitly raises
    a :exc:`TypeError` would be incorrectly identified as hashable by
-   an ``isinstance(obj, collections.Hashable)`` call.
+   an ``isinstance(obj, collections.abc.Hashable)`` call.
 
 
    .. note::
@@ -1981,7 +1981,7 @@ range of items.  It is also recommended that mappings provide the methods
 :meth:`keys`, :meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`,
 :meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy`, and
 :meth:`update` behaving similar to those for Python's standard dictionary
-objects.  The :mod:`collections` module provides a
+objects.  The :mod:`collections.abc` module provides a
 :class:`~collections.abc.MutableMapping`
 abstract base class to help create those methods from a base set of
 :meth:`__getitem__`, :meth:`__setitem__`, :meth:`__delitem__`, and :meth:`keys`.
index f94ec9275a17cb34d4b05d827dc2d649db344069..6624ac1d88d701a25d50d87fe1d515d489f7dbe2 100644 (file)
@@ -14,6 +14,7 @@ to modify the meaning of the API call itself.
 """
 
 import collections
+import collections.abc
 import concurrent.futures
 import heapq
 import itertools
@@ -1001,7 +1002,7 @@ class BaseEventLoop(events.AbstractEventLoop):
             if host == '':
                 hosts = [None]
             elif (isinstance(host, str) or
-                  not isinstance(host, collections.Iterable)):
+                  not isinstance(host, collections.abc.Iterable)):
                 hosts = [host]
             else:
                 hosts = host
index 233a496e8170abb3f8744881835a47516c76c497..14d15a692ba4ab723eb42cad657064d5ea621992 100755 (executable)
@@ -32,7 +32,7 @@ __version__ = "2.6"
 # =======
 
 from io import StringIO, BytesIO, TextIOWrapper
-from collections import Mapping
+from collections.abc import Mapping
 import sys
 import os
 import urllib.parse
index c3c4a666011e9bd1edc97a4cd2a3ecbd5f8c13e5..5064668c77ea74e30ae82572766724d59f79c109 100644 (file)
@@ -24,7 +24,7 @@ is read when the database is opened, and some updates rewrite the whole index)
 import ast as _ast
 import io as _io
 import os as _os
-import collections
+import collections.abc
 
 __all__ = ["error", "open"]
 
@@ -32,7 +32,7 @@ _BLOCKSIZE = 512
 
 error = OSError
 
-class _Database(collections.MutableMapping):
+class _Database(collections.abc.MutableMapping):
 
     # The on-disk directory and data files can remain in mutually
     # inconsistent states for an arbitrarily long time (see comments
index 0234199dfa9207a71ae46927aae47d248a4d8247..0f660710a72407c44809c1048efdf15568f28036 100644 (file)
@@ -74,7 +74,7 @@ import http
 import io
 import re
 import socket
-import collections
+import collections.abc
 from urllib.parse import urlsplit
 
 # HTTPMessage, parse_headers(), and the HTTP status code constants are
@@ -977,7 +977,7 @@ class HTTPConnection:
         try:
             self.sock.sendall(data)
         except TypeError:
-            if isinstance(data, collections.Iterable):
+            if isinstance(data, collections.abc.Iterable):
                 for d in data:
                     self.sock.sendall(d)
             else:
index 6739dfd1a07a6be70d0fa36647e4afc54ac7fd1e..536b2d7f5fef73c28ef8acf69add8df38ff0f4b4 100644 (file)
@@ -1,4 +1,4 @@
-from collections import Mapping
+from collections.abc import Mapping
 import re
 import sys
 
index 1aa17bae58da8c438fbe2fc8b65e2133ae9af3d0..592444e2580451ea70ac99dbed63566fec86d0e6 100644 (file)
@@ -9,7 +9,7 @@ operator.repeat(obj, n)        -> operator.mul(obj, n)
 operator.irepeat(obj, n)       -> operator.imul(obj, n)
 """
 
-import collections
+import collections.abc
 
 # Local imports
 from lib2to3 import fixer_base
@@ -88,7 +88,7 @@ class FixOperator(fixer_base.BaseFix):
 
     def _check_method(self, node, results):
         method = getattr(self, "_" + results["method"][0].value)
-        if isinstance(method, collections.Callable):
+        if isinstance(method, collections.abc.Callable):
             if "module" in results:
                 return method
             else:
index 5763b14c9dbb320d721b038f4392a70204637252..569fe854dbb69cdcbcf635b7b99f72d228a447fd 100644 (file)
@@ -14,7 +14,7 @@ import sys
 import encodings
 import encodings.aliases
 import re
-import collections
+import collections.abc
 from builtins import str as _builtin_str
 import functools
 import warnings
@@ -215,7 +215,7 @@ def format_string(f, val, grouping=False, monetary=False):
     percents = list(_percent_re.finditer(f))
     new_f = _percent_re.sub('%s', f)
 
-    if isinstance(val, collections.Mapping):
+    if isinstance(val, collections.abc.Mapping):
         new_val = []
         for perc in percents:
             if perc.group()[-1]=='%':
index 49a069255ffd56529e597ce7e355ebb1824628a7..49203838a99796ec597f6dd078b1864abec17cb1 100644 (file)
@@ -23,7 +23,7 @@ Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved.
 To use, simply 'import logging' and log away!
 """
 
-import sys, os, time, io, traceback, warnings, weakref, collections
+import sys, os, time, io, traceback, warnings, weakref, collections.abc
 
 from string import Template
 
@@ -273,8 +273,8 @@ class LogRecord(object):
         # to hasattr(args[0], '__getitem__'). However, the docs on string
         # formatting still seem to suggest a mapping object is required.
         # Thus, while not removing the isinstance check, it does now look
-        # for collections.Mapping rather than, as before, dict.
-        if (args and len(args) == 1 and isinstance(args[0], collections.Mapping)
+        # for collections.abc.Mapping rather than, as before, dict.
+        if (args and len(args) == 1 and isinstance(args[0], collections.abc.Mapping)
             and args[0]):
             args = args[0]
         self.args = args
index 19142295c9b79f2a8d3c430c3817934036559437..4368eba8a0efe056a1750dc736abf0fffe813797 100644 (file)
@@ -6,7 +6,7 @@ import os
 import posixpath
 import re
 import sys
-from collections import Sequence
+from collections.abc import Sequence
 from errno import EINVAL, ENOENT, ENOTDIR
 from operator import attrgetter
 from stat import S_ISDIR, S_ISLNK, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO
index 89680a20a5be9e5b413813845f76e02f67859041..e7bc51773025158cb32959a50b18b885b353acee 100644 (file)
@@ -6,7 +6,8 @@ This module allows high-level and efficient I/O multiplexing, built upon the
 
 
 from abc import ABCMeta, abstractmethod
-from collections import namedtuple, Mapping
+from collections import namedtuple
+from collections.abc import Mapping
 import math
 import select
 import sys
index 581baf1e6f3fb451fb15e8c300784a4eb358927d..4a56c93ea01502b81ccefca69c070f47c96a454c 100644 (file)
@@ -59,11 +59,11 @@ the persistent dictionary on disk, if feasible).
 from pickle import Pickler, Unpickler
 from io import BytesIO
 
-import collections
+import collections.abc
 
 __all__ = ["Shelf", "BsdDbShelf", "DbfilenameShelf", "open"]
 
-class _ClosedDict(collections.MutableMapping):
+class _ClosedDict(collections.abc.MutableMapping):
     'Marker for a closed dict.  Access attempts raise a ValueError.'
 
     def closed(self, *args):
@@ -74,7 +74,7 @@ class _ClosedDict(collections.MutableMapping):
         return '<Closed Dictionary>'
 
 
-class Shelf(collections.MutableMapping):
+class Shelf(collections.abc.MutableMapping):
     """Base class for shelf implementations.
 
     This is initialized with a dictionary-like object.
index 49a9e9c007bfe05b3928d39cadb3175ae68ab0a3..51ad9b381c5d0f08768899b1c3c4dae5b5e9f6ee 100644 (file)
@@ -1,4 +1,4 @@
-import collections
+import collections.abc
 import copy
 import pickle
 import unittest
@@ -249,23 +249,23 @@ class DictSetTest(unittest.TestCase):
     def test_abc_registry(self):
         d = dict(a=1)
 
-        self.assertIsInstance(d.keys(), collections.KeysView)
-        self.assertIsInstance(d.keys(), collections.MappingView)
-        self.assertIsInstance(d.keys(), collections.Set)
-        self.assertIsInstance(d.keys(), collections.Sized)
-        self.assertIsInstance(d.keys(), collections.Iterable)
-        self.assertIsInstance(d.keys(), collections.Container)
-
-        self.assertIsInstance(d.values(), collections.ValuesView)
-        self.assertIsInstance(d.values(), collections.MappingView)
-        self.assertIsInstance(d.values(), collections.Sized)
-
-        self.assertIsInstance(d.items(), collections.ItemsView)
-        self.assertIsInstance(d.items(), collections.MappingView)
-        self.assertIsInstance(d.items(), collections.Set)
-        self.assertIsInstance(d.items(), collections.Sized)
-        self.assertIsInstance(d.items(), collections.Iterable)
-        self.assertIsInstance(d.items(), collections.Container)
+        self.assertIsInstance(d.keys(), collections.abc.KeysView)
+        self.assertIsInstance(d.keys(), collections.abc.MappingView)
+        self.assertIsInstance(d.keys(), collections.abc.Set)
+        self.assertIsInstance(d.keys(), collections.abc.Sized)
+        self.assertIsInstance(d.keys(), collections.abc.Iterable)
+        self.assertIsInstance(d.keys(), collections.abc.Container)
+
+        self.assertIsInstance(d.values(), collections.abc.ValuesView)
+        self.assertIsInstance(d.values(), collections.abc.MappingView)
+        self.assertIsInstance(d.values(), collections.abc.Sized)
+
+        self.assertIsInstance(d.items(), collections.abc.ItemsView)
+        self.assertIsInstance(d.items(), collections.abc.MappingView)
+        self.assertIsInstance(d.items(), collections.abc.Set)
+        self.assertIsInstance(d.items(), collections.abc.Sized)
+        self.assertIsInstance(d.items(), collections.abc.Iterable)
+        self.assertIsInstance(d.items(), collections.abc.Container)
 
 
 if __name__ == "__main__":
index 29ea49362262dd0d4d30172abd094a0cab930f93..8eede7a684956aa4ff784b880b48cc230d8c2124 100644 (file)
@@ -1,6 +1,7 @@
 import abc
 import builtins
 import collections
+import collections.abc
 import copy
 from itertools import permutations
 import pickle
@@ -910,7 +911,7 @@ class TestCmpToKey:
         key = self.cmp_to_key(mycmp)
         k = key(10)
         self.assertRaises(TypeError, hash, k)
-        self.assertNotIsInstance(k, collections.Hashable)
+        self.assertNotIsInstance(k, collections.abc.Hashable)
 
 
 @unittest.skipUnless(c_functools, 'requires the C _functools module')
@@ -1707,7 +1708,7 @@ class TestSingleDispatch(unittest.TestCase):
 
     def test_compose_mro(self):
         # None of the examples in this test depend on haystack ordering.
-        c = collections
+        c = collections.abc
         mro = functools._compose_mro
         bases = [c.Sequence, c.MutableMapping, c.Mapping, c.Set]
         for haystack in permutations(bases):
@@ -1715,10 +1716,10 @@ class TestSingleDispatch(unittest.TestCase):
             self.assertEqual(m, [dict, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
-        bases = [c.Container, c.Mapping, c.MutableMapping, c.OrderedDict]
+        bases = [c.Container, c.Mapping, c.MutableMapping, collections.OrderedDict]
         for haystack in permutations(bases):
-            m = mro(c.ChainMap, haystack)
-            self.assertEqual(m, [c.ChainMap, c.MutableMapping, c.Mapping,
+            m = mro(collections.ChainMap, haystack)
+            self.assertEqual(m, [collections.ChainMap, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
 
@@ -1728,39 +1729,39 @@ class TestSingleDispatch(unittest.TestCase):
         # test_mro_conflicts).
         bases = [c.Container, c.Sized, str]
         for haystack in permutations(bases):
-            m = mro(c.defaultdict, [c.Sized, c.Container, str])
-            self.assertEqual(m, [c.defaultdict, dict, c.Sized, c.Container,
-                                 object])
+            m = mro(collections.defaultdict, [c.Sized, c.Container, str])
+            self.assertEqual(m, [collections.defaultdict, dict, c.Sized,
+                                 c.Container, object])
 
         # MutableSequence below is registered directly on D. In other words, it
         # precedes MutableMapping which means single dispatch will always
         # choose MutableSequence here.
-        class D(c.defaultdict):
+        class D(collections.defaultdict):
             pass
         c.MutableSequence.register(D)
         bases = [c.MutableSequence, c.MutableMapping]
         for haystack in permutations(bases):
             m = mro(D, bases)
             self.assertEqual(m, [D, c.MutableSequence, c.Sequence, c.Reversible,
-                                 c.defaultdict, dict, c.MutableMapping, c.Mapping,
+                                 collections.defaultdict, dict, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable, c.Container,
                                  object])
 
         # Container and Callable are registered on different base classes and
         # a generic function supporting both should always pick the Callable
         # implementation if a C instance is passed.
-        class C(c.defaultdict):
+        class C(collections.defaultdict):
             def __call__(self):
                 pass
         bases = [c.Sized, c.Callable, c.Container, c.Mapping]
         for haystack in permutations(bases):
             m = mro(C, haystack)
-            self.assertEqual(m, [C, c.Callable, c.defaultdict, dict, c.Mapping,
+            self.assertEqual(m, [C, c.Callable, collections.defaultdict, dict, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
 
     def test_register_abc(self):
-        c = collections
+        c = collections.abc
         d = {"a": "b"}
         l = [1, 2, 3]
         s = {object(), None}
@@ -1786,7 +1787,7 @@ class TestSingleDispatch(unittest.TestCase):
         self.assertEqual(g(s), "sized")
         self.assertEqual(g(f), "sized")
         self.assertEqual(g(t), "sized")
-        g.register(c.ChainMap, lambda obj: "chainmap")
+        g.register(collections.ChainMap, lambda obj: "chainmap")
         self.assertEqual(g(d), "mutablemapping")  # irrelevant ABCs registered
         self.assertEqual(g(l), "sized")
         self.assertEqual(g(s), "sized")
@@ -1854,7 +1855,7 @@ class TestSingleDispatch(unittest.TestCase):
         self.assertEqual(g(t), "tuple")
 
     def test_c3_abc(self):
-        c = collections
+        c = collections.abc
         mro = functools._c3_mro
         class A(object):
             pass
@@ -1895,7 +1896,7 @@ class TestSingleDispatch(unittest.TestCase):
         self.assertEqual(fun(aa), 'fun A')
 
     def test_mro_conflicts(self):
-        c = collections
+        c = collections.abc
         @functools.singledispatch
         def g(arg):
             return "base"
@@ -1956,7 +1957,7 @@ class TestSingleDispatch(unittest.TestCase):
         # MutableMapping's bases implicit as well from defaultdict's
         # perspective.
         with self.assertRaises(RuntimeError) as re_two:
-            h(c.defaultdict(lambda: 0))
+            h(collections.defaultdict(lambda: 0))
         self.assertIn(
             str(re_two.exception),
             (("Ambiguous dispatch: <class 'collections.abc.Container'> "
@@ -1964,7 +1965,7 @@ class TestSingleDispatch(unittest.TestCase):
              ("Ambiguous dispatch: <class 'collections.abc.Sized'> "
               "or <class 'collections.abc.Container'>")),
         )
-        class R(c.defaultdict):
+        class R(collections.defaultdict):
             pass
         c.MutableSequence.register(R)
         @functools.singledispatch
@@ -2041,7 +2042,7 @@ class TestSingleDispatch(unittest.TestCase):
         _orig_wkd = functools.WeakKeyDictionary
         td = TracingDict()
         functools.WeakKeyDictionary = lambda: td
-        c = collections
+        c = collections.abc
         @functools.singledispatch
         def g(arg):
             return "base"
index aa4efbfd85fc5e147598a2fdaf2ec3c7bb729029..01dd7776fdaf6dd04d897049541c14ea21b6da35 100644 (file)
@@ -8,7 +8,7 @@ import os
 import sys
 import unittest
 from test.support.script_helper import assert_python_ok
-from collections import Hashable
+from collections.abc import Hashable
 
 IS_64BIT = sys.maxsize > 2**32
 
index 21a6390e352a85852987423a9908853fb34d0504..138bc06317f5de1788b9af69f54577cf65fe6a16 100644 (file)
@@ -1,4 +1,4 @@
-import collections
+import collections.abc
 import io
 import os
 import errno
@@ -1408,7 +1408,7 @@ class _BasePathTest(object):
         P = self.cls
         p = P(BASE)
         it = p.glob("fileA")
-        self.assertIsInstance(it, collections.Iterator)
+        self.assertIsInstance(it, collections.abc.Iterator)
         _check(it, ["fileA"])
         _check(p.glob("fileB"), [])
         _check(p.glob("dir*/file*"), ["dirB/fileB", "dirC/fileC"])
@@ -1432,7 +1432,7 @@ class _BasePathTest(object):
         P = self.cls
         p = P(BASE)
         it = p.rglob("fileA")
-        self.assertIsInstance(it, collections.Iterator)
+        self.assertIsInstance(it, collections.abc.Iterator)
         _check(it, ["fileA"])
         _check(p.rglob("fileB"), ["dirB/fileB"])
         _check(p.rglob("*/fileA"), [])
index 4b3fd364a78fdc4aee69e77fabd6eb35fd0a1c6d..b577433e3f119057b5404eaaf00322c3f5bd7b1a 100644 (file)
@@ -4,6 +4,7 @@ approx_equal function.
 """
 
 import collections
+import collections.abc
 import decimal
 import doctest
 import math
@@ -218,8 +219,8 @@ class NumericTestCase(unittest.TestCase):
         if rel is None:
             rel = self.rel
         if (
-                isinstance(first, collections.Sequence) and
-                isinstance(second, collections.Sequence)
+                isinstance(first, collections.abc.Sequence) and
+                isinstance(second, collections.abc.Sequence)
             ):
             check = self._check_approx_seq
         else:
index f0070ec975791ac0afd5afc1f787efb9c2938745..20fc2219f7ba696f842dc765bf9994481ba0caa4 100644 (file)
@@ -2023,11 +2023,11 @@ class CollectionsAbcTests(BaseTestCase):
         self.assertIsSubclass(MMC, typing.Mapping)
 
         self.assertIsInstance(MMB[KT, VT](), typing.Mapping)
-        self.assertIsInstance(MMB[KT, VT](), collections.Mapping)
+        self.assertIsInstance(MMB[KT, VT](), collections_abc.Mapping)
 
-        self.assertIsSubclass(MMA, collections.Mapping)
-        self.assertIsSubclass(MMB, collections.Mapping)
-        self.assertIsSubclass(MMC, collections.Mapping)
+        self.assertIsSubclass(MMA, collections_abc.Mapping)
+        self.assertIsSubclass(MMB, collections_abc.Mapping)
+        self.assertIsSubclass(MMC, collections_abc.Mapping)
 
         self.assertIsSubclass(MMB[str, str], typing.Mapping)
         self.assertIsSubclass(MMC, MMA)
@@ -2039,9 +2039,9 @@ class CollectionsAbcTests(BaseTestCase):
         def g(): yield 0
         self.assertIsSubclass(G, typing.Generator)
         self.assertIsSubclass(G, typing.Iterable)
-        if hasattr(collections, 'Generator'):
-            self.assertIsSubclass(G, collections.Generator)
-        self.assertIsSubclass(G, collections.Iterable)
+        if hasattr(collections_abc, 'Generator'):
+            self.assertIsSubclass(G, collections_abc.Generator)
+        self.assertIsSubclass(G, collections_abc.Iterable)
         self.assertNotIsSubclass(type(g), G)
 
     @skipUnless(PY36, 'Python 3.6 required')
@@ -2057,15 +2057,15 @@ class CollectionsAbcTests(BaseTestCase):
         g = ns['g']
         self.assertIsSubclass(G, typing.AsyncGenerator)
         self.assertIsSubclass(G, typing.AsyncIterable)
-        self.assertIsSubclass(G, collections.AsyncGenerator)
-        self.assertIsSubclass(G, collections.AsyncIterable)
+        self.assertIsSubclass(G, collections_abc.AsyncGenerator)
+        self.assertIsSubclass(G, collections_abc.AsyncIterable)
         self.assertNotIsSubclass(type(g), G)
 
         instance = G()
         self.assertIsInstance(instance, typing.AsyncGenerator)
         self.assertIsInstance(instance, typing.AsyncIterable)
-        self.assertIsInstance(instance, collections.AsyncGenerator)
-        self.assertIsInstance(instance, collections.AsyncIterable)
+        self.assertIsInstance(instance, collections_abc.AsyncGenerator)
+        self.assertIsInstance(instance, collections_abc.AsyncIterable)
         self.assertNotIsInstance(type(g), G)
         self.assertNotIsInstance(g, G)
 
@@ -2102,23 +2102,23 @@ class CollectionsAbcTests(BaseTestCase):
         self.assertIsSubclass(D, B)
 
         class M(): ...
-        collections.MutableMapping.register(M)
+        collections_abc.MutableMapping.register(M)
         self.assertIsSubclass(M, typing.Mapping)
 
     def test_collections_as_base(self):
 
-        class M(collections.Mapping): ...
+        class M(collections_abc.Mapping): ...
         self.assertIsSubclass(M, typing.Mapping)
         self.assertIsSubclass(M, typing.Iterable)
 
-        class S(collections.MutableSequence): ...
+        class S(collections_abc.MutableSequence): ...
         self.assertIsSubclass(S, typing.MutableSequence)
         self.assertIsSubclass(S, typing.Iterable)
 
-        class I(collections.Iterable): ...
+        class I(collections_abc.Iterable): ...
         self.assertIsSubclass(I, typing.Iterable)
 
-        class A(collections.Mapping, metaclass=abc.ABCMeta): ...
+        class A(collections_abc.Mapping, metaclass=abc.ABCMeta): ...
         class B: ...
         A.register(B)
         self.assertIsSubclass(B, typing.Mapping)
index 75b391891f9b40c7775eebad157ba80aaee0b3b3..597a2978afe0cdb40d24d22c5a7e7cd39de8494b 100644 (file)
@@ -1,4 +1,4 @@
-from collections import Sequence, Iterable
+from collections.abc import Sequence, Iterable
 from functools import total_ordering
 import fnmatch
 import linecache
index 787e33a327c4f63e0ae874cfcbe6fdb8770d4271..1802f32a20633bf4c61662c1cb07fce76fda48f9 100644 (file)
@@ -21,7 +21,7 @@ from _weakref import (
 
 from _weakrefset import WeakSet, _IterationGuard
 
-import collections  # Import after _weakref to avoid circular import.
+import collections.abc  # Import after _weakref to avoid circular import.
 import sys
 import itertools
 
@@ -87,7 +87,7 @@ class WeakMethod(ref):
     __hash__ = ref.__hash__
 
 
-class WeakValueDictionary(collections.MutableMapping):
+class WeakValueDictionary(collections.abc.MutableMapping):
     """Mapping class that references values weakly.
 
     Entries in the dictionary will be discarded when no strong
@@ -340,7 +340,7 @@ class KeyedRef(ref):
         super().__init__(ob, callback)
 
 
-class WeakKeyDictionary(collections.MutableMapping):
+class WeakKeyDictionary(collections.abc.MutableMapping):
     """ Mapping class that references keys weakly.
 
     Entries in the dictionary will be discarded when there is no
index 7944cf100faaafd411e176f72a07e82e41524366..7caef553efb33c67afe3e5e47fbee9c73e6a3106 100644 (file)
@@ -96,6 +96,7 @@ import re
 import warnings
 import io
 import collections
+import collections.abc
 import contextlib
 
 from . import ElementPath
@@ -1231,7 +1232,7 @@ def iterparse(source, events=None, parser=None):
             if close_source:
                 source.close()
 
-    class IterParseIterator(collections.Iterator):
+    class IterParseIterator(collections.abc.Iterator):
         __next__ = iterator().__next__
     it = IterParseIterator()
     it.root = None