Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 from .base_filter import BaseFilter
00034 from .message_filter import MessageFilter
00035 from .node_filter import NodeFilter
00036 from .severity_filter import SeverityFilter
00037 from .topic_filter import TopicFilter
00038
00039
00040 class CustomFilter(BaseFilter):
00041 """
00042 Contains filter logic for the custom filter which allows message, severity,
00043 node and topic filtering simultaniously. All of these filters must match
00044 together (if they are used) or the custom filter does not match.
00045 """
00046
00047 def __init__(self):
00048 super(CustomFilter, self).__init__()
00049
00050 self._message = MessageFilter()
00051 self._severity = SeverityFilter()
00052 self._node = NodeFilter()
00053 self._topic = TopicFilter()
00054
00055 self._all_filters = [self._message, self._severity, self._node, self._topic]
00056 for f in self._all_filters:
00057 f.filter_changed_signal.connect(self._relay_signal)
00058
00059 def set_enabled(self, checked):
00060 """
00061 :signal: emits filter_changed_signal
00062 :param checked: enables the filters if checked is True''bool''
00063 """
00064 for f in self._all_filters:
00065 f.set_enabled(checked)
00066 super(CustomFilter, self).set_enabled(checked)
00067
00068 def _relay_signal(self):
00069 """
00070 Passes any signals emitted by the child filters along
00071 """
00072 self.start_emit_timer(1)
00073
00074 def has_filter(self):
00075 for f in self._all_filters:
00076 if f.has_filter():
00077 return True
00078 return False
00079
00080 def test_message(self, message):
00081 """
00082 Tests if the message matches the filter.
00083 :param message: the message to be tested against the filters, ''Message''
00084 :returns: True if the message matches all child filters, ''bool''
00085 """
00086 if not self.is_enabled():
00087 return False
00088
00089 if not self.has_filter():
00090 return False
00091
00092 all_filters = [not f.has_filter() or f.test_message(message) for f in self._all_filters]
00093 return False not in all_filters