mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
merge for issue #18351.
This commit is contained in:
commit
7e5d55705c
5 changed files with 843 additions and 807 deletions
|
@ -443,16 +443,14 @@ def _get_sourcefile(bytecode_path):
|
||||||
"""
|
"""
|
||||||
if len(bytecode_path) == 0:
|
if len(bytecode_path) == 0:
|
||||||
return None
|
return None
|
||||||
rest, _, extension = bytecode_path.rparition('.')
|
rest, _, extension = bytecode_path.rpartition('.')
|
||||||
if not rest or extension.lower()[-3:-1] != '.py':
|
if not rest or extension.lower()[-3:-1] != 'py':
|
||||||
return bytecode_path
|
return bytecode_path
|
||||||
|
|
||||||
try:
|
try:
|
||||||
source_path = source_from_cache(bytecode_path)
|
source_path = source_from_cache(bytecode_path)
|
||||||
except (NotImplementedError, ValueError):
|
except (NotImplementedError, ValueError):
|
||||||
source_path = bytcode_path[-1:]
|
source_path = bytecode_path[:-1]
|
||||||
|
return source_path if _path_isfile(source_path) else bytecode_path
|
||||||
return source_path if _path_isfile(source_stats) else bytecode_path
|
|
||||||
|
|
||||||
|
|
||||||
def _calc_mode(path):
|
def _calc_mode(path):
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# We import importlib *ASAP* in order to test #15386
|
# We import importlib *ASAP* in order to test #15386
|
||||||
import importlib
|
import importlib
|
||||||
import importlib.util
|
import importlib.util
|
||||||
|
from importlib._bootstrap import _get_sourcefile
|
||||||
import builtins
|
import builtins
|
||||||
from test.test_importlib.import_ import util as importlib_util
|
from test.test_importlib.import_ import util as importlib_util
|
||||||
import marshal
|
import marshal
|
||||||
|
@ -11,6 +12,7 @@ import random
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
import unittest.mock as mock
|
||||||
import textwrap
|
import textwrap
|
||||||
import errno
|
import errno
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -851,6 +853,40 @@ class ImportlibBootstrapTests(unittest.TestCase):
|
||||||
self.assertIs(machinery.FileFinder, mod.FileFinder)
|
self.assertIs(machinery.FileFinder, mod.FileFinder)
|
||||||
|
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
class GetSourcefileTests(unittest.TestCase):
|
||||||
|
|
||||||
|
"""Test importlib._bootstrap._get_sourcefile() as used by the C API.
|
||||||
|
|
||||||
|
Because of the peculiarities of the need of this function, the tests are
|
||||||
|
knowingly whitebox tests.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_get_sourcefile(self):
|
||||||
|
# Given a valid bytecode path, return the path to the corresponding
|
||||||
|
# source file if it exists.
|
||||||
|
with mock.patch('importlib._bootstrap._path_isfile') as _path_isfile:
|
||||||
|
_path_isfile.return_value = True;
|
||||||
|
path = TESTFN + '.pyc'
|
||||||
|
expect = TESTFN + '.py'
|
||||||
|
self.assertEqual(_get_sourcefile(path), expect)
|
||||||
|
|
||||||
|
def test_get_sourcefile_no_source(self):
|
||||||
|
# Given a valid bytecode path without a corresponding source path,
|
||||||
|
# return the original bytecode path.
|
||||||
|
with mock.patch('importlib._bootstrap._path_isfile') as _path_isfile:
|
||||||
|
_path_isfile.return_value = False;
|
||||||
|
path = TESTFN + '.pyc'
|
||||||
|
self.assertEqual(_get_sourcefile(path), path)
|
||||||
|
|
||||||
|
def test_get_sourcefile_bad_ext(self):
|
||||||
|
# Given a path with an invalid bytecode extension, return the
|
||||||
|
# bytecode path passed as the argument.
|
||||||
|
path = TESTFN + '.bad_ext'
|
||||||
|
self.assertEqual(_get_sourcefile(path), path)
|
||||||
|
|
||||||
|
|
||||||
class ImportTracebackTests(unittest.TestCase):
|
class ImportTracebackTests(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -808,6 +808,7 @@ Laura Matson
|
||||||
Graham Matthews
|
Graham Matthews
|
||||||
Dieter Maurer
|
Dieter Maurer
|
||||||
Daniel May
|
Daniel May
|
||||||
|
Madison May
|
||||||
Lucas Maystre
|
Lucas Maystre
|
||||||
Arnaud Mazin
|
Arnaud Mazin
|
||||||
Rebecca McCreary
|
Rebecca McCreary
|
||||||
|
|
|
@ -542,6 +542,9 @@ Documentation
|
||||||
C-API
|
C-API
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #18351: Fix various issues in a function in importlib provided to help
|
||||||
|
PyImport_ExecCodeModuleWithPathnames() (and thus by extension PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).
|
||||||
|
|
||||||
- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
|
- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
|
||||||
PyObject_CallMethod() now changed to `const char*`. Based on patches by
|
PyObject_CallMethod() now changed to `const char*`. Based on patches by
|
||||||
Jörg Müller and Lars Buitinck.
|
Jörg Müller and Lars Buitinck.
|
||||||
|
|
1600
Python/importlib.h
1600
Python/importlib.h
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue