diff --git a/subiquitycore/controller.py b/subiquitycore/controller.py index 3b634cf8..1ec93a5f 100644 --- a/subiquitycore/controller.py +++ b/subiquitycore/controller.py @@ -105,3 +105,19 @@ class BaseController(ABC): self.loop.set_alarm_in( delay, lambda *args: self._run_iterator(it, delay/1.1)) + + +class RepeatedController(BaseController): + + def __init__(self, orig, index): + self.orig = orig + self.index = index + + def register_signals(self): + pass + + def default(self): + self.orig.default(self.index) + + def cancel(self): + self.orig.cancel() diff --git a/subiquitycore/core.py b/subiquitycore/core.py index 5c1d6d10..48e1a700 100644 --- a/subiquitycore/core.py +++ b/subiquitycore/core.py @@ -26,6 +26,7 @@ import tty import urwid import yaml +from subiquitycore.controller import RepeatedController from subiquitycore.signals import Signal from subiquitycore.prober import Prober, ProberException @@ -291,6 +292,8 @@ class Application: if opts.screens: self.controllers = [c for c in self.controllers if c in opts.screens] + else: + self.controllers = self.controllers[:] ui.progress_completion = len(self.controllers) self.common['controllers'] = dict.fromkeys(self.controllers) self.controller_index = -1 @@ -475,10 +478,21 @@ class Application: self.run_scripts(self.common['opts'].scripts) controllers_mod = __import__('%s.controllers' % self.project, None, None, ['']) - for k in self.controllers: - log.debug("Importing controller: {}".format(k)) - klass = getattr(controllers_mod, k+"Controller") - self.common['controllers'][k] = klass(self.common) + for i, k in enumerate(self.controllers): + if self.common['controllers'][k] is None: + log.debug("Importing controller: {}".format(k)) + klass = getattr(controllers_mod, k+"Controller") + self.common['controllers'][k] = klass(self.common) + else: + count = 1 + for k2 in self.controllers[:i]: + if k2 == k or k2.startswith(k + '-'): + count += 1 + orig = self.common['controllers'][k] + k += '-' + str(count) + self.controllers[i] = k + self.common['controllers'][k] = RepeatedController( + orig, count) log.debug("*** %s", self.common['controllers']) initial_controller_index = 0