[Python-checkins] bpo-38901: Allow setting a venv's prompt to the basename of the current directory. (GH-17946)

Vinay Sajip webhook-mailer at python.org
Tue Jan 14 15:49:38 EST 2020


https://github.com/python/cpython/commit/7d6378051feeadf45b4ce45b4b406b65df255648
commit: 7d6378051feeadf45b4ce45b4b406b65df255648
branch: master
author: Vinay Sajip <vinay_sajip at yahoo.co.uk>
committer: GitHub <noreply at github.com>
date: 2020-01-14T20:49:30Z
summary:

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.

files:
A Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst
M Doc/library/venv.rst
M Lib/test/test_venv.py
M Lib/venv/__init__.py

diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
index 5494c0c878bc5..d778486b0a5d9 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 741ac109bbc8c..a3b78c4e44e52 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -138,6 +138,15 @@ def test_prompt(self):
         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 81cb1d13e2163..a220ef784c134 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -51,6 +51,8 @@ def __init__(self, system_site_packages=False, clear=False,
         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 0000000000000..304d53289e0ef
--- /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.



More information about the Python-checkins mailing list