Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/virtualenv/create/describe.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 from __future__ import absolute_import, print_function, unicode_literals | |
2 | |
3 from abc import ABCMeta | |
4 from collections import OrderedDict | |
5 | |
6 from six import add_metaclass | |
7 | |
8 from virtualenv.info import IS_WIN | |
9 from virtualenv.util.path import Path | |
10 from virtualenv.util.six import ensure_text | |
11 | |
12 | |
13 @add_metaclass(ABCMeta) | |
14 class Describe(object): | |
15 """Given a host interpreter tell us information about what the created interpreter might look like""" | |
16 | |
17 suffix = ".exe" if IS_WIN else "" | |
18 | |
19 def __init__(self, dest, interpreter): | |
20 self.interpreter = interpreter | |
21 self.dest = dest | |
22 self._stdlib = None | |
23 self._stdlib_platform = None | |
24 self._system_stdlib = None | |
25 self._conf_vars = None | |
26 | |
27 @property | |
28 def bin_dir(self): | |
29 return self.script_dir | |
30 | |
31 @property | |
32 def script_dir(self): | |
33 return self.dest / Path(self.interpreter.distutils_install["scripts"]) | |
34 | |
35 @property | |
36 def purelib(self): | |
37 return self.dest / self.interpreter.distutils_install["purelib"] | |
38 | |
39 @property | |
40 def platlib(self): | |
41 return self.dest / self.interpreter.distutils_install["platlib"] | |
42 | |
43 @property | |
44 def libs(self): | |
45 return list(OrderedDict(((self.platlib, None), (self.purelib, None))).keys()) | |
46 | |
47 @property | |
48 def stdlib(self): | |
49 if self._stdlib is None: | |
50 self._stdlib = Path(self.interpreter.sysconfig_path("stdlib", config_var=self._config_vars)) | |
51 return self._stdlib | |
52 | |
53 @property | |
54 def stdlib_platform(self): | |
55 if self._stdlib_platform is None: | |
56 self._stdlib_platform = Path(self.interpreter.sysconfig_path("platstdlib", config_var=self._config_vars)) | |
57 return self._stdlib_platform | |
58 | |
59 @property | |
60 def _config_vars(self): | |
61 if self._conf_vars is None: | |
62 self._conf_vars = self._calc_config_vars(ensure_text(str(self.dest))) | |
63 return self._conf_vars | |
64 | |
65 def _calc_config_vars(self, to): | |
66 return { | |
67 k: (to if v.startswith(self.interpreter.prefix) else v) for k, v in self.interpreter.sysconfig_vars.items() | |
68 } | |
69 | |
70 @classmethod | |
71 def can_describe(cls, interpreter): | |
72 """Knows means it knows how the output will look""" | |
73 return True | |
74 | |
75 @property | |
76 def env_name(self): | |
77 return ensure_text(self.dest.parts[-1]) | |
78 | |
79 @property | |
80 def exe(self): | |
81 return self.bin_dir / "{}{}".format(self.exe_stem(), self.suffix) | |
82 | |
83 @classmethod | |
84 def exe_stem(cls): | |
85 """executable name without suffix - there seems to be no standard way to get this without creating it""" | |
86 raise NotImplementedError | |
87 | |
88 def script(self, name): | |
89 return self.script_dir / "{}{}".format(name, self.suffix) | |
90 | |
91 | |
92 @add_metaclass(ABCMeta) | |
93 class Python2Supports(Describe): | |
94 @classmethod | |
95 def can_describe(cls, interpreter): | |
96 return interpreter.version_info.major == 2 and super(Python2Supports, cls).can_describe(interpreter) | |
97 | |
98 | |
99 @add_metaclass(ABCMeta) | |
100 class Python3Supports(Describe): | |
101 @classmethod | |
102 def can_describe(cls, interpreter): | |
103 return interpreter.version_info.major == 3 and super(Python3Supports, cls).can_describe(interpreter) | |
104 | |
105 | |
106 @add_metaclass(ABCMeta) | |
107 class PosixSupports(Describe): | |
108 @classmethod | |
109 def can_describe(cls, interpreter): | |
110 return interpreter.os == "posix" and super(PosixSupports, cls).can_describe(interpreter) | |
111 | |
112 | |
113 @add_metaclass(ABCMeta) | |
114 class WindowsSupports(Describe): | |
115 @classmethod | |
116 def can_describe(cls, interpreter): | |
117 return interpreter.os == "nt" and super(WindowsSupports, cls).can_describe(interpreter) |