diff env/lib/python3.9/site-packages/virtualenv/activation/via_template.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/virtualenv/activation/via_template.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,67 @@
+from __future__ import absolute_import, unicode_literals
+
+import os
+import sys
+from abc import ABCMeta, abstractmethod
+
+from six import add_metaclass
+
+from virtualenv.util.six import ensure_text
+
+from .activator import Activator
+
+if sys.version_info >= (3, 7):
+    from importlib.resources import read_binary
+else:
+    from importlib_resources import read_binary
+
+
+@add_metaclass(ABCMeta)
+class ViaTemplateActivator(Activator):
+    @abstractmethod
+    def templates(self):
+        raise NotImplementedError
+
+    def generate(self, creator):
+        dest_folder = creator.bin_dir
+        replacements = self.replacements(creator, dest_folder)
+        generated = self._generate(replacements, self.templates(), dest_folder, creator)
+        if self.flag_prompt is not None:
+            creator.pyenv_cfg["prompt"] = self.flag_prompt
+        return generated
+
+    def replacements(self, creator, dest_folder):
+        return {
+            "__VIRTUAL_PROMPT__": "" if self.flag_prompt is None else self.flag_prompt,
+            "__VIRTUAL_ENV__": ensure_text(str(creator.dest)),
+            "__VIRTUAL_NAME__": creator.env_name,
+            "__BIN_NAME__": ensure_text(str(creator.bin_dir.relative_to(creator.dest))),
+            "__PATH_SEP__": ensure_text(os.pathsep),
+        }
+
+    def _generate(self, replacements, templates, to_folder, creator):
+        generated = []
+        for template in templates:
+            text = self.instantiate_template(replacements, template, creator)
+            dest = to_folder / self.as_name(template)
+            # use write_bytes to avoid platform specific line normalization (\n -> \r\n)
+            dest.write_bytes(text.encode("utf-8"))
+            generated.append(dest)
+        return generated
+
+    def as_name(self, template):
+        return template.name
+
+    def instantiate_template(self, replacements, template, creator):
+        # read content as binary to avoid platform specific line normalization (\n -> \r\n)
+        binary = read_binary(self.__module__, str(template))
+        text = binary.decode("utf-8", errors="strict")
+        for key, value in replacements.items():
+            value = self._repr_unicode(creator, value)
+            text = text.replace(key, value)
+        return text
+
+    @staticmethod
+    def _repr_unicode(creator, value):
+        # by default we just let it be unicode
+        return value