--- /dev/null
+.. change::
+ :tags: bug, py3k
+
+ Started importing "collections" from "collections.abc" under Python 3.3 and
+ greater for Python 3.8 compatibility. Pull request courtesy Nathaniel
+ Knight.
UniqueAppender, PopulateDict, EMPTY_SET, to_list, to_set, \
to_column_set, update_copy, flatten_iterator, has_intersection, \
LRUCache, ScopedRegistry, ThreadLocalRegistry, WeakSequence, \
- coerce_generator_arg, lightweight_named_tuple
+ coerce_generator_arg, lightweight_named_tuple, collections_abc
from .langhelpers import iterate_attributes, class_hierarchy, \
portable_instancemethod, unbound_method_to_callable, \
import weakref
import operator
from .compat import threading, itertools_filterfalse, string_types, \
- binary_types
+ binary_types, collections_abc
from . import py2k
import types
-import collections
+
EMPTY_SET = frozenset()
def to_list(x, default=None):
if x is None:
return default
- if not isinstance(x, collections.Iterable) or \
+ if not isinstance(x, collections_abc.Iterable) or \
isinstance(x, string_types + binary_types):
return [x]
elif isinstance(x, list):
exc = sys.exc_info()
if exc != (None, None, None):
reraise(exc[0], exc[1], exc[2])
+
+
+# Fix deprecation of accessing ABCs straight from collections module
+# (which will stop working in 3.8).
+if py33:
+ import collections.abc as collections_abc
+else:
+ import collections as collections_abc
+
return self.op("->")(index)
col = Column('x', MyType())
- assert not isinstance(col, collections.Iterable)
+ assert not isinstance(col, util.collections_abc.Iterable)
def test_lshift(self):
class MyType(UserDefinedType):