summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMario Corchero <mariocj89@gmail.com>2018-02-03 06:40:11 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2018-02-03 06:40:11 (GMT)
commit38bfa8418f5d39bcc7478b8f7aef4a632c26172e (patch)
tree33c7f43db19885633bbbc0f66cf46d9c74cb9de3 /Lib
parent4e9da0d163731caa79811c723c703ee416c31826 (diff)
downloadcpython-38bfa8418f5d39bcc7478b8f7aef4a632c26172e.zip
cpython-38bfa8418f5d39bcc7478b8f7aef4a632c26172e.tar.gz
cpython-38bfa8418f5d39bcc7478b8f7aef4a632c26172e.tar.bz2
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.
Diffstat (limited to 'Lib')
-rwxr-xr-xLib/pdb.py2
-rw-r--r--Lib/test/test_pdb.py33
2 files changed, 33 insertions, 2 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 366a85b..60bdb76 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -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__,
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 70d8d1d..9aa38e0 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -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