bpo-32691: Use mod_spec.parent when running modules with pdb (GH-5474)
Previously the module name was used, which broke relative imports when pdb was run against a plain module or submodule.
This commit is contained in:
parent
4e9da0d163
commit
38bfa8418f
|
@ -1532,7 +1532,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
__main__.__dict__.update({
|
||||
"__name__": "__main__",
|
||||
"__file__": self.mainpyfile,
|
||||
"__package__": module_name,
|
||||
"__package__": mod_spec.parent,
|
||||
"__loader__": mod_spec.loader,
|
||||
"__spec__": mod_spec,
|
||||
"__builtins__": __builtins__,
|
||||
|
|
|
@ -1447,10 +1447,41 @@ class PdbTestCase(unittest.TestCase):
|
|||
quit
|
||||
"""
|
||||
stdout, _ = self._run_pdb(['-m', self.module_name], commands)
|
||||
self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()))
|
||||
self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout)
|
||||
self.assertTrue(any("VAR from top" in l for l in stdout.splitlines()))
|
||||
self.assertTrue(any("second var" in l for l in stdout.splitlines()))
|
||||
|
||||
def test_relative_imports_on_plain_module(self):
|
||||
# Validates running a plain module. See bpo32691
|
||||
self.module_name = 't_main'
|
||||
support.rmtree(self.module_name)
|
||||
main_file = self.module_name + '/runme.py'
|
||||
init_file = self.module_name + '/__init__.py'
|
||||
module_file = self.module_name + '/module.py'
|
||||
self.addCleanup(support.rmtree, self.module_name)
|
||||
os.mkdir(self.module_name)
|
||||
with open(init_file, 'w') as f:
|
||||
f.write(textwrap.dedent("""
|
||||
top_var = "VAR from top"
|
||||
"""))
|
||||
with open(main_file, 'w') as f:
|
||||
f.write(textwrap.dedent("""
|
||||
from . import module
|
||||
pass # We'll stop here and print the vars
|
||||
"""))
|
||||
with open(module_file, 'w') as f:
|
||||
f.write(textwrap.dedent("""
|
||||
var = "VAR from module"
|
||||
"""))
|
||||
commands = """
|
||||
b 3
|
||||
c
|
||||
p module.var
|
||||
quit
|
||||
"""
|
||||
stdout, _ = self._run_pdb(['-m', self.module_name + '.runme'], commands)
|
||||
self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout)
|
||||
|
||||
|
||||
def load_tests(*args):
|
||||
from test import test_pdb
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Use mod_spec.parent when running modules with pdb
|
Loading…
Reference in New Issue