From 7d6378051feeadf45b4ce45b4b406b65df255648 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Tue, 14 Jan 2020 20:49:30 +0000 Subject: bpo-38901: Allow setting a venv's prompt to the basename of the current directory. (GH-17946) When a prompt value of '.' is specified, os.path.basename(os.getcwd()) is used to configure the prompt for the created venv. --- Doc/library/venv.rst | 3 ++- Lib/test/test_venv.py | 9 +++++++++ Lib/venv/__init__.py | 2 ++ .../NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst index 5494c0c..d778486 100644 --- a/Doc/library/venv.rst +++ b/Doc/library/venv.rst @@ -122,7 +122,8 @@ creation according to their needs, the :class:`EnvBuilder` class. * ``prompt`` -- a String to be used after virtual environment is activated (defaults to ``None`` which means directory name of the environment would - be used). + be used). If the special string ``"."`` is provided, the basename of the + current directory is used as the prompt. * ``upgrade_deps`` -- Update the base venv modules to the latest on PyPI diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index 741ac10..a3b78c4 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -138,6 +138,15 @@ class BasicTest(BaseTest): self.assertEqual(context.prompt, '(My prompt) ') self.assertIn("prompt = 'My prompt'\n", data) + rmtree(self.env_dir) + builder = venv.EnvBuilder(prompt='.') + cwd = os.path.basename(os.getcwd()) + self.run_with_capture(builder.create, self.env_dir) + context = builder.ensure_directories(self.env_dir) + data = self.get_text_file_contents('pyvenv.cfg') + self.assertEqual(context.prompt, '(%s) ' % cwd) + self.assertIn("prompt = '%s'\n" % cwd, data) + def test_upgrade_dependencies(self): builder = venv.EnvBuilder() bin_path = 'Scripts' if sys.platform == 'win32' else 'bin' diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index 81cb1d1..a220ef7 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -51,6 +51,8 @@ class EnvBuilder: self.symlinks = symlinks self.upgrade = upgrade self.with_pip = with_pip + if prompt == '.': # see bpo-38901 + prompt = os.path.basename(os.getcwd()) self.prompt = prompt self.upgrade_deps = upgrade_deps diff --git a/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst b/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst new file mode 100644 index 0000000..304d532 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst @@ -0,0 +1,3 @@ +When you specify prompt='.' or equivalently python -m venv --prompt . ... +the basename of the current directory is used to set the created venv's +prompt when it's activated. -- cgit v0.12