def test_visualea_io(): factory = composite_node() model = ModelFactory(mimetype='text/x-visualea', name='test_workflow_io') model.set_code(factory) controller = paradigm_controller(model) new_control('a', 'IInt', 1) new_control('b', 'IInt', 2) interp.user_ns['c'] = 3 assert controller.run() == [1, 2, 3, 0] assert controller.run(10) == [10, 2, 3, 0] assert controller.run(d=5) == [1, 2, 3, 5]
class ParadigmController(object): default_name = unicode default_file_name = unicode pattern = unicode extension = unicode icon = unicode mimetype_model = unicode mimetype_data = unicode def __init__(self, **kwds): self.parent = kwds.pop('parent', None) self._widget = None mode_name, name_value = check_mutually_exclusive(kwds, 'name', 'filepath') mode_model, model_value = check_mutually_exclusive(kwds, 'model', 'data') _, code = check_mutually_exclusive(kwds, 'code', 'content') if name_value and model_value: raise ValueError('model/data and filename/name/content/code are mutually exclusive') if mode_name or mode_model: self._type = Model else: self._type = Data if name_value and self._type == Model: self._obj = ModelFactory(name=name_value, mimetype=self.mimetype_model, code=code) elif name_value and self._type == Data: self._obj = DataFactory(path=name_value, mimetype=self.mimetype_data, default_content=code) elif model_value: self._obj = model_value else: self._obj = ModelFactory(name='NewModel', mimetype=self.mimetype_model) self._type = Model if self._type == Model: self._model = self._obj else: self._model = to_model(self._obj) def read(self): if self._widget is None: return content = self.value() self.set_widget_value(content) def apply(self): if self._widget is None: return content = self.widget_value() self.set_value(content) def widget_value(self): raise NotImplementedError def value(self): if self._type == Model: content = self._obj.repr_code() else: content = self._obj.read() return content def set_widget_value(self, value): raise NotImplementedError def set_value(self, value): if self._type == Model: self._obj.set_code(value) else: self._obj.content = value if self._model: self._model.set_code(value) def runnable(self): return self._model is not None def _get_model(self): return self._model model = property(fget=_get_model) def execute(self): raise NotImplementedError def namespace(self, **kwargs): from openalea.core.service.run import namespace ns = namespace() ns.update(kwargs) return ns def run(self, *args, **kwargs): if self.runnable(): self.apply() return self.model.run(*args, **self.namespace(**kwargs)) def step(self, nstep=1): if self.runnable(): self.apply() print self.model return self.model.step(nstep=nstep) def stop(self): if self.runnable(): return self.model.stop() def animate(self, *args, **kwargs): if self.runnable(): self.apply() return self.model.animate(*args, **self.namespace(**kwargs)) def init(self, *args, **kwargs): if self.runnable(): self.apply() return self.model.init(*args, **self.namespace(**kwargs)) def widget(self): """ :return: the edition widget """ return self._widget name = property(fget=lambda self: self._obj.name)