pvl/syslog/filter.py
author Tero Marttila <terom@paivola.fi>
Tue, 19 Feb 2013 20:10:21 +0200
changeset 2 5a8a32cbc944
permissions -rw-r--r--
import pvl.syslog from pvl-verkko
2
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
import logging; log = logging.getLogger('pvl.syslog.filter')
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
import re # XXX
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
import os.path, fnmatch
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
class SyslogFilter (object) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
    """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
        Match syslog messages fields against given patterns.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
    """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
    
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    @classmethod
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
    def build (cls, **filters) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
            Match using given non-None fields.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
        # drop None's
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
        return cls(dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None))
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    def __init__ (self, filters) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
            Match using given { field: regex }.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
        self.filters = filters
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
    def match_glob (self, attr, glob, value=None) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
            Match prog as glob.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
        
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        if not glob :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
            return { attr: value }
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
        if not value :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
            # require
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
            return False
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
        # normalize
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
        value = value.strip()
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
        # match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        if fnmatch.fnmatch(value, glob) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
            return { attr: value }
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
            return False
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
 
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
    match_facility = match_glob
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    def match_prog (self, attr, glob, prog=None) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
            Match prog as glob.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        if prog :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
            # normalize
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
            prog = prog.strip().lower()
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
            if prog.startswith('/') :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
                # leaves postfix/* intact, but fixes /usr/bin/cron
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
                _, prog = os.path.split(prog)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
        # match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
        return self.match_glob(attr, glob, prog)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
    REGEX_TYPE = type(re.compile(''))
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
    def match_regex (self, attr, regex, value=None) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
            Match given value against given pattern.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
        if not regex :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
            return { attr: value }
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        if not value :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
            # XXX: optional = match empty string?
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
            value = ''
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
        else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
            # normalize; XXX: unicode?
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
            value = str(value).strip()
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
        # match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        match = regex.match(value)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
        if not match :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
            return False
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
        # as match-values
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
        matches = { attr: match.group(0) } # whole match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
        matches.update(match.groupdict())
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
        # TODO match.expand?
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
        return matches
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    def filter (self, item) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
            Match given item. Returns any matched values (including regexp capture groups) across all fields.
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        """
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        match = None
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        matches = {}
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        for attr in self.filters :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
            # filter
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
            filter = self.filters[attr]
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
            # lookup match-func
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
            match = getattr(self, 'match_{attr}'.format(attr=attr), None)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
            if match :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
                pass
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
            elif isinstance(filter, self.REGEX_TYPE) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
                match = self.match_regex
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
            else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
                match = self.match_glob
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
            # apply match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
            if attr in item :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
                match = match(attr, filter, item[attr])
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
            else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
                match = match(attr, filter)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
            log.debug("%s: %s", attr, match)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
            if match :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
                # match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
                matches.update(match)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
            
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
            else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
                # reject
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
                return
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
        # test last match
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
        if match is None :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
            # empty filter -> all None
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
            return True
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        else :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
            return matches
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    def process (self, items) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
        for item in items:
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
            match = self.filter(item)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
            if match :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
                yield item
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
    
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
    __call__ = process
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
    def __nonzero__ (self) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
        return bool(self.filters)
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
    def __repr__ (self) :
5a8a32cbc944 import pvl.syslog from pvl-verkko
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
        return repr(self.filters)