Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/virtualenv/run/plugin/base.py @ 2:6af9afd405e9 draft
"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author | shellac |
---|---|
date | Thu, 14 May 2020 14:56:58 -0400 |
parents | 26e78fe6e8c4 |
children |
comparison
equal
deleted
inserted
replaced
1:75ca89e9b81c | 2:6af9afd405e9 |
---|---|
1 from __future__ import absolute_import, unicode_literals | |
2 | |
3 import sys | |
4 from collections import OrderedDict | |
5 | |
6 if sys.version_info >= (3, 8): | |
7 from importlib.metadata import entry_points | |
8 else: | |
9 from importlib_metadata import entry_points | |
10 | |
11 | |
12 class PluginLoader(object): | |
13 _OPTIONS = None | |
14 _ENTRY_POINTS = None | |
15 | |
16 @classmethod | |
17 def entry_points_for(cls, key): | |
18 return OrderedDict((e.name, e.load()) for e in cls.entry_points().get(key, {})) | |
19 | |
20 @staticmethod | |
21 def entry_points(): | |
22 if PluginLoader._ENTRY_POINTS is None: | |
23 PluginLoader._ENTRY_POINTS = entry_points() | |
24 return PluginLoader._ENTRY_POINTS | |
25 | |
26 | |
27 class ComponentBuilder(PluginLoader): | |
28 def __init__(self, interpreter, parser, name, possible): | |
29 self.interpreter = interpreter | |
30 self.name = name | |
31 self._impl_class = None | |
32 self.possible = possible | |
33 self.parser = parser.add_argument_group(title=name) | |
34 self.add_selector_arg_parse(name, list(self.possible)) | |
35 | |
36 @classmethod | |
37 def options(cls, key): | |
38 if cls._OPTIONS is None: | |
39 cls._OPTIONS = cls.entry_points_for(key) | |
40 return cls._OPTIONS | |
41 | |
42 def add_selector_arg_parse(self, name, choices): | |
43 raise NotImplementedError | |
44 | |
45 def handle_selected_arg_parse(self, options): | |
46 selected = getattr(options, self.name) | |
47 if selected not in self.possible: | |
48 raise RuntimeError("No implementation for {}".format(self.interpreter)) | |
49 self._impl_class = self.possible[selected] | |
50 self.populate_selected_argparse(selected, options.app_data) | |
51 return selected | |
52 | |
53 def populate_selected_argparse(self, selected, app_data): | |
54 self.parser.description = "options for {} {}".format(self.name, selected) | |
55 self._impl_class.add_parser_arguments(self.parser, self.interpreter, app_data) | |
56 | |
57 def create(self, options): | |
58 return self._impl_class(options, self.interpreter) |