bpo-37444: Update differing exception between builtins and importlib (GH-14869)

Imports now raise `TypeError` instead of `ValueError` for relative import failures. This makes things consistent between `builtins.__import__` and `importlib.__import__` as well as using a more natural import for the failure.


https://bugs.python.org/issue37444



Automerge-Triggered-By: @brettcannon
This commit is contained in:
Ngalim Siregar 2019-08-03 12:46:02 +07:00 committed by Miss Islington (bot)
parent 8e568ef266
commit c5fa44944e
9 changed files with 134 additions and 108 deletions

View File

@ -1433,13 +1433,18 @@ an :term:`importer`.
``importlib.util.resolve_name('sys', __package__)`` without doing a ``importlib.util.resolve_name('sys', __package__)`` without doing a
check to see if the **package** argument is needed. check to see if the **package** argument is needed.
:exc:`ValueError` is raised if **name** is a relative module name but :exc:`ImportError` is raised if **name** is a relative module name but
package is a false value (e.g. ``None`` or the empty string). **package** is a false value (e.g. ``None`` or the empty string).
:exc:`ValueError` is also raised a relative name would escape its containing :exc:`ImportError` is also raised a relative name would escape its containing
package (e.g. requesting ``..bacon`` from within the ``spam`` package). package (e.g. requesting ``..bacon`` from within the ``spam`` package).
.. versionadded:: 3.3 .. versionadded:: 3.3
.. versionchanged:: 3.9
To improve consistency with import statements, raise
:exc:`ImportError` instead of :exc:`ValueError` for invalid relative
import attempts.
.. function:: find_spec(name, package=None) .. function:: find_spec(name, package=None)
Find the :term:`spec <module spec>` for a module, optionally relative to Find the :term:`spec <module spec>` for a module, optionally relative to

View File

@ -75,6 +75,12 @@ New Features
Other Language Changes Other Language Changes
====================== ======================
* :func:`builtins.__import__` now raises :exc:`ImportError` instead of
:exc:`ValueError` as used to occur when a relative import went past
its top-level package.
(Contributed by Ngalim Siregar in :issue:`37444`.)
* Python now gets the absolute path of the script filename specified on * Python now gets the absolute path of the script filename specified on
the command line (ex: ``python3 script.py``): the ``__file__`` attribute of the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
the ``__main__`` module, ``sys.argv[0]`` and ``sys.path[0]`` become an the ``__main__`` module, ``sys.argv[0]`` and ``sys.path[0]`` become an
@ -118,6 +124,13 @@ pprint
:mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`. :mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`.
(Contributed by Carl Bordum Hansen in :issue:`37376`.) (Contributed by Carl Bordum Hansen in :issue:`37376`.)
importlib
---------
To improve consistency with import statements, :func:`importlib.util.resolve_name`
now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
import attempts.
(Contributed by Ngalim Siregar in :issue:`37444`.)
Optimizations Optimizations
============= =============
@ -180,4 +193,11 @@ Porting to Python 3.9
This section lists previously described changes and other bugfixes This section lists previously described changes and other bugfixes
that may require changes to your code. that may require changes to your code.
Changes in the Python API
-------------------------
* :func:`builtins.__import__` and :func:`importlib.util.resolve_name` now raise
:exc:`ImportError` where it previously raised :exc:`ValueError`. Callers
catching the specific exception type and supporting both Python 3.9 and
earlier versions will need to catch both:
``except (ImportError, ValueError):``

View File

@ -873,7 +873,7 @@ def _resolve_name(name, package, level):
"""Resolve a relative module name to an absolute one.""" """Resolve a relative module name to an absolute one."""
bits = package.rsplit('.', level - 1) bits = package.rsplit('.', level - 1)
if len(bits) < level: if len(bits) < level:
raise ValueError('attempted relative import beyond top-level package') raise ImportError('attempted relative import beyond top-level package')
base = bits[0] base = bits[0]
return '{}.{}'.format(base, name) if name else base return '{}.{}'.format(base, name) if name else base

View File

