Skip to content
Snippets Groups Projects
plugins.py 1.34 KiB
Newer Older
Anael Beutot's avatar
Anael Beutot committed
"""Plugins helpers for Cloud Control node."""

from itertools import chain, imap

from ccnode.tags import TagDB

Anael Beutot's avatar
Anael Beutot committed

class Base(object):
    """Example skeleton plugin for cc-node.

    If you want to create your own plugin for the `cc-node` you may create an
    object that would quack just like this one or just inherit from this class.

    """
    def __init__(self, *args, **kwargs):
        """
Anael Beutot's avatar
Anael Beutot committed
        :param loop: MainLoop instance
Anael Beutot's avatar
Anael Beutot committed
        """
        #: MainLoop instance
Anael Beutot's avatar
Anael Beutot committed
        self.main = kwargs.pop('loop')
Anael Beutot's avatar
Anael Beutot committed

        # plugins may define tags (see :mod:`ccnode.tags`)
        self.tag_db = TagDB(self.main, parent_db=self.main.tag_db)
Anael Beutot's avatar
Anael Beutot committed

        # plugins may define handler functions that would be called by the
        # server
        self.rpc_handler = dict()

        # tag_db and rpc_handler can be implemented as properties if more logic
        # is needed

    def __hash__(self):
        """This method is used when registering a plugin in the main loop.

        By default, only one instance is allowed. Subclasses can overide this
        method to change this behaviour.

        """
        return hash(self.__class__.__name__)

    def start(self):
        """Used to start pyev watchers."""
Anael Beutot's avatar
Anael Beutot committed

    def stop(self):
        """Cleanup for plugins, can be used to clean pyev watchers."""

Anael Beutot's avatar
Anael Beutot committed
        self.main = None
Anael Beutot's avatar
Anael Beutot committed
        # TODO dependencies