[Python-checkins] cpython: Closes #22829: Added --prompt option to venv.

vinay.sajip python-checkins at python.org
Sat Aug 6 05:43:58 EDT 2016


https://hg.python.org/cpython/rev/6703847eeb31
changeset:   102553:6703847eeb31
user:        Vinay Sajip <vinay_sajip at yahoo.co.uk>
date:        Sat Aug 06 10:43:44 2016 +0100
summary:
  Closes #22829: Added --prompt option to venv.

files:
  Doc/library/venv.rst  |  10 +++++++++-
  Doc/whatsnew/3.6.rst  |   8 ++++++++
  Lib/test/test_venv.py |  11 +++++++++++
  Lib/venv/__init__.py  |  18 +++++++++++++-----
  4 files changed, 41 insertions(+), 6 deletions(-)


diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
--- a/Doc/library/venv.rst
+++ b/Doc/library/venv.rst
@@ -89,7 +89,8 @@
 creation according to their needs, the :class:`EnvBuilder` class.
 
 .. class:: EnvBuilder(system_site_packages=False, clear=False, \
-                      symlinks=False, upgrade=False, with_pip=False)
+                      symlinks=False, upgrade=False, with_pip=False, \
+                      prompt=None)
 
     The :class:`EnvBuilder` class accepts the following keyword arguments on
     instantiation:
@@ -113,9 +114,16 @@
       installed in the virtual environment. This uses :mod:`ensurepip` with
       the ``--default-pip`` option.
 
+    * ``prompt`` -- a String to be used after virtual environment is activated
+      (defaults to ``None`` which means directory name of the environment would
+      be used).
+
     .. versionchanged:: 3.4
        Added the ``with_pip`` parameter
 
+    .. versionadded:: 3.6
+       Added the ``prompt`` parameter
+
 
     Creators of third-party virtual environment tools will be free to use the
     provided ``EnvBuilder`` class as a base class.
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -284,6 +284,14 @@
 (Contributed by Brett Cannon in :issue:`25609`.)
 
 
+venv
+----
+
+:mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an
+alternative prefix for the virtual environment. (Proposed by Łukasz.Balcerzak
+and ported to 3.6 by Stéphane Wirtel in :issue:`22829`.)
+
+
 datetime
 --------
 
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -114,6 +114,17 @@
             print('    %r' % os.listdir(bd))
         self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn)
 
+    def test_prompt(self):
+        env_name = os.path.split(self.env_dir)[1]
+
+        builder = venv.EnvBuilder()
+        context = builder.ensure_directories(self.env_dir)
+        self.assertEqual(context.prompt, '(%s) ' % env_name)
+
+        builder = venv.EnvBuilder(prompt='My prompt')
+        context = builder.ensure_directories(self.env_dir)
+        self.assertEqual(context.prompt, '(My prompt) ')
+
     @skipInVenv
     def test_prefixes(self):
         """
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -36,15 +36,17 @@
     :param upgrade: If True, upgrade an existing virtual environment.
     :param with_pip: If True, ensure pip is installed in the virtual
                      environment
+    :param prompt: Alternative terminal prefix for the environment.
     """
 
     def __init__(self, system_site_packages=False, clear=False,
-                 symlinks=False, upgrade=False, with_pip=False):
+                 symlinks=False, upgrade=False, with_pip=False, prompt=None):
         self.system_site_packages = system_site_packages
         self.clear = clear
         self.symlinks = symlinks
         self.upgrade = upgrade
         self.with_pip = with_pip
+        self.prompt = prompt
 
     def create(self, env_dir):
         """
@@ -90,7 +92,8 @@
         context = types.SimpleNamespace()
         context.env_dir = env_dir
         context.env_name = os.path.split(env_dir)[1]
-        context.prompt = '(%s) ' % context.env_name
+        prompt = self.prompt if self.prompt is not None else context.env_name
+        context.prompt = '(%s) ' % prompt
         create_if_needed(env_dir)
         env = os.environ
         if sys.platform == 'darwin' and '__PYVENV_LAUNCHER__' in env:
@@ -326,10 +329,11 @@
 
 
 def create(env_dir, system_site_packages=False, clear=False,
-                    symlinks=False, with_pip=False):
+                    symlinks=False, with_pip=False, prompt=None):
     """Create a virtual environment in a directory."""
     builder = EnvBuilder(system_site_packages=system_site_packages,
-                         clear=clear, symlinks=symlinks, with_pip=with_pip)
+                         clear=clear, symlinks=symlinks, with_pip=with_pip,
+                         prompt=prompt)
     builder.create(env_dir)
 
 def main(args=None):
@@ -389,6 +393,9 @@
                             help='Skips installing or upgrading pip in the '
                                  'virtual environment (pip is bootstrapped '
                                  'by default)')
+        parser.add_argument('--prompt',
+                            help='Provides an alternative prompt prefix for '
+                                 'this environment.')
         options = parser.parse_args(args)
         if options.upgrade and options.clear:
             raise ValueError('you cannot supply --upgrade and --clear together.')
@@ -396,7 +403,8 @@
                              clear=options.clear,
                              symlinks=options.symlinks,
                              upgrade=options.upgrade,
-                             with_pip=options.with_pip)
+                             with_pip=options.with_pip,
+                             prompt=options.prompt)
         for d in options.dirs:
             builder.create(d)
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list