@ -29,8 +29,8 @@ def resolve_name(name, package):
if not name.startswith('.'): if not name.startswith('.'):
return name return name
elif not package: elif not package:
raise ValueError(f'no package specified for {repr(name)} ' raise ImportError(f'no package specified for {repr(name)} '
'(required for relative module names)') '(required for relative module names)')
level = 0 level = 0
for character in name: for character in name:
if character != '.': if character != '.':

View File

@ -156,7 +156,7 @@ class RelativeImports:
{'__name__': 'pkg', '__path__': ['blah']}) {'__name__': 'pkg', '__path__': ['blah']})
def callback(global_): def callback(global_):
self.__import__('pkg') self.__import__('pkg')
with self.assertRaises(ValueError): with self.assertRaises(ImportError):
self.__import__('', global_, fromlist=['top_level'], self.__import__('', global_, fromlist=['top_level'],
level=2) level=2)
self.relative_import_test(create, globals_, callback) self.relative_import_test(create, globals_, callback)
@ -167,7 +167,7 @@ class RelativeImports:
globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.module'} globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.module'}
def callback(global_): def callback(global_):
self.__import__('pkg') self.__import__('pkg')
with self.assertRaises(ValueError): with self.assertRaises(ImportError):
self.__import__('', global_, fromlist=['top_level'], self.__import__('', global_, fromlist=['top_level'],
level=2) level=2)
self.relative_import_test(create, globals_, callback) self.relative_import_test(create, globals_, callback)

View File

@ -375,7 +375,7 @@ class ResolveNameTests:
def test_no_package(self): def test_no_package(self):
# .bacon in '' # .bacon in ''
with self.assertRaises(ValueError): with self.assertRaises(ImportError):
self.util.resolve_name('.bacon', '') self.util.resolve_name('.bacon', '')
def test_in_package(self): def test_in_package(self):
@ -390,7 +390,7 @@ class ResolveNameTests:
def test_escape(self): def test_escape(self):
# ..bacon in spam # ..bacon in spam
with self.assertRaises(ValueError): with self.assertRaises(ImportError):
self.util.resolve_name('..bacon', 'spam') self.util.resolve_name('..bacon', 'spam')
@ -518,7 +518,7 @@ class FindSpecTests:
with util.temp_module(name, pkg=True) as pkg_dir: with util.temp_module(name, pkg=True) as pkg_dir:
fullname, _ = util.submodule(name, subname, pkg_dir) fullname, _ = util.submodule(name, subname, pkg_dir)
relname = '.' + subname relname = '.' + subname
with self.assertRaises(ValueError): with self.assertRaises(ImportError):
self.util.find_spec(relname) self.util.find_spec(relname)
self.assertNotIn(name, sorted(sys.modules)) self.assertNotIn(name, sorted(sys.modules))
self.assertNotIn(fullname, sorted(sys.modules)) self.assertNotIn(fullname, sorted(sys.modules))

View File

@ -0,0 +1 @@
Update differing exception between :meth:`builtins.__import__` and :meth:`importlib.__import__`.

View File

