Blob Blame History Raw
From fcfa1c50b2e5f0c4b93f14797d785bc8c5e23463 Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Thu, 8 Jul 2021 08:00:39 +0100
Subject: [PATCH 1/2] Fix collections import for Python 3.10

Collections abstract base classes are now imported from collections.abc:
https://docs.python.org/3/library/collections.html
---
 grako/grammars.py | 3 ++-
 grako/util.py     | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/grako/grammars.py b/grako/grammars.py
index 03df385..5c392d3 100644
--- a/grako/grammars.py
+++ b/grako/grammars.py
@@ -5,7 +5,8 @@ from __future__ import absolute_import, division, print_function, unicode_litera
 
 import os
 import functools
-from collections import defaultdict, Mapping
+from collections import defaultdict
+from collections.abc import Mapping
 from copy import copy
 
 from grako.util import indent, trim, ustr, urepr, strtype, compress_seq, chunks
diff --git a/grako/util.py b/grako/util.py
index dd9e04c..fe55e1f 100644
--- a/grako/util.py
+++ b/grako/util.py
@@ -188,7 +188,7 @@ def eval_escapes(s):
 
 def isiter(value):
     return (
-        isinstance(value, collections.Iterable) and
+        isinstance(value, collections.abc.Iterable) and
         not isinstance(value, strtype)
     )
 
@@ -244,7 +244,7 @@ def timestamp():
 
 
 def asjson(obj, seen=None):
-    if isinstance(obj, collections.Mapping) or isiter(obj):
+    if isinstance(obj, collections.abc.Mapping) or isiter(obj):
         # prevent traversal of recursive structures
         if seen is None:
             seen = set()
@@ -254,7 +254,7 @@ def asjson(obj, seen=None):
 
     if hasattr(obj, '__json__') and type(obj) is not type:
         return obj.__json__()
-    elif isinstance(obj, collections.Mapping):
+    elif isinstance(obj, collections.abc.Mapping):
         result = collections.OrderedDict()
         for k, v in obj.items():
             try:
-- 
2.31.1