sources for consumer.py [rev. unknown]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import py
import sys
class File(object): 
    """ log consumer wrapping a file(-like) object
    """
    def __init__(self, f): 
        assert hasattr(f, 'write')
        assert isinstance(f, file) or not hasattr(f, 'open') 
        self._file = f 
    def __call__(self, msg): 
        """ write a message to the log """
        print >>self._file, str(msg)
class Path(object): 
    """ log consumer able to write log messages into
    """
    def __init__(self, filename, append=False, delayed_create=False,
            buffering=1): 
        self._append = append
        self._filename = filename
        self._buffering = buffering
        if not delayed_create:
            self._openfile()
    def _openfile(self):
        mode = self._append and 'a' or 'w'
        f = open(str(self._filename), mode, buffering=self._buffering)
        self._file = f
    def __call__(self, msg):
        """ write a message to the log """
        if not hasattr(self, "_file"):
            self._openfile()
        print >> self._file, msg
def STDOUT(msg): 
    """ consumer that writes to sys.stdout """
    print >>sys.stdout, str(msg) 
def STDERR(msg): 
    """ consumer that writes to sys.stderr """
    print >>sys.stderr, str(msg)
class Syslog:
    """ consumer that writes to the syslog daemon """
    for priority in "LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG".split():
        try:
            exec("%s = py.std.syslog.%s" % (priority, priority))
        except AttributeError:
            pass
    
    def __init__(self, priority = None):
        self.priority = self.LOG_INFO
        if priority is not None:
            self.priority = priority
    def __call__(self, msg):
        """ write a message to the log """
        py.std.syslog.syslog(self.priority, str(msg))
        
    
def setconsumer(keywords, consumer): 
    """ create a consumer for a set of keywords """
    # normalize to tuples 
    if isinstance(keywords, str): 
        keywords = tuple(map(None, keywords.split()))
    elif hasattr(keywords, 'keywords'): 
        keywords = keywords.keywords 
    elif not isinstance(keywords, tuple): 
        raise TypeError("key %r is not a string or tuple" % (keywords,))
    if consumer is not None and not callable(consumer): 
        if not hasattr(consumer, 'write'): 
            raise TypeError("%r should be None, callable or file-like" % (consumer,))
        consumer = File(consumer)
    py.log.Producer(keywords).set_consumer(consumer)