@ -1671,7 +1671,7 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
goto error; goto error;
} }
else if (last_dot == -1) { else if (last_dot == -1) {
_PyErr_SetString(tstate, PyExc_ValueError, _PyErr_SetString(tstate, PyExc_ImportError,
"attempted relative import beyond top-level " "attempted relative import beyond top-level "
"package"); "package");
goto error; goto error;

192
Python/importlib.h generated
View File

@ -1351,89 +1351,89 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
112,111,114,116,32,98,101,121,111,110,100,32,116,111,112,45, 112,111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,
108,101,118,101,108,32,112,97,99,107,97,103,101,114,22,0, 108,101,118,101,108,32,112,97,99,107,97,103,101,114,22,0,
0,0,250,5,123,125,46,123,125,41,4,218,6,114,115,112, 0,0,250,5,123,125,46,123,125,41,4,218,6,114,115,112,
108,105,116,218,3,108,101,110,218,10,86,97,108,117,101,69, 108,105,116,218,3,108,101,110,114,79,0,0,0,114,45,0,
114,114,111,114,114,45,0,0,0,41,5,114,17,0,0,0, 0,0,41,5,114,17,0,0,0,218,7,112,97,99,107,97,
218,7,112,97,99,107,97,103,101,218,5,108,101,118,101,108, 103,101,218,5,108,101,118,101,108,90,4,98,105,116,115,90,
90,4,98,105,116,115,90,4,98,97,115,101,114,10,0,0, 4,98,97,115,101,114,10,0,0,0,114,10,0,0,0,114,
0,114,10,0,0,0,114,11,0,0,0,218,13,95,114,101, 11,0,0,0,218,13,95,114,101,115,111,108,118,101,95,110,
115,111,108,118,101,95,110,97,109,101,104,3,0,0,115,10, 97,109,101,104,3,0,0,115,10,0,0,0,0,2,16,1,
0,0,0,0,2,16,1,12,1,8,1,8,1,114,188,0, 12,1,8,1,8,1,114,187,0,0,0,99,3,0,0,0,
0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,4, 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,
0,0,0,4,0,0,0,67,0,0,0,115,34,0,0,0, 67,0,0,0,115,34,0,0,0,124,0,160,0,124,1,124,
124,0,160,0,124,1,124,2,161,2,125,3,124,3,100,0, 2,161,2,125,3,124,3,100,0,107,8,114,24,100,0,83,
107,8,114,24,100,0,83,0,116,1,124,1,124,3,131,2, 0,116,1,124,1,124,3,131,2,83,0,114,13,0,0,0,
83,0,114,13,0,0,0,41,2,114,167,0,0,0,114,91, 41,2,114,167,0,0,0,114,91,0,0,0,41,4,218,6,
0,0,0,41,4,218,6,102,105,110,100,101,114,114,17,0, 102,105,110,100,101,114,114,17,0,0,0,114,164,0,0,0,
0,0,114,164,0,0,0,114,109,0,0,0,114,10,0,0, 114,109,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
0,114,10,0,0,0,114,11,0,0,0,218,17,95,102,105, 11,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99,
110,100,95,115,112,101,99,95,108,101,103,97,99,121,113,3, 95,108,101,103,97,99,121,113,3,0,0,115,8,0,0,0,
0,0,115,8,0,0,0,0,3,12,1,8,1,4,1,114, 0,3,12,1,8,1,4,1,114,189,0,0,0,99,3,0,
190,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0,
0,10,0,0,0,10,0,0,0,67,0,0,0,115,12,1, 0,0,67,0,0,0,115,12,1,0,0,116,0,106,1,125,
0,0,116,0,106,1,125,3,124,3,100,1,107,8,114,22, 3,124,3,100,1,107,8,114,22,116,2,100,2,131,1,130,
116,2,100,2,131,1,130,1,124,3,115,38,116,3,160,4, 1,124,3,115,38,116,3,160,4,100,3,116,5,161,2,1,
100,3,116,5,161,2,1,0,124,0,116,0,106,6,107,6, 0,124,0,116,0,106,6,107,6,125,4,124,3,68,0,93,
125,4,124,3,68,0,93,210,125,5,116,7,131,0,143,84, 210,125,5,116,7,131,0,143,84,1,0,122,10,124,5,106,
1,0,122,10,124,5,106,8,125,6,87,0,110,54,4,0, 8,125,6,87,0,110,54,4,0,116,9,107,10,114,128,1,
116,9,107,10,114,128,1,0,1,0,1,0,116,10,124,5, 0,1,0,1,0,116,10,124,5,124,0,124,1,131,3,125,
124,0,124,1,131,3,125,7,124,7,100,1,107,8,114,124, 7,124,7,100,1,107,8,114,124,89,0,87,0,53,0,81,
89,0,87,0,53,0,81,0,82,0,163,0,113,52,89,0, 0,82,0,163,0,113,52,89,0,110,14,88,0,124,6,124,
110,14,88,0,124,6,124,0,124,1,124,2,131,3,125,7, 0,124,1,124,2,131,3,125,7,87,0,53,0,81,0,82,
87,0,53,0,81,0,82,0,88,0,124,7,100,1,107,9, 0,88,0,124,7,100,1,107,9,114,52,124,4,144,0,115,
114,52,124,4,144,0,115,254,124,0,116,0,106,6,107,6, 254,124,0,116,0,106,6,107,6,144,0,114,254,116,0,106,
144,0,114,254,116,0,106,6,124,0,25,0,125,8,122,10, 6,124,0,25,0,125,8,122,10,124,8,106,11,125,9,87,
124,8,106,11,125,9,87,0,110,28,4,0,116,9,107,10, 0,110,28,4,0,116,9,107,10,114,226,1,0,1,0,1,
114,226,1,0,1,0,1,0,124,7,6,0,89,0,2,0, 0,124,7,6,0,89,0,2,0,1,0,83,0,88,0,124,
1,0,83,0,88,0,124,9,100,1,107,8,114,244,124,7, 9,100,1,107,8,114,244,124,7,2,0,1,0,83,0,124,
2,0,1,0,83,0,124,9,2,0,1,0,83,0,113,52, 9,2,0,1,0,83,0,113,52,124,7,2,0,1,0,83,
124,7,2,0,1,0,83,0,113,52,100,1,83,0,41,4, 0,113,52,100,1,83,0,41,4,122,21,70,105,110,100,32,
122,21,70,105,110,100,32,97,32,109,111,100,117,108,101,39, 97,32,109,111,100,117,108,101,39,115,32,115,112,101,99,46,
115,32,115,112,101,99,46,78,122,53,115,121,115,46,109,101, 78,122,53,115,121,115,46,109,101,116,97,95,112,97,116,104,
116,97,95,112,97,116,104,32,105,115,32,78,111,110,101,44, 32,105,115,32,78,111,110,101,44,32,80,121,116,104,111,110,
32,80,121,116,104,111,110,32,105,115,32,108,105,107,101,108, 32,105,115,32,108,105,107,101,108,121,32,115,104,117,116,116,
121,32,115,104,117,116,116,105,110,103,32,100,111,119,110,122, 105,110,103,32,100,111,119,110,122,22,115,121,115,46,109,101,
22,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, 116,97,95,112,97,116,104,32,105,115,32,101,109,112,116,121,
115,32,101,109,112,116,121,41,12,114,15,0,0,0,218,9, 41,12,114,15,0,0,0,218,9,109,101,116,97,95,112,97,
109,101,116,97,95,112,97,116,104,114,79,0,0,0,218,9, 116,104,114,79,0,0,0,218,9,95,119,97,114,110,105,110,
95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218, 103,115,218,4,119,97,114,110,218,13,73,109,112,111,114,116,
13,73,109,112,111,114,116,87,97,114,110,105,110,103,114,92, 87,97,114,110,105,110,103,114,92,0,0,0,114,178,0,0,
0,0,0,114,178,0,0,0,114,166,0,0,0,114,106,0, 0,114,166,0,0,0,114,106,0,0,0,114,189,0,0,0,
0,0,114,190,0,0,0,114,105,0,0,0,41,10,114,17, 114,105,0,0,0,41,10,114,17,0,0,0,114,164,0,0,
0,0,0,114,164,0,0,0,114,165,0,0,0,114,191,0, 0,114,165,0,0,0,114,190,0,0,0,90,9,105,115,95,
0,0,90,9,105,115,95,114,101,108,111,97,100,114,189,0, 114,101,108,111,97,100,114,188,0,0,0,114,166,0,0,0,
0,0,114,166,0,0,0,114,95,0,0,0,114,96,0,0, 114,95,0,0,0,114,96,0,0,0,114,105,0,0,0,114,
0,114,105,0,0,0,114,10,0,0,0,114,10,0,0,0, 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,10,
114,11,0,0,0,218,10,95,102,105,110,100,95,115,112,101, 95,102,105,110,100,95,115,112,101,99,122,3,0,0,115,54,
99,122,3,0,0,115,54,0,0,0,0,2,6,1,8,2, 0,0,0,0,2,6,1,8,2,8,3,4,1,12,5,10,
8,3,4,1,12,5,10,1,8,1,8,1,2,1,10,1, 1,8,1,8,1,2,1,10,1,14,1,12,1,8,1,20,
14,1,12,1,8,1,20,2,22,1,8,2,18,1,10,1, 2,22,1,8,2,18,1,10,1,2,1,10,1,14,4,14,
2,1,10,1,14,4,14,2,8,1,8,2,10,2,10,2, 2,8,1,8,2,10,2,10,2,114,194,0,0,0,99,3,
114,195,0,0,0,99,3,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5,
0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,108, 0,0,0,67,0,0,0,115,108,0,0,0,116,0,124,0,
0,0,0,116,0,124,0,116,1,131,2,115,28,116,2,100, 116,1,131,2,115,28,116,2,100,1,160,3,116,4,124,0,
1,160,3,116,4,124,0,131,1,161,1,131,1,130,1,124, 131,1,161,1,131,1,130,1,124,2,100,2,107,0,114,44,
2,100,2,107,0,114,44,116,5,100,3,131,1,130,1,124, 116,5,100,3,131,1,130,1,124,2,100,2,107,4,114,84,
2,100,2,107,4,114,84,116,0,124,1,116,1,131,2,115, 116,0,124,1,116,1,131,2,115,72,116,2,100,4,131,1,
72,116,2,100,4,131,1,130,1,110,12,124,1,115,84,116, 130,1,110,12,124,1,115,84,116,6,100,5,131,1,130,1,
6,100,5,131,1,130,1,124,0,115,104,124,2,100,2,107, 124,0,115,104,124,2,100,2,107,2,114,104,116,5,100,6,
2,114,104,116,5,100,6,131,1,130,1,100,7,83,0,41, 131,1,130,1,100,7,83,0,41,8,122,28,86,101,114,105,
8,122,28,86,101,114,105,102,121,32,97,114,103,117,109,101, 102,121,32,97,114,103,117,109,101,110,116,115,32,97,114,101,
110,116,115,32,97,114,101,32,34,115,97,110,101,34,46,122, 32,34,115,97,110,101,34,46,122,31,109,111,100,117,108,101,
31,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115, 32,110,97,109,101,32,109,117,115,116,32,98,101,32,115,116,
116,32,98,101,32,115,116,114,44,32,110,111,116,32,123,125, 114,44,32,110,111,116,32,123,125,114,22,0,0,0,122,18,
114,22,0,0,0,122,18,108,101,118,101,108,32,109,117,115, 108,101,118,101,108,32,109,117,115,116,32,98,101,32,62,61,
116,32,98,101,32,62,61,32,48,122,31,95,95,112,97,99, 32,48,122,31,95,95,112,97,99,107,97,103,101,95,95,32,
107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,116, 110,111,116,32,115,101,116,32,116,111,32,97,32,115,116,114,
111,32,97,32,115,116,114,105,110,103,122,54,97,116,116,101, 105,110,103,122,54,97,116,116,101,109,112,116,101,100,32,114,
109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105, 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,119,
109,112,111,114,116,32,119,105,116,104,32,110,111,32,107,110, 105,116,104,32,110,111,32,107,110,111,119,110,32,112,97,114,
111,119,110,32,112,97,114,101,110,116,32,112,97,99,107,97, 101,110,116,32,112,97,99,107,97,103,101,122,17,69,109,112,
103,101,122,17,69,109,112,116,121,32,109,111,100,117,108,101, 116,121,32,109,111,100,117,108,101,32,110,97,109,101,78,41,
32,110,97,109,101,78,41,7,218,10,105,115,105,110,115,116, 7,218,10,105,115,105,110,115,116,97,110,99,101,218,3,115,
97,110,99,101,218,3,115,116,114,218,9,84,121,112,101,69, 116,114,218,9,84,121,112,101,69,114,114,111,114,114,45,0,
114,114,111,114,114,45,0,0,0,114,14,0,0,0,114,185, 0,0,114,14,0,0,0,218,10,86,97,108,117,101,69,114,
0,0,0,114,79,0,0,0,169,3,114,17,0,0,0,114, 114,111,114,114,79,0,0,0,169,3,114,17,0,0,0,114,
186,0,0,0,114,187,0,0,0,114,10,0,0,0,114,10, 185,0,0,0,114,186,0,0,0,114,10,0,0,0,114,10,
0,0,0,114,11,0,0,0,218,13,95,115,97,110,105,116, 0,0,0,114,11,0,0,0,218,13,95,115,97,110,105,116,
121,95,99,104,101,99,107,169,3,0,0,115,22,0,0,0, 121,95,99,104,101,99,107,169,3,0,0,115,22,0,0,0,
0,2,10,1,18,1,8,1,8,1,8,1,10,1,10,1, 0,2,10,1,18,1,8,1,8,1,8,1,10,1,10,1,
@ -1462,7 +1462,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95, 0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95,
69,82,82,95,77,83,71,114,45,0,0,0,218,19,77,111, 69,82,82,95,77,83,71,114,45,0,0,0,218,19,77,111,
100,117,108,101,78,111,116,70,111,117,110,100,69,114,114,111, 100,117,108,101,78,111,116,70,111,117,110,100,69,114,114,111,
114,114,195,0,0,0,114,159,0,0,0,114,5,0,0,0, 114,114,194,0,0,0,114,159,0,0,0,114,5,0,0,0,
41,8,114,17,0,0,0,218,7,105,109,112,111,114,116,95, 41,8,114,17,0,0,0,218,7,105,109,112,111,114,116,95,
114,164,0,0,0,114,130,0,0,0,90,13,112,97,114,101, 114,164,0,0,0,114,130,0,0,0,90,13,112,97,114,101,
110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95, 110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95,
@ -1520,7 +1520,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101, 97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101,
32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46, 32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46,
10,10,32,32,32,32,114,22,0,0,0,41,4,114,200,0, 10,10,32,32,32,32,114,22,0,0,0,41,4,114,200,0,
0,0,114,188,0,0,0,114,207,0,0,0,218,11,95,103, 0,0,114,187,0,0,0,114,207,0,0,0,218,11,95,103,
99,100,95,105,109,112,111,114,116,114,199,0,0,0,114,10, 99,100,95,105,109,112,111,114,116,114,199,0,0,0,114,10,
0,0,0,114,10,0,0,0,114,11,0,0,0,114,208,0, 0,0,0,114,10,0,0,0,114,11,0,0,0,114,208,0,
0,0,234,3,0,0,115,8,0,0,0,0,9,12,1,8, 0,0,234,3,0,0,115,8,0,0,0,0,9,12,1,8,
@ -1561,8 +1561,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,115, 122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,115,
116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,1, 116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,1,
42,218,7,95,95,97,108,108,95,95,84,114,209,0,0,0, 42,218,7,95,95,97,108,108,95,95,84,114,209,0,0,0,
114,182,0,0,0,78,41,16,114,196,0,0,0,114,197,0, 114,182,0,0,0,78,41,16,114,195,0,0,0,114,196,0,
0,0,114,1,0,0,0,114,198,0,0,0,114,14,0,0, 0,0,114,1,0,0,0,114,197,0,0,0,114,14,0,0,
0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,95, 0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,95,
102,114,111,109,108,105,115,116,114,212,0,0,0,114,45,0, 102,114,111,109,108,105,115,116,114,212,0,0,0,114,45,0,
0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0, 0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0,
@ -1609,9 +1609,9 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
110,32,95,95,110,97,109,101,95,95,32,97,110,100,32,95, 110,32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,
95,112,97,116,104,95,95,114,1,0,0,0,114,141,0,0, 95,112,97,116,104,95,95,114,1,0,0,0,114,141,0,0,
0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0, 0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0,
0,0,114,130,0,0,0,114,192,0,0,0,114,193,0,0, 0,0,114,130,0,0,0,114,191,0,0,0,114,192,0,0,
0,114,194,0,0,0,114,129,0,0,0,41,3,218,7,103, 0,114,193,0,0,0,114,129,0,0,0,41,3,218,7,103,
108,111,98,97,108,115,114,186,0,0,0,114,95,0,0,0, 108,111,98,97,108,115,114,185,0,0,0,114,95,0,0,0,
114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
17,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101, 17,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,
95,95,30,4,0,0,115,38,0,0,0,0,7,10,1,10, 95,95,30,4,0,0,115,38,0,0,0,0,7,10,1,10,
@ -1666,8 +1666,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
111,110,114,184,0,0,0,114,15,0,0,0,114,92,0,0, 111,110,114,184,0,0,0,114,15,0,0,0,114,92,0,0,
0,114,1,0,0,0,114,4,0,0,0,114,213,0,0,0, 0,114,1,0,0,0,114,4,0,0,0,114,213,0,0,0,
41,9,114,17,0,0,0,114,218,0,0,0,218,6,108,111, 41,9,114,17,0,0,0,114,218,0,0,0,218,6,108,111,
99,97,108,115,114,214,0,0,0,114,187,0,0,0,114,96, 99,97,108,115,114,214,0,0,0,114,186,0,0,0,114,96,
0,0,0,90,8,103,108,111,98,97,108,115,95,114,186,0, 0,0,0,90,8,103,108,111,98,97,108,115,95,114,185,0,
0,0,90,7,99,117,116,95,111,102,102,114,10,0,0,0, 0,0,90,7,99,117,116,95,111,102,102,114,10,0,0,0,
114,10,0,0,0,114,11,0,0,0,218,10,95,95,105,109, 114,10,0,0,0,114,11,0,0,0,218,10,95,95,105,109,
112,111,114,116,95,95,57,4,0,0,115,30,0,0,0,0, 112,111,114,116,95,95,57,4,0,0,115,30,0,0,0,0,
@ -1713,10 +1713,10 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
101,32,116,119,111,32,109,111,100,117,108,101,115,32,109,117, 101,32,116,119,111,32,109,111,100,117,108,101,115,32,109,117,
115,116,32,98,101,32,101,120,112,108,105,99,105,116,108,121, 115,116,32,98,101,32,101,120,112,108,105,99,105,116,108,121,
32,112,97,115,115,101,100,32,105,110,46,10,10,32,32,32, 32,112,97,115,115,101,100,32,105,110,46,10,10,32,32,32,
32,41,3,114,23,0,0,0,114,192,0,0,0,114,64,0, 32,41,3,114,23,0,0,0,114,191,0,0,0,114,64,0,
0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114, 0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114,
14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115, 14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115,
114,196,0,0,0,114,78,0,0,0,114,160,0,0,0,114, 114,195,0,0,0,114,78,0,0,0,114,160,0,0,0,114,
88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148, 88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148,
0,0,0,114,1,0,0,0,114,223,0,0,0,114,5,0, 0,0,0,114,1,0,0,0,114,223,0,0,0,114,5,0,
0,0,41,10,218,10,115,121,115,95,109,111,100,117,108,101, 0,0,41,10,218,10,115,121,115,95,109,111,100,117,108,101,
@ -1738,7 +1738,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
108,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32, 108,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32,
98,117,105,108,116,105,110,32,97,110,100,32,102,114,111,122, 98,117,105,108,116,105,110,32,97,110,100,32,102,114,111,122,
101,110,32,109,111,100,117,108,101,115,78,41,6,114,227,0, 101,110,32,109,111,100,117,108,101,115,78,41,6,114,227,0,
0,0,114,15,0,0,0,114,191,0,0,0,114,120,0,0, 0,0,114,15,0,0,0,114,190,0,0,0,114,120,0,0,
0,114,160,0,0,0,114,173,0,0,0,41,2,114,225,0, 0,114,160,0,0,0,114,173,0,0,0,41,2,114,225,0,
0,0,114,226,0,0,0,114,10,0,0,0,114,10,0,0, 0,0,114,226,0,0,0,114,10,0,0,0,114,10,0,0,
0,114,11,0,0,0,218,8,95,105,110,115,116,97,108,108, 0,114,11,0,0,0,218,8,95,105,110,115,116,97,108,108,
@ -1771,7 +1771,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114, 114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114,
93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94, 93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94,
0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0, 0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0,
0,0,114,188,0,0,0,114,190,0,0,0,114,195,0,0, 0,0,114,187,0,0,0,114,189,0,0,0,114,194,0,0,
0,114,200,0,0,0,90,15,95,69,82,82,95,77,83,71, 0,114,200,0,0,0,90,15,95,69,82,82,95,77,83,71,
95,80,82,69,70,73,88,114,202,0,0,0,114,205,0,0, 95,80,82,69,70,73,88,114,202,0,0,0,114,205,0,0,
0,218,6,111,98,106,101,99,116,114,206,0,0,0,114,207, 0,218,6,111,98,106,101,99,116,114,206,0,0,0,114,207,