mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			251 lines
		
	
	
	
		
			8.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
	
		
			8.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# This module is used to map the old Python 2 names to the new names used in
 | 
						|
# Python 3 for the pickle module.  This needed to make pickle streams
 | 
						|
# generated with Python 2 loadable by Python 3.
 | 
						|
 | 
						|
# This is a copy of lib2to3.fixes.fix_imports.MAPPING.  We cannot import
 | 
						|
# lib2to3 and use the mapping defined there, because lib2to3 uses pickle.
 | 
						|
# Thus, this could cause the module to be imported recursively.
 | 
						|
IMPORT_MAPPING = {
 | 
						|
    '__builtin__' : 'builtins',
 | 
						|
    'copy_reg': 'copyreg',
 | 
						|
    'Queue': 'queue',
 | 
						|
    'SocketServer': 'socketserver',
 | 
						|
    'ConfigParser': 'configparser',
 | 
						|
    'repr': 'reprlib',
 | 
						|
    'tkFileDialog': 'tkinter.filedialog',
 | 
						|
    'tkSimpleDialog': 'tkinter.simpledialog',
 | 
						|
    'tkColorChooser': 'tkinter.colorchooser',
 | 
						|
    'tkCommonDialog': 'tkinter.commondialog',
 | 
						|
    'Dialog': 'tkinter.dialog',
 | 
						|
    'Tkdnd': 'tkinter.dnd',
 | 
						|
    'tkFont': 'tkinter.font',
 | 
						|
    'tkMessageBox': 'tkinter.messagebox',
 | 
						|
    'ScrolledText': 'tkinter.scrolledtext',
 | 
						|
    'Tkconstants': 'tkinter.constants',
 | 
						|
    'Tix': 'tkinter.tix',
 | 
						|
    'ttk': 'tkinter.ttk',
 | 
						|
    'Tkinter': 'tkinter',
 | 
						|
    'markupbase': '_markupbase',
 | 
						|
    '_winreg': 'winreg',
 | 
						|
    'thread': '_thread',
 | 
						|
    'dummy_thread': '_dummy_thread',
 | 
						|
    'dbhash': 'dbm.bsd',
 | 
						|
    'dumbdbm': 'dbm.dumb',
 | 
						|
    'dbm': 'dbm.ndbm',
 | 
						|
    'gdbm': 'dbm.gnu',
 | 
						|
    'xmlrpclib': 'xmlrpc.client',
 | 
						|
    'SimpleXMLRPCServer': 'xmlrpc.server',
 | 
						|
    'httplib': 'http.client',
 | 
						|
    'htmlentitydefs' : 'html.entities',
 | 
						|
    'HTMLParser' : 'html.parser',
 | 
						|
    'Cookie': 'http.cookies',
 | 
						|
    'cookielib': 'http.cookiejar',
 | 
						|
    'BaseHTTPServer': 'http.server',
 | 
						|
    'test.test_support': 'test.support',
 | 
						|
    'commands': 'subprocess',
 | 
						|
    'urlparse' : 'urllib.parse',
 | 
						|
    'robotparser' : 'urllib.robotparser',
 | 
						|
    'urllib2': 'urllib.request',
 | 
						|
    'anydbm': 'dbm',
 | 
						|
    '_abcoll' : 'collections.abc',
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
# This contains rename rules that are easy to handle.  We ignore the more
 | 
						|
# complex stuff (e.g. mapping the names in the urllib and types modules).
 | 
						|
# These rules should be run before import names are fixed.
 | 
						|
NAME_MAPPING = {
 | 
						|
    ('__builtin__', 'xrange'):     ('builtins', 'range'),
 | 
						|
    ('__builtin__', 'reduce'):     ('functools', 'reduce'),
 | 
						|
    ('__builtin__', 'intern'):     ('sys', 'intern'),
 | 
						|
    ('__builtin__', 'unichr'):     ('builtins', 'chr'),
 | 
						|
    ('__builtin__', 'unicode'):    ('builtins', 'str'),
 | 
						|
    ('__builtin__', 'long'):       ('builtins', 'int'),
 | 
						|
    ('itertools', 'izip'):         ('builtins', 'zip'),
 | 
						|
    ('itertools', 'imap'):         ('builtins', 'map'),
 | 
						|
    ('itertools', 'ifilter'):      ('builtins', 'filter'),
 | 
						|
    ('itertools', 'ifilterfalse'): ('itertools', 'filterfalse'),
 | 
						|
    ('itertools', 'izip_longest'): ('itertools', 'zip_longest'),
 | 
						|
    ('UserDict', 'IterableUserDict'): ('collections', 'UserDict'),
 | 
						|
    ('UserList', 'UserList'): ('collections', 'UserList'),
 | 
						|
    ('UserString', 'UserString'): ('collections', 'UserString'),
 | 
						|
    ('whichdb', 'whichdb'): ('dbm', 'whichdb'),
 | 
						|
    ('_socket', 'fromfd'): ('socket', 'fromfd'),
 | 
						|
    ('_multiprocessing', 'Connection'): ('multiprocessing.connection', 'Connection'),
 | 
						|
    ('multiprocessing.process', 'Process'): ('multiprocessing.context', 'Process'),
 | 
						|
    ('multiprocessing.forking', 'Popen'): ('multiprocessing.popen_fork', 'Popen'),
 | 
						|
    ('urllib', 'ContentTooShortError'): ('urllib.error', 'ContentTooShortError'),
 | 
						|
    ('urllib', 'getproxies'): ('urllib.request', 'getproxies'),
 | 
						|
    ('urllib', 'pathname2url'): ('urllib.request', 'pathname2url'),
 | 
						|
    ('urllib', 'quote_plus'): ('urllib.parse', 'quote_plus'),
 | 
						|
    ('urllib', 'quote'): ('urllib.parse', 'quote'),
 | 
						|
    ('urllib', 'unquote_plus'): ('urllib.parse', 'unquote_plus'),
 | 
						|
    ('urllib', 'unquote'): ('urllib.parse', 'unquote'),
 | 
						|
    ('urllib', 'url2pathname'): ('urllib.request', 'url2pathname'),
 | 
						|
    ('urllib', 'urlcleanup'): ('urllib.request', 'urlcleanup'),
 | 
						|
    ('urllib', 'urlencode'): ('urllib.parse', 'urlencode'),
 | 
						|
    ('urllib', 'urlopen'): ('urllib.request', 'urlopen'),
 | 
						|
    ('urllib', 'urlretrieve'): ('urllib.request', 'urlretrieve'),
 | 
						|
    ('urllib2', 'HTTPError'): ('urllib.error', 'HTTPError'),
 | 
						|
    ('urllib2', 'URLError'): ('urllib.error', 'URLError'),
 | 
						|
}
 | 
						|
 | 
						|
PYTHON2_EXCEPTIONS = (
 | 
						|
    "ArithmeticError",
 | 
						|
    "AssertionError",
 | 
						|
    "AttributeError",
 | 
						|
    "BaseException",
 | 
						|
    "BufferError",
 | 
						|
    "BytesWarning",
 | 
						|
    "DeprecationWarning",
 | 
						|
    "EOFError",
 | 
						|
    "EnvironmentError",
 | 
						|
    "Exception",
 | 
						|
    "FloatingPointError",
 | 
						|
    "FutureWarning",
 | 
						|
    "GeneratorExit",
 | 
						|
    "IOError",
 | 
						|
    "ImportError",
 | 
						|
    "ImportWarning",
 | 
						|
    "IndentationError",
 | 
						|
    "IndexError",
 | 
						|
    "KeyError",
 | 
						|
    "KeyboardInterrupt",
 | 
						|
    "LookupError",
 | 
						|
    "MemoryError",
 | 
						|
    "NameError",
 | 
						|
    "NotImplementedError",
 | 
						|
    "OSError",
 | 
						|
    "OverflowError",
 | 
						|
    "PendingDeprecationWarning",
 | 
						|
    "ReferenceError",
 | 
						|
    "RuntimeError",
 | 
						|
    "RuntimeWarning",
 | 
						|
    # StandardError is gone in Python 3, so we map it to Exception
 | 
						|
    "StopIteration",
 | 
						|
    "SyntaxError",
 | 
						|
    "SyntaxWarning",
 | 
						|
    "SystemError",
 | 
						|
    "SystemExit",
 | 
						|
    "TabError",
 | 
						|
    "TypeError",
 | 
						|
    "UnboundLocalError",
 | 
						|
    "UnicodeDecodeError",
 | 
						|
    "UnicodeEncodeError",
 | 
						|
    "UnicodeError",
 | 
						|
    "UnicodeTranslateError",
 | 
						|
    "UnicodeWarning",
 | 
						|
    "UserWarning",
 | 
						|
    "ValueError",
 | 
						|
    "Warning",
 | 
						|
    "ZeroDivisionError",
 | 
						|
)
 | 
						|
 | 
						|
try:
 | 
						|
    WindowsError
 | 
						|
except NameError:
 | 
						|
    pass
 | 
						|
else:
 | 
						|
    PYTHON2_EXCEPTIONS += ("WindowsError",)
 | 
						|
 | 
						|
for excname in PYTHON2_EXCEPTIONS:
 | 
						|
    NAME_MAPPING[("exceptions", excname)] = ("builtins", excname)
 | 
						|
 | 
						|
MULTIPROCESSING_EXCEPTIONS = (
 | 
						|
    'AuthenticationError',
 | 
						|
    'BufferTooShort',
 | 
						|
    'ProcessError',
 | 
						|
    'TimeoutError',
 | 
						|
)
 | 
						|
 | 
						|
for excname in MULTIPROCESSING_EXCEPTIONS:
 | 
						|
    NAME_MAPPING[("multiprocessing", excname)] = ("multiprocessing.context", excname)
 | 
						|
 | 
						|
# Same, but for 3.x to 2.x
 | 
						|
REVERSE_IMPORT_MAPPING = dict((v, k) for (k, v) in IMPORT_MAPPING.items())
 | 
						|
assert len(REVERSE_IMPORT_MAPPING) == len(IMPORT_MAPPING)
 | 
						|
REVERSE_NAME_MAPPING = dict((v, k) for (k, v) in NAME_MAPPING.items())
 | 
						|
assert len(REVERSE_NAME_MAPPING) == len(NAME_MAPPING)
 | 
						|
 | 
						|
# Non-mutual mappings.
 | 
						|
 | 
						|
IMPORT_MAPPING.update({
 | 
						|
    'cPickle': 'pickle',
 | 
						|
    '_elementtree': 'xml.etree.ElementTree',
 | 
						|
    'FileDialog': 'tkinter.filedialog',
 | 
						|
    'SimpleDialog': 'tkinter.simpledialog',
 | 
						|
    'DocXMLRPCServer': 'xmlrpc.server',
 | 
						|
    'SimpleHTTPServer': 'http.server',
 | 
						|
    'CGIHTTPServer': 'http.server',
 | 
						|
    # For compatibility with broken pickles saved in old Python 3 versions
 | 
						|
    'UserDict': 'collections',
 | 
						|
    'UserList': 'collections',
 | 
						|
    'UserString': 'collections',
 | 
						|
    'whichdb': 'dbm',
 | 
						|
    'StringIO':  'io',
 | 
						|
    'cStringIO': 'io',
 | 
						|
})
 | 
						|
 | 
						|
REVERSE_IMPORT_MAPPING.update({
 | 
						|
    '_bz2': 'bz2',
 | 
						|
    '_dbm': 'dbm',
 | 
						|
    '_functools': 'functools',
 | 
						|
    '_gdbm': 'gdbm',
 | 
						|
    '_pickle': 'pickle',
 | 
						|
})
 | 
						|
 | 
						|
NAME_MAPPING.update({
 | 
						|
    ('__builtin__', 'basestring'): ('builtins', 'str'),
 | 
						|
    ('exceptions', 'StandardError'): ('builtins', 'Exception'),
 | 
						|
    ('UserDict', 'UserDict'): ('collections', 'UserDict'),
 | 
						|
    ('socket', '_socketobject'): ('socket', 'SocketType'),
 | 
						|
})
 | 
						|
 | 
						|
REVERSE_NAME_MAPPING.update({
 | 
						|
    ('_functools', 'reduce'): ('__builtin__', 'reduce'),
 | 
						|
    ('tkinter.filedialog', 'FileDialog'): ('FileDialog', 'FileDialog'),
 | 
						|
    ('tkinter.filedialog', 'LoadFileDialog'): ('FileDialog', 'LoadFileDialog'),
 | 
						|
    ('tkinter.filedialog', 'SaveFileDialog'): ('FileDialog', 'SaveFileDialog'),
 | 
						|
    ('tkinter.simpledialog', 'SimpleDialog'): ('SimpleDialog', 'SimpleDialog'),
 | 
						|
    ('xmlrpc.server', 'ServerHTMLDoc'): ('DocXMLRPCServer', 'ServerHTMLDoc'),
 | 
						|
    ('xmlrpc.server', 'XMLRPCDocGenerator'):
 | 
						|
        ('DocXMLRPCServer', 'XMLRPCDocGenerator'),
 | 
						|
    ('xmlrpc.server', 'DocXMLRPCRequestHandler'):
 | 
						|
        ('DocXMLRPCServer', 'DocXMLRPCRequestHandler'),
 | 
						|
    ('xmlrpc.server', 'DocXMLRPCServer'):
 | 
						|
        ('DocXMLRPCServer', 'DocXMLRPCServer'),
 | 
						|
    ('xmlrpc.server', 'DocCGIXMLRPCRequestHandler'):
 | 
						|
        ('DocXMLRPCServer', 'DocCGIXMLRPCRequestHandler'),
 | 
						|
    ('http.server', 'SimpleHTTPRequestHandler'):
 | 
						|
        ('SimpleHTTPServer', 'SimpleHTTPRequestHandler'),
 | 
						|
    ('http.server', 'CGIHTTPRequestHandler'):
 | 
						|
        ('CGIHTTPServer', 'CGIHTTPRequestHandler'),
 | 
						|
    ('_socket', 'socket'): ('socket', '_socketobject'),
 | 
						|
})
 | 
						|
 | 
						|
PYTHON3_OSERROR_EXCEPTIONS = (
 | 
						|
    'BrokenPipeError',
 | 
						|
    'ChildProcessError',
 | 
						|
    'ConnectionAbortedError',
 | 
						|
    'ConnectionError',
 | 
						|
    'ConnectionRefusedError',
 | 
						|
    'ConnectionResetError',
 | 
						|
    'FileExistsError',
 | 
						|
    'FileNotFoundError',
 | 
						|
    'InterruptedError',
 | 
						|
    'IsADirectoryError',
 | 
						|
    'NotADirectoryError',
 | 
						|
    'PermissionError',
 | 
						|
    'ProcessLookupError',
 | 
						|
    'TimeoutError',
 | 
						|
)
 | 
						|
 | 
						|
for excname in PYTHON3_OSERROR_EXCEPTIONS:
 | 
						|
    REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError')
 | 
						|
 | 
						|
PYTHON3_IMPORTERROR_EXCEPTIONS = (
 | 
						|
    'ModuleNotFoundError',
 | 
						|
)
 | 
						|
 | 
						|
for excname in PYTHON3_IMPORTERROR_EXCEPTIONS:
 | 
						|
    REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'ImportError')
 |