Re: Re: Trellis: ctrl.pulse
Sergey Schetinin <[email protected]> Thu, 16 Apr 2009 00:32:31 +0300
| Newsgroups | gmane.comp.python.peak |
|---|---|
| Message-ID | <[email protected]> |
On Thu, Apr 16, 2009 at 00:17, P.J. Eby <pje-Wh6+Hckhi6HFNGf7iClzIwC/[email protected]> wrote: > At 11:48 PM 4/15/2009 +0300, Sergey Schetinin wrote: >> >> On Wed, Apr 15, 2009 at 23:43, P.J. Eby <pje-Wh6+Hckhi6HFNGf7iClzIwC/[email protected]> wrote: >> > At 11:38 PM 4/15/2009 +0300, Sergey Schetinin wrote: >> >> >> >> On Wed, Apr 15, 2009 at 23:11, Sergey Schetinin <[email protected]> >> >> wrote: >> >> > Importing trellis from stm is ugly, and messes with lazy imports of >> >> > trellis (as done by Importing), replacing pulse with a special cell >> >> > doesn't seem to hard, see attached patch. >> >> >> >> Also, install_controller is unnecessary: >> > >> > install_controller() is an API function so that you can replace the >> > controller, e.g. for testing or for applications with special needs. >> >> Oh, I see, but given it populates the global namespace, if some other >> module already did "from peak.events.trellis import *" things will >> break. > > Yes. So don't do that. ;-) > > >> Can it really be part of API? > > Technically, I haven't documented it yet. But that was the original intent > of having it there. At the moment it's more of a semi-private hack. > However, it's why you'll almost never see me importing stuff from > 'trellis', as opposed to using 'trellis.whatever'. Maybe a better choice would be not to add those functions to __all__ then (ctrl as well)? That would make it OK to `import *` to get things like Component and decorators. And on_undo and similar things would be addressed as stm.ctrl.on_undo. Or trellis.py could import itself and then the overridable globals would be accessed as trellis.on_undo as well, but things wouldn't be as fragile to import *. trellis = sys.modules['peak.events.trellis'] __all__ = [ 'Cell', 'Constant', 'make', 'todo', 'todos', 'modifier', 'Component', 'repeat', 'poll', 'InputConflict', 'Dict', 'List', 'Set', 'mark_dirty', 'ConstantMixin', 'Sensor', #'ctrl', 'AbstractConnector', 'Connector', 'Effector', 'init_attrs', 'attr', 'attrs', 'compute', 'maintain', 'perform', 'Performer', 'Pipe', 'trellis' ] _stm_names = [ 'on_commit', 'on_undo', 'atomically', 'manage', 'savepoint', 'rollback_to', 'schedule', 'cancel', 'lock', 'used', 'changed', 'initialize', 'change_attr', ] def install_controller(new_ctrl): global ctrl globals().update([(name, getattr(new_ctrl, name)) for name in _stm_names]) stm.ctrl = ctrl = new_ctrl install_controller(stm.Controller()) #stm.LocalController()