pvl.syslog.SyslogFilter: move filter-filtering to SyslogFilter.build(**filters) and fix match_* funcs to normalize on non-filter
authorTero Marttila <terom@paivola.fi>
Sun, 10 Feb 2013 23:27:04 +0200
changeset 216 c0dbd44bd463
parent 214 e314447c5621
child 217 feae2f0ff91a
pvl.syslog.SyslogFilter: move filter-filtering to SyslogFilter.build(**filters) and fix match_* funcs to normalize on non-filter
pvl/syslog/args.py
pvl/syslog/filter.py
pvl/syslog/rule.py
--- a/pvl/syslog/args.py	Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/args.py	Sun Feb 10 23:27:04 2013 +0200
@@ -90,7 +90,7 @@
     )
     
     # TODO: filter optional
-    filter = SyslogFilter(
+    filter = SyslogFilter.build(
         # glob pattern
         prog        = options.syslog_prog,
         facility    = options.syslog_facility,
--- a/pvl/syslog/filter.py	Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/filter.py	Sun Feb 10 23:27:04 2013 +0200
@@ -7,19 +7,30 @@
     """
         Match syslog messages fields against given patterns.
     """
+    
+    @classmethod
+    def build (cls, **filters) :
+        """
+            Match using given non-None fields.
+        """
 
-    def __init__ (self, **filters) :
+        # drop None's
+        return cls(dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None))
+
+    def __init__ (self, filters) :
         """
             Match using given { field: regex }.
         """
-        
-        # drop None's
-        self.filters = dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None)
+
+        self.filters = filters
 
     def match_glob (self, attr, glob, value=None) :
         """
             Match prog as glob.
         """
+        
+        if not glob :
+            return { attr: value }
 
         if not value :
             # require
@@ -59,6 +70,9 @@
             Match given value against given pattern.
         """
 
+        if not regex :
+            return { attr: value }
+
         if not value :
             # XXX: optional = match empty string?
             value = ''
@@ -92,10 +106,6 @@
             # filter
             filter = self.filters[attr]
 
-            if not filter :
-                # ignore
-                continue
-            
             # lookup match-func
             match = getattr(self, 'match_{attr}'.format(attr=attr), None)
 
--- a/pvl/syslog/rule.py	Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/rule.py	Sun Feb 10 23:27:04 2013 +0200
@@ -105,7 +105,7 @@
         
         filters = dict(cls.config_filters(**filters))
 
-        filter = SyslogFilter(**filters)
+        filter = SyslogFilter(filters)
         
         log.debug("%s: %s %s", name, rules, filter)