Commit 8825b2c5 authored by Anael Beutot's avatar Anael Beutot Committed by Antoine Millet
Browse files

Added base plugin for client

parent 956349a1
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
"""Plugins helpers for Cloud Control clients."""

from cloudcontrol.common.client.tags import TagDB


class Base(object):
    """Example skeleton plugin for clients.

    If you want to create your own plugin, you may create an object that would
    quack just like this one or just inherit from this class.

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

        # plugins may define tags (see :mod:`ccnode.tags`)
        self.tag_db = TagDB()

        # 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."""
        pass

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

        self.main = None
        # TODO dependencies