Source code for simulations.base

""" Handles basic functionality shared by a number of other modules

Classes:

    :py:class:`Base`
      Handles basic __init__ and listener patterns shared among several classes

Decorators:

    :py:func:`listener`
      A class decorator adding a listener without disrupting :py:meth:`~Base._add_listeners`

    :py:func:`once`
      A class decorator adding a once-only listener without disrupting
      :py:meth:`~Base._add_listeners`

    :py:func:`withoptions`
      A class decorator adding basic :py:class:`~simulations.utils.optionparser.OptionParser`
      functionality

"""

from simulations.utils.eventemitter import EventEmitter
from simulations.utils.optionparser import OptionParser


[docs]class Base(EventEmitter): """ The base class that handles common functionality from which other :py:class:`~simulations.utils.eventemitter.EventEmitter` classes are derived Keyword Parameters: default_handlers If true or not present, adds the default handlers defined in :py:meth:`Base._add_default_listeners` """ def __init__(self, *args, **kwdargs): """ Handles the initialization process Keyword Parameters: default_handlers If true or not present, adds the default handlers defined in :py:meth:`Base._add_default_listeners` """ super(Base, self).__init__() self.options = None self.args = None self.oparser = None if 'default_handlers' not in kwdargs or kwdargs['default_handlers']: self._add_default_listeners() self._add_listeners()
[docs] def _add_default_listeners(self): """ Sets up default listeners for various events (should implement) """ pass
[docs] def _add_listeners(self): """ Set up listeners for various events (should implement) """ pass
[docs]def withoptions(klass): """ A class wrapper that handles using an :py:class:`~simulations.utils.optionparser.OptionParser` Adds Keyword Parameters: option_error_handler An error handler for the :py:class:`~simulations.optionparser.OptionParser` option_exit_handler An exit handler for the :py:class:`~simulations.optionparser.OptionParser` Adds Events: oparser set up emitted after the :py:class:`~simulations.utils.optionparser.OptionParser` is set up and able to add options """ old_init = klass.__init__ def newinit(self, *args, **kwdargs): """ Wraps the old __init__ method and adds functionality for option parsing """ old_init(self, *args, **kwdargs) self.options = None self.args = None self.oparser = OptionParser() if 'option_error_handler' in kwdargs: self.oparser.set_error_handler(kwdargs['option_error_handler']) if 'option_exit_handler' in kwdargs: self.oparser.set_exit_handler(kwdargs['option_exit_handler']) self._set_base_options() self.emit('oparser set up', self) klass.__init__ = newinit return klass
[docs]def listener(event, handler): """ Class decorator to add listeners in a brief way This is effectively the same as adding a call to :py:meth:`~simulations.utils.eventemitter.EventEmitter.add_listener` in :py:meth:`~Base._add_listeners`. Parameters: event the name of the event to listen for handler the event handler """ def wrapper(klass): """ Wraps _add_listeners on klass, adding a new listener for an event """ old_add_listeners = klass._add_listeners def _add_listeners(self): """ Sets up listeners for various events """ old_add_listeners(self) self.add_listener(event, handler) klass._add_listeners = _add_listeners return klass return wrapper
[docs]def once(event, handler): """ Class decorator to handler once-listeners in a brief way. This is effectively the same as adding a call to :py:meth:`~simulations.utils.eventemitter.EventEmitter.once` in :py:meth:`~Base._add_listeners`. Parameters: event the name of the event to listen for handler the event handler """ def wrapper(klass): """ Wraps _add_listeners on klass, adding a new once-only listener for an event. """ old_add_listeners = klass._add_listeners def _add_listeners(self): """ Sets up listeners for various events """ old_add_listeners(self) self.once(event, handler) klass._add_listeners = _add_listeners return klass return wrapper
Read the Docs v: latest
Versions
latest
Downloads
PDF
HTML
Epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.