bpo-39517: Allow runpy.run_path() to accept path-like objects (GH-18699)
This commit is contained in:
parent
4ca060d8ad
commit
0911ea5c17
@ -15,6 +15,7 @@ import importlib.machinery # importlib first so we can test #15386 via -m
|
|||||||
import importlib.util
|
import importlib.util
|
||||||
import io
|
import io
|
||||||
import types
|
import types
|
||||||
|
import os
|
||||||
from pkgutil import read_code, get_importer
|
from pkgutil import read_code, get_importer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@ -229,11 +230,12 @@ def _get_main_module_details(error=ImportError):
|
|||||||
|
|
||||||
def _get_code_from_file(run_name, fname):
|
def _get_code_from_file(run_name, fname):
|
||||||
# Check for a compiled file first
|
# Check for a compiled file first
|
||||||
with io.open_code(fname) as f:
|
decoded_path = os.path.abspath(os.fsdecode(fname))
|
||||||
|
with io.open_code(decoded_path) as f:
|
||||||
code = read_code(f)
|
code = read_code(f)
|
||||||
if code is None:
|
if code is None:
|
||||||
# That didn't work, so try it as normal source code
|
# That didn't work, so try it as normal source code
|
||||||
with io.open_code(fname) as f:
|
with io.open_code(decoded_path) as f:
|
||||||
code = compile(f.read(), fname, 'exec')
|
code = compile(f.read(), fname, 'exec')
|
||||||
return code, fname
|
return code, fname
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import tempfile
|
|||||||
import importlib, importlib.machinery, importlib.util
|
import importlib, importlib.machinery, importlib.util
|
||||||
import py_compile
|
import py_compile
|
||||||
import warnings
|
import warnings
|
||||||
|
import pathlib
|
||||||
from test.support import (
|
from test.support import (
|
||||||
forget, make_legacy_pyc, unload, verbose, no_tracing,
|
forget, make_legacy_pyc, unload, verbose, no_tracing,
|
||||||
create_empty_file, temp_dir)
|
create_empty_file, temp_dir)
|
||||||
@ -652,6 +653,14 @@ class RunPathTestCase(unittest.TestCase, CodeExecutionMixin):
|
|||||||
self._check_script(script_name, "<run_path>", script_name,
|
self._check_script(script_name, "<run_path>", script_name,
|
||||||
script_name, expect_spec=False)
|
script_name, expect_spec=False)
|
||||||
|
|
||||||
|
def test_basic_script_with_path_object(self):
|
||||||
|
with temp_dir() as script_dir:
|
||||||
|
mod_name = 'script'
|
||||||
|
script_name = pathlib.Path(self._make_test_script(script_dir,
|
||||||
|
mod_name))
|
||||||
|
self._check_script(script_name, "<run_path>", script_name,
|
||||||
|
script_name, expect_spec=False)
|
||||||
|
|
||||||
def test_basic_script_no_suffix(self):
|
def test_basic_script_no_suffix(self):
|
||||||
with temp_dir() as script_dir:
|
with temp_dir() as script_dir:
|
||||||
mod_name = 'script'
|
mod_name = 'script'
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
Fix runpy.run_path() when using pathlike objects
|
Loading…
x
Reference in New Issue
Block a user