xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/_compat_pickle.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker# This module is used to map the old Python 2 names to the new names used in
2*cda5da8dSAndroid Build Coastguard Worker# Python 3 for the pickle module.  This needed to make pickle streams
3*cda5da8dSAndroid Build Coastguard Worker# generated with Python 2 loadable by Python 3.
4*cda5da8dSAndroid Build Coastguard Worker
5*cda5da8dSAndroid Build Coastguard Worker# This is a copy of lib2to3.fixes.fix_imports.MAPPING.  We cannot import
6*cda5da8dSAndroid Build Coastguard Worker# lib2to3 and use the mapping defined there, because lib2to3 uses pickle.
7*cda5da8dSAndroid Build Coastguard Worker# Thus, this could cause the module to be imported recursively.
8*cda5da8dSAndroid Build Coastguard WorkerIMPORT_MAPPING = {
9*cda5da8dSAndroid Build Coastguard Worker    '__builtin__' : 'builtins',
10*cda5da8dSAndroid Build Coastguard Worker    'copy_reg': 'copyreg',
11*cda5da8dSAndroid Build Coastguard Worker    'Queue': 'queue',
12*cda5da8dSAndroid Build Coastguard Worker    'SocketServer': 'socketserver',
13*cda5da8dSAndroid Build Coastguard Worker    'ConfigParser': 'configparser',
14*cda5da8dSAndroid Build Coastguard Worker    'repr': 'reprlib',
15*cda5da8dSAndroid Build Coastguard Worker    'tkFileDialog': 'tkinter.filedialog',
16*cda5da8dSAndroid Build Coastguard Worker    'tkSimpleDialog': 'tkinter.simpledialog',
17*cda5da8dSAndroid Build Coastguard Worker    'tkColorChooser': 'tkinter.colorchooser',
18*cda5da8dSAndroid Build Coastguard Worker    'tkCommonDialog': 'tkinter.commondialog',
19*cda5da8dSAndroid Build Coastguard Worker    'Dialog': 'tkinter.dialog',
20*cda5da8dSAndroid Build Coastguard Worker    'Tkdnd': 'tkinter.dnd',
21*cda5da8dSAndroid Build Coastguard Worker    'tkFont': 'tkinter.font',
22*cda5da8dSAndroid Build Coastguard Worker    'tkMessageBox': 'tkinter.messagebox',
23*cda5da8dSAndroid Build Coastguard Worker    'ScrolledText': 'tkinter.scrolledtext',
24*cda5da8dSAndroid Build Coastguard Worker    'Tkconstants': 'tkinter.constants',
25*cda5da8dSAndroid Build Coastguard Worker    'Tix': 'tkinter.tix',
26*cda5da8dSAndroid Build Coastguard Worker    'ttk': 'tkinter.ttk',
27*cda5da8dSAndroid Build Coastguard Worker    'Tkinter': 'tkinter',
28*cda5da8dSAndroid Build Coastguard Worker    'markupbase': '_markupbase',
29*cda5da8dSAndroid Build Coastguard Worker    '_winreg': 'winreg',
30*cda5da8dSAndroid Build Coastguard Worker    'thread': '_thread',
31*cda5da8dSAndroid Build Coastguard Worker    'dummy_thread': '_dummy_thread',
32*cda5da8dSAndroid Build Coastguard Worker    'dbhash': 'dbm.bsd',
33*cda5da8dSAndroid Build Coastguard Worker    'dumbdbm': 'dbm.dumb',
34*cda5da8dSAndroid Build Coastguard Worker    'dbm': 'dbm.ndbm',
35*cda5da8dSAndroid Build Coastguard Worker    'gdbm': 'dbm.gnu',
36*cda5da8dSAndroid Build Coastguard Worker    'xmlrpclib': 'xmlrpc.client',
37*cda5da8dSAndroid Build Coastguard Worker    'SimpleXMLRPCServer': 'xmlrpc.server',
38*cda5da8dSAndroid Build Coastguard Worker    'httplib': 'http.client',
39*cda5da8dSAndroid Build Coastguard Worker    'htmlentitydefs' : 'html.entities',
40*cda5da8dSAndroid Build Coastguard Worker    'HTMLParser' : 'html.parser',
41*cda5da8dSAndroid Build Coastguard Worker    'Cookie': 'http.cookies',
42*cda5da8dSAndroid Build Coastguard Worker    'cookielib': 'http.cookiejar',
43*cda5da8dSAndroid Build Coastguard Worker    'BaseHTTPServer': 'http.server',
44*cda5da8dSAndroid Build Coastguard Worker    'test.test_support': 'test.support',
45*cda5da8dSAndroid Build Coastguard Worker    'commands': 'subprocess',
46*cda5da8dSAndroid Build Coastguard Worker    'urlparse' : 'urllib.parse',
47*cda5da8dSAndroid Build Coastguard Worker    'robotparser' : 'urllib.robotparser',
48*cda5da8dSAndroid Build Coastguard Worker    'urllib2': 'urllib.request',
49*cda5da8dSAndroid Build Coastguard Worker    'anydbm': 'dbm',
50*cda5da8dSAndroid Build Coastguard Worker    '_abcoll' : 'collections.abc',
51*cda5da8dSAndroid Build Coastguard Worker}
52*cda5da8dSAndroid Build Coastguard Worker
53*cda5da8dSAndroid Build Coastguard Worker
54*cda5da8dSAndroid Build Coastguard Worker# This contains rename rules that are easy to handle.  We ignore the more
55*cda5da8dSAndroid Build Coastguard Worker# complex stuff (e.g. mapping the names in the urllib and types modules).
56*cda5da8dSAndroid Build Coastguard Worker# These rules should be run before import names are fixed.
57*cda5da8dSAndroid Build Coastguard WorkerNAME_MAPPING = {
58*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'xrange'):     ('builtins', 'range'),
59*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'reduce'):     ('functools', 'reduce'),
60*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'intern'):     ('sys', 'intern'),
61*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'unichr'):     ('builtins', 'chr'),
62*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'unicode'):    ('builtins', 'str'),
63*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'long'):       ('builtins', 'int'),
64*cda5da8dSAndroid Build Coastguard Worker    ('itertools', 'izip'):         ('builtins', 'zip'),
65*cda5da8dSAndroid Build Coastguard Worker    ('itertools', 'imap'):         ('builtins', 'map'),
66*cda5da8dSAndroid Build Coastguard Worker    ('itertools', 'ifilter'):      ('builtins', 'filter'),
67*cda5da8dSAndroid Build Coastguard Worker    ('itertools', 'ifilterfalse'): ('itertools', 'filterfalse'),
68*cda5da8dSAndroid Build Coastguard Worker    ('itertools', 'izip_longest'): ('itertools', 'zip_longest'),
69*cda5da8dSAndroid Build Coastguard Worker    ('UserDict', 'IterableUserDict'): ('collections', 'UserDict'),
70*cda5da8dSAndroid Build Coastguard Worker    ('UserList', 'UserList'): ('collections', 'UserList'),
71*cda5da8dSAndroid Build Coastguard Worker    ('UserString', 'UserString'): ('collections', 'UserString'),
72*cda5da8dSAndroid Build Coastguard Worker    ('whichdb', 'whichdb'): ('dbm', 'whichdb'),
73*cda5da8dSAndroid Build Coastguard Worker    ('_socket', 'fromfd'): ('socket', 'fromfd'),
74*cda5da8dSAndroid Build Coastguard Worker    ('_multiprocessing', 'Connection'): ('multiprocessing.connection', 'Connection'),
75*cda5da8dSAndroid Build Coastguard Worker    ('multiprocessing.process', 'Process'): ('multiprocessing.context', 'Process'),
76*cda5da8dSAndroid Build Coastguard Worker    ('multiprocessing.forking', 'Popen'): ('multiprocessing.popen_fork', 'Popen'),
77*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'ContentTooShortError'): ('urllib.error', 'ContentTooShortError'),
78*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'getproxies'): ('urllib.request', 'getproxies'),
79*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'pathname2url'): ('urllib.request', 'pathname2url'),
80*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'quote_plus'): ('urllib.parse', 'quote_plus'),
81*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'quote'): ('urllib.parse', 'quote'),
82*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'unquote_plus'): ('urllib.parse', 'unquote_plus'),
83*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'unquote'): ('urllib.parse', 'unquote'),
84*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'url2pathname'): ('urllib.request', 'url2pathname'),
85*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'urlcleanup'): ('urllib.request', 'urlcleanup'),
86*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'urlencode'): ('urllib.parse', 'urlencode'),
87*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'urlopen'): ('urllib.request', 'urlopen'),
88*cda5da8dSAndroid Build Coastguard Worker    ('urllib', 'urlretrieve'): ('urllib.request', 'urlretrieve'),
89*cda5da8dSAndroid Build Coastguard Worker    ('urllib2', 'HTTPError'): ('urllib.error', 'HTTPError'),
90*cda5da8dSAndroid Build Coastguard Worker    ('urllib2', 'URLError'): ('urllib.error', 'URLError'),
91*cda5da8dSAndroid Build Coastguard Worker}
92*cda5da8dSAndroid Build Coastguard Worker
93*cda5da8dSAndroid Build Coastguard WorkerPYTHON2_EXCEPTIONS = (
94*cda5da8dSAndroid Build Coastguard Worker    "ArithmeticError",
95*cda5da8dSAndroid Build Coastguard Worker    "AssertionError",
96*cda5da8dSAndroid Build Coastguard Worker    "AttributeError",
97*cda5da8dSAndroid Build Coastguard Worker    "BaseException",
98*cda5da8dSAndroid Build Coastguard Worker    "BufferError",
99*cda5da8dSAndroid Build Coastguard Worker    "BytesWarning",
100*cda5da8dSAndroid Build Coastguard Worker    "DeprecationWarning",
101*cda5da8dSAndroid Build Coastguard Worker    "EOFError",
102*cda5da8dSAndroid Build Coastguard Worker    "EnvironmentError",
103*cda5da8dSAndroid Build Coastguard Worker    "Exception",
104*cda5da8dSAndroid Build Coastguard Worker    "FloatingPointError",
105*cda5da8dSAndroid Build Coastguard Worker    "FutureWarning",
106*cda5da8dSAndroid Build Coastguard Worker    "GeneratorExit",
107*cda5da8dSAndroid Build Coastguard Worker    "IOError",
108*cda5da8dSAndroid Build Coastguard Worker    "ImportError",
109*cda5da8dSAndroid Build Coastguard Worker    "ImportWarning",
110*cda5da8dSAndroid Build Coastguard Worker    "IndentationError",
111*cda5da8dSAndroid Build Coastguard Worker    "IndexError",
112*cda5da8dSAndroid Build Coastguard Worker    "KeyError",
113*cda5da8dSAndroid Build Coastguard Worker    "KeyboardInterrupt",
114*cda5da8dSAndroid Build Coastguard Worker    "LookupError",
115*cda5da8dSAndroid Build Coastguard Worker    "MemoryError",
116*cda5da8dSAndroid Build Coastguard Worker    "NameError",
117*cda5da8dSAndroid Build Coastguard Worker    "NotImplementedError",
118*cda5da8dSAndroid Build Coastguard Worker    "OSError",
119*cda5da8dSAndroid Build Coastguard Worker    "OverflowError",
120*cda5da8dSAndroid Build Coastguard Worker    "PendingDeprecationWarning",
121*cda5da8dSAndroid Build Coastguard Worker    "ReferenceError",
122*cda5da8dSAndroid Build Coastguard Worker    "RuntimeError",
123*cda5da8dSAndroid Build Coastguard Worker    "RuntimeWarning",
124*cda5da8dSAndroid Build Coastguard Worker    # StandardError is gone in Python 3, so we map it to Exception
125*cda5da8dSAndroid Build Coastguard Worker    "StopIteration",
126*cda5da8dSAndroid Build Coastguard Worker    "SyntaxError",
127*cda5da8dSAndroid Build Coastguard Worker    "SyntaxWarning",
128*cda5da8dSAndroid Build Coastguard Worker    "SystemError",
129*cda5da8dSAndroid Build Coastguard Worker    "SystemExit",
130*cda5da8dSAndroid Build Coastguard Worker    "TabError",
131*cda5da8dSAndroid Build Coastguard Worker    "TypeError",
132*cda5da8dSAndroid Build Coastguard Worker    "UnboundLocalError",
133*cda5da8dSAndroid Build Coastguard Worker    "UnicodeDecodeError",
134*cda5da8dSAndroid Build Coastguard Worker    "UnicodeEncodeError",
135*cda5da8dSAndroid Build Coastguard Worker    "UnicodeError",
136*cda5da8dSAndroid Build Coastguard Worker    "UnicodeTranslateError",
137*cda5da8dSAndroid Build Coastguard Worker    "UnicodeWarning",
138*cda5da8dSAndroid Build Coastguard Worker    "UserWarning",
139*cda5da8dSAndroid Build Coastguard Worker    "ValueError",
140*cda5da8dSAndroid Build Coastguard Worker    "Warning",
141*cda5da8dSAndroid Build Coastguard Worker    "ZeroDivisionError",
142*cda5da8dSAndroid Build Coastguard Worker)
143*cda5da8dSAndroid Build Coastguard Worker
144*cda5da8dSAndroid Build Coastguard Workertry:
145*cda5da8dSAndroid Build Coastguard Worker    WindowsError
146*cda5da8dSAndroid Build Coastguard Workerexcept NameError:
147*cda5da8dSAndroid Build Coastguard Worker    pass
148*cda5da8dSAndroid Build Coastguard Workerelse:
149*cda5da8dSAndroid Build Coastguard Worker    PYTHON2_EXCEPTIONS += ("WindowsError",)
150*cda5da8dSAndroid Build Coastguard Worker
151*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON2_EXCEPTIONS:
152*cda5da8dSAndroid Build Coastguard Worker    NAME_MAPPING[("exceptions", excname)] = ("builtins", excname)
153*cda5da8dSAndroid Build Coastguard Worker
154*cda5da8dSAndroid Build Coastguard WorkerMULTIPROCESSING_EXCEPTIONS = (
155*cda5da8dSAndroid Build Coastguard Worker    'AuthenticationError',
156*cda5da8dSAndroid Build Coastguard Worker    'BufferTooShort',
157*cda5da8dSAndroid Build Coastguard Worker    'ProcessError',
158*cda5da8dSAndroid Build Coastguard Worker    'TimeoutError',
159*cda5da8dSAndroid Build Coastguard Worker)
160*cda5da8dSAndroid Build Coastguard Worker
161*cda5da8dSAndroid Build Coastguard Workerfor excname in MULTIPROCESSING_EXCEPTIONS:
162*cda5da8dSAndroid Build Coastguard Worker    NAME_MAPPING[("multiprocessing", excname)] = ("multiprocessing.context", excname)
163*cda5da8dSAndroid Build Coastguard Worker
164*cda5da8dSAndroid Build Coastguard Worker# Same, but for 3.x to 2.x
165*cda5da8dSAndroid Build Coastguard WorkerREVERSE_IMPORT_MAPPING = dict((v, k) for (k, v) in IMPORT_MAPPING.items())
166*cda5da8dSAndroid Build Coastguard Workerassert len(REVERSE_IMPORT_MAPPING) == len(IMPORT_MAPPING)
167*cda5da8dSAndroid Build Coastguard WorkerREVERSE_NAME_MAPPING = dict((v, k) for (k, v) in NAME_MAPPING.items())
168*cda5da8dSAndroid Build Coastguard Workerassert len(REVERSE_NAME_MAPPING) == len(NAME_MAPPING)
169*cda5da8dSAndroid Build Coastguard Worker
170*cda5da8dSAndroid Build Coastguard Worker# Non-mutual mappings.
171*cda5da8dSAndroid Build Coastguard Worker
172*cda5da8dSAndroid Build Coastguard WorkerIMPORT_MAPPING.update({
173*cda5da8dSAndroid Build Coastguard Worker    'cPickle': 'pickle',
174*cda5da8dSAndroid Build Coastguard Worker    '_elementtree': 'xml.etree.ElementTree',
175*cda5da8dSAndroid Build Coastguard Worker    'FileDialog': 'tkinter.filedialog',
176*cda5da8dSAndroid Build Coastguard Worker    'SimpleDialog': 'tkinter.simpledialog',
177*cda5da8dSAndroid Build Coastguard Worker    'DocXMLRPCServer': 'xmlrpc.server',
178*cda5da8dSAndroid Build Coastguard Worker    'SimpleHTTPServer': 'http.server',
179*cda5da8dSAndroid Build Coastguard Worker    'CGIHTTPServer': 'http.server',
180*cda5da8dSAndroid Build Coastguard Worker    # For compatibility with broken pickles saved in old Python 3 versions
181*cda5da8dSAndroid Build Coastguard Worker    'UserDict': 'collections',
182*cda5da8dSAndroid Build Coastguard Worker    'UserList': 'collections',
183*cda5da8dSAndroid Build Coastguard Worker    'UserString': 'collections',
184*cda5da8dSAndroid Build Coastguard Worker    'whichdb': 'dbm',
185*cda5da8dSAndroid Build Coastguard Worker    'StringIO':  'io',
186*cda5da8dSAndroid Build Coastguard Worker    'cStringIO': 'io',
187*cda5da8dSAndroid Build Coastguard Worker})
188*cda5da8dSAndroid Build Coastguard Worker
189*cda5da8dSAndroid Build Coastguard WorkerREVERSE_IMPORT_MAPPING.update({
190*cda5da8dSAndroid Build Coastguard Worker    '_bz2': 'bz2',
191*cda5da8dSAndroid Build Coastguard Worker    '_dbm': 'dbm',
192*cda5da8dSAndroid Build Coastguard Worker    '_functools': 'functools',
193*cda5da8dSAndroid Build Coastguard Worker    '_gdbm': 'gdbm',
194*cda5da8dSAndroid Build Coastguard Worker    '_pickle': 'pickle',
195*cda5da8dSAndroid Build Coastguard Worker})
196*cda5da8dSAndroid Build Coastguard Worker
197*cda5da8dSAndroid Build Coastguard WorkerNAME_MAPPING.update({
198*cda5da8dSAndroid Build Coastguard Worker    ('__builtin__', 'basestring'): ('builtins', 'str'),
199*cda5da8dSAndroid Build Coastguard Worker    ('exceptions', 'StandardError'): ('builtins', 'Exception'),
200*cda5da8dSAndroid Build Coastguard Worker    ('UserDict', 'UserDict'): ('collections', 'UserDict'),
201*cda5da8dSAndroid Build Coastguard Worker    ('socket', '_socketobject'): ('socket', 'SocketType'),
202*cda5da8dSAndroid Build Coastguard Worker})
203*cda5da8dSAndroid Build Coastguard Worker
204*cda5da8dSAndroid Build Coastguard WorkerREVERSE_NAME_MAPPING.update({
205*cda5da8dSAndroid Build Coastguard Worker    ('_functools', 'reduce'): ('__builtin__', 'reduce'),
206*cda5da8dSAndroid Build Coastguard Worker    ('tkinter.filedialog', 'FileDialog'): ('FileDialog', 'FileDialog'),
207*cda5da8dSAndroid Build Coastguard Worker    ('tkinter.filedialog', 'LoadFileDialog'): ('FileDialog', 'LoadFileDialog'),
208*cda5da8dSAndroid Build Coastguard Worker    ('tkinter.filedialog', 'SaveFileDialog'): ('FileDialog', 'SaveFileDialog'),
209*cda5da8dSAndroid Build Coastguard Worker    ('tkinter.simpledialog', 'SimpleDialog'): ('SimpleDialog', 'SimpleDialog'),
210*cda5da8dSAndroid Build Coastguard Worker    ('xmlrpc.server', 'ServerHTMLDoc'): ('DocXMLRPCServer', 'ServerHTMLDoc'),
211*cda5da8dSAndroid Build Coastguard Worker    ('xmlrpc.server', 'XMLRPCDocGenerator'):
212*cda5da8dSAndroid Build Coastguard Worker        ('DocXMLRPCServer', 'XMLRPCDocGenerator'),
213*cda5da8dSAndroid Build Coastguard Worker    ('xmlrpc.server', 'DocXMLRPCRequestHandler'):
214*cda5da8dSAndroid Build Coastguard Worker        ('DocXMLRPCServer', 'DocXMLRPCRequestHandler'),
215*cda5da8dSAndroid Build Coastguard Worker    ('xmlrpc.server', 'DocXMLRPCServer'):
216*cda5da8dSAndroid Build Coastguard Worker        ('DocXMLRPCServer', 'DocXMLRPCServer'),
217*cda5da8dSAndroid Build Coastguard Worker    ('xmlrpc.server', 'DocCGIXMLRPCRequestHandler'):
218*cda5da8dSAndroid Build Coastguard Worker        ('DocXMLRPCServer', 'DocCGIXMLRPCRequestHandler'),
219*cda5da8dSAndroid Build Coastguard Worker    ('http.server', 'SimpleHTTPRequestHandler'):
220*cda5da8dSAndroid Build Coastguard Worker        ('SimpleHTTPServer', 'SimpleHTTPRequestHandler'),
221*cda5da8dSAndroid Build Coastguard Worker    ('http.server', 'CGIHTTPRequestHandler'):
222*cda5da8dSAndroid Build Coastguard Worker        ('CGIHTTPServer', 'CGIHTTPRequestHandler'),
223*cda5da8dSAndroid Build Coastguard Worker    ('_socket', 'socket'): ('socket', '_socketobject'),
224*cda5da8dSAndroid Build Coastguard Worker})
225*cda5da8dSAndroid Build Coastguard Worker
226*cda5da8dSAndroid Build Coastguard WorkerPYTHON3_OSERROR_EXCEPTIONS = (
227*cda5da8dSAndroid Build Coastguard Worker    'BrokenPipeError',
228*cda5da8dSAndroid Build Coastguard Worker    'ChildProcessError',
229*cda5da8dSAndroid Build Coastguard Worker    'ConnectionAbortedError',
230*cda5da8dSAndroid Build Coastguard Worker    'ConnectionError',
231*cda5da8dSAndroid Build Coastguard Worker    'ConnectionRefusedError',
232*cda5da8dSAndroid Build Coastguard Worker    'ConnectionResetError',
233*cda5da8dSAndroid Build Coastguard Worker    'FileExistsError',
234*cda5da8dSAndroid Build Coastguard Worker    'FileNotFoundError',
235*cda5da8dSAndroid Build Coastguard Worker    'InterruptedError',
236*cda5da8dSAndroid Build Coastguard Worker    'IsADirectoryError',
237*cda5da8dSAndroid Build Coastguard Worker    'NotADirectoryError',
238*cda5da8dSAndroid Build Coastguard Worker    'PermissionError',
239*cda5da8dSAndroid Build Coastguard Worker    'ProcessLookupError',
240*cda5da8dSAndroid Build Coastguard Worker    'TimeoutError',
241*cda5da8dSAndroid Build Coastguard Worker)
242*cda5da8dSAndroid Build Coastguard Worker
243*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON3_OSERROR_EXCEPTIONS:
244*cda5da8dSAndroid Build Coastguard Worker    REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError')
245*cda5da8dSAndroid Build Coastguard Worker
246*cda5da8dSAndroid Build Coastguard WorkerPYTHON3_IMPORTERROR_EXCEPTIONS = (
247*cda5da8dSAndroid Build Coastguard Worker    'ModuleNotFoundError',
248*cda5da8dSAndroid Build Coastguard Worker)
249*cda5da8dSAndroid Build Coastguard Worker
250*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON3_IMPORTERROR_EXCEPTIONS:
251*cda5da8dSAndroid Build Coastguard Worker    REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'ImportError')
252*cda5da8dSAndroid Build Coastguard Workerdel excname
253