|
5 | 5 | from paths_cli.wizard.parameters import WizardParameter |
6 | 6 | from paths_cli.wizard.helper import Helper |
7 | 7 |
|
| 8 | + |
| 9 | +class WizardObjectPluginRegistrationError(Exception): |
| 10 | + pass |
| 11 | + |
| 12 | + |
8 | 13 | _PLUGIN_DOCSTRING = """ |
9 | 14 | requires_ops : Tuple[int, int] |
10 | 15 | version of OpenPathSampling required for this plugin |
@@ -39,7 +44,7 @@ class LoadFromOPS(OPSPlugin): |
39 | 44 | can be found |
40 | 45 | """ + _PLUGIN_DOCSTRING |
41 | 46 | def __init__(self, category, *, obj_name=None, store_name=None, |
42 | | - requires_ops=(1,0), requires_cli=(0,3)): |
| 47 | + requires_ops=(1, 0), requires_cli=(0, 3)): |
43 | 48 | super().__init__(requires_ops, requires_cli) |
44 | 49 | self.category = category |
45 | 50 | self.name = "Load existing from OPS file" |
@@ -114,7 +119,7 @@ class WizardObjectPlugin(OPSPlugin): |
114 | 119 | """ + _WIZARD_KWONLY |
115 | 120 | def __init__(self, name, category, builder, *, prerequisite=None, |
116 | 121 | intro=None, description=None, summary=None, |
117 | | - requires_ops=(1,0), requires_cli=(0,3)): |
| 122 | + requires_ops=(1, 0), requires_cli=(0, 3)): |
118 | 123 | super().__init__(requires_ops, requires_cli) |
119 | 124 | self.name = name |
120 | 125 | self.category = category |
@@ -207,7 +212,7 @@ def __init__(self, name, category, parameters, builder, *, |
207 | 212 | @classmethod |
208 | 213 | def from_proxies(cls, name, category, parameters, compiler_plugin, *, |
209 | 214 | prerequisite=None, intro=None, description=None, |
210 | | - summary=None, requires_ops=(1,0), requires_cli=(0,3)): |
| 215 | + summary=None, requires_ops=(1, 0), requires_cli=(0, 3)): |
211 | 216 | """ |
212 | 217 | Create plugin from proxy parameters and existing compiler plugin. |
213 | 218 |
|
@@ -245,7 +250,6 @@ def _build(self, wizard, prereqs): |
245 | 250 | context = {'obj_dict': dct} |
246 | 251 | for param in self.parameters: |
247 | 252 | dct[param.name] = param(wizard, context) |
248 | | - # dct.update({p.name: p(wizard) for p in self.parameters}) |
249 | 253 | result = self.build_func(**dct) |
250 | 254 | return result |
251 | 255 |
|
@@ -327,7 +331,7 @@ class WrapCategory(OPSPlugin): |
327 | 331 |
|
328 | 332 | """ |
329 | 333 | def __init__(self, name, ask, helper=None, *, intro=None, |
330 | | - set_context=None, requires_ops=(1,0), requires_cli=(0,3)): |
| 334 | + set_context=None, requires_ops=(1, 0), requires_cli=(0, 3)): |
331 | 335 | super().__init__(requires_ops, requires_cli) |
332 | 336 | self.name = name |
333 | 337 | if isinstance(intro, str): |
@@ -361,6 +365,11 @@ def register_plugin(self, plugin): |
361 | 365 | plugin : :class:`.WizardObjectPlugin` |
362 | 366 | the plugin to register |
363 | 367 | """ |
| 368 | + if plugin.name in self.choices: |
| 369 | + raise WizardObjectPluginRegistrationError( |
| 370 | + f"A plugin named '{plugin.name}' has already been " |
| 371 | + f"registered with the category '{self.name}'" |
| 372 | + ) |
364 | 373 | self.choices[plugin.name] = plugin |
365 | 374 |
|
366 | 375 | def _get_intro(self, wizard, context): |
|
0 commit comments