root/subprojects/LogGrok/trunk/loggrok/actions.py

Revision 179 (by drew, 12/20/05 14:04:00)

bump

#!/usr/bin/env python
"""Callbacks for log entry results.

$Id$
"""

import sys

from xix.utils.python import CurriedCallable

__author__ = 'Drew Smathers'
__copyright__ = 'Copyright 2005, Drew Smathers'
__revision__ = '$Revision$'


class Action:

    def __init__(self):
        self.__level_callbacks = {}
        self.__category_callbacks = {}

    def addLevelCallback(self, level, func, *pargs, **kwargs):
        """Add callback for entry with level given in 
        log entry header.
        """
        lcs = self.__level_callbacks
        if level not in lcs.keys():
            lcs[level] = []
        lcs[level].append(CurriedCallable(func, *pargs, **kwargs))
        
    def addMessageCategoryCallback(self, cat, func, *pargs, **kwargs):
        """Add callback for entry of the given category.
        """
        mcs = self.__category_callbacks
        if cat not in mcs.keys():
            mcs[cat] = []
        mcs[cat].append(CurriedCallable(func, *pargs, **kwargs))

    def __call__(self, entry):
        if hasattr(entry.header, 'level'):
            lcs = self.__level_callbacks
            for func in lcs.get(entry.header.level, []):
                func(entry)
        mcs = self.__category_callbacks
        for func in mcs.get(entry.message.category, []):
            func(entry)
    
Note: See TracBrowser for help on using the browser.