summaryrefslogtreecommitdiff
path: root/src/virtualenv/run
diff options
context:
space:
mode:
authorBernát Gábor <bgabor8@bloomberg.net>2020-03-17 12:00:31 +0000
committerGitHub <noreply@github.com>2020-03-17 12:00:31 +0000
commitb2185e4a39d836e8498b87a24b7fb5ec7aaf9276 (patch)
tree60fcca5d7211b7b4dd9ee89b3cc7ec6e76ff802f /src/virtualenv/run
parentf1663de39c34803761a53eba4d3b39cc59ed1560 (diff)
downloadvirtualenv-b2185e4a39d836e8498b87a24b7fb5ec7aaf9276.tar.gz
Fix Windows Store support (#1725)
* Fix Windows Store support Signed-off-by: Bernat Gabor <bgabor8@bloomberg.net>
Diffstat (limited to 'src/virtualenv/run')
-rw-r--r--src/virtualenv/run/plugin/creators.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/virtualenv/run/plugin/creators.py b/src/virtualenv/run/plugin/creators.py
index cbf0a5d..4c349cd 100644
--- a/src/virtualenv/run/plugin/creators.py
+++ b/src/virtualenv/run/plugin/creators.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import, unicode_literals
-from collections import OrderedDict, namedtuple
+from collections import OrderedDict, defaultdict, namedtuple
from virtualenv.create.describe import Describe
from virtualenv.create.via_global_ref.builtin.builtin_way import VirtualenvBuiltin
@@ -13,26 +13,37 @@ CreatorInfo = namedtuple("CreatorInfo", ["key_to_class", "key_to_meta", "describ
class CreatorSelector(ComponentBuilder):
def __init__(self, interpreter, parser):
creators, self.key_to_meta, self.describe, self.builtin_key = self.for_interpreter(interpreter)
- if not creators:
- raise RuntimeError("No virtualenv implementation for {}".format(interpreter))
super(CreatorSelector, self).__init__(interpreter, parser, "creator", creators)
@classmethod
def for_interpreter(cls, interpreter):
key_to_class, key_to_meta, builtin_key, describe = OrderedDict(), {}, None, None
+ errored = defaultdict(list)
for key, creator_class in cls.options("virtualenv.create").items():
if key == "builtin":
raise RuntimeError("builtin creator is a reserved name")
meta = creator_class.can_create(interpreter)
if meta:
- if "builtin" not in key_to_class and issubclass(creator_class, VirtualenvBuiltin):
- builtin_key = key
- key_to_class["builtin"] = creator_class
- key_to_meta["builtin"] = meta
- key_to_class[key] = creator_class
- key_to_meta[key] = meta
+ if meta.error:
+ errored[meta.error].append(creator_class)
+ else:
+ if "builtin" not in key_to_class and issubclass(creator_class, VirtualenvBuiltin):
+ builtin_key = key
+ key_to_class["builtin"] = creator_class
+ key_to_meta["builtin"] = meta
+ key_to_class[key] = creator_class
+ key_to_meta[key] = meta
if describe is None and issubclass(creator_class, Describe) and creator_class.can_describe(interpreter):
describe = creator_class
+ if not key_to_meta:
+ if errored:
+ raise RuntimeError(
+ "\n".join(
+ "{} for creators {}".format(k, ", ".join(i.__name__ for i in v)) for k, v in errored.items()
+ )
+ )
+ else:
+ raise RuntimeError("No virtualenv implementation for {}".format(interpreter))
return CreatorInfo(
key_to_class=key_to_class, key_to_meta=key_to_meta, describe=describe, builtin_key=builtin_key
)