Portable import of collections.Mapping
authorEli Bendersky <eliben@gmail.com>
Wed, 11 Sep 2019 13:02:15 +0000 (06:02 -0700)
committerEli Bendersky <eliben@gmail.com>
Wed, 11 Sep 2019 13:02:15 +0000 (06:02 -0700)
Tested with Python 3.8

Based on #237 by @Plailect. Closes #237

elftools/common/py3compat.py
elftools/dwarf/namelut.py

index b901e078881fad0ae30926258c1743c617e77326..2296771956f4becb84d14476186066929b733927 100644 (file)
@@ -64,3 +64,8 @@ def itervalues(d):
 def iteritems(d):
     """Return an iterator over the items of a dictionary."""
     return getattr(d, 'items' if PY3 else 'iteritems')()
+
+try:
+    from collections.abc import Mapping  # python >= 3.3
+except ImportError:
+    from collections import Mapping  # python < 3.3
index 2cc32d4d2f09123b1846f3926a634a240f6a5f5d..fd12aad332fad5a19f9edbba7f094cd54fd74aba 100755 (executable)
@@ -10,13 +10,14 @@ import os
 import collections
 from collections import OrderedDict
 from ..common.utils import struct_parse
+from ..common.py3compat import Mapping
 from bisect import bisect_right
 import math
 from ..construct import CString, Struct, If
 
 NameLUTEntry = collections.namedtuple('NameLUTEntry', 'cu_ofs die_ofs')
 
-class NameLUT(collections.Mapping):
+class NameLUT(Mapping):
     """
     A "Name LUT" holds any of the tables specified by .debug_pubtypes or
     .debug_pubnames sections. This is basically a dictionary where the key is