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