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 """
00043 Contains filter logic for the custom filter which allows message, severity,
00044 node and topic filtering simultaniously. All of these filters must match
00045 together (if they are used) or the custom filter does not match.
00046 """
00047
00048 def __init__(self):
00049 super(CustomFilter, self).__init__()
00050
00051 self._message = MessageFilter()
00052 self._severity = SeverityFilter()
00053 self._node = NodeFilter()
00054 self._topic = TopicFilter()
00055
00056 self._all_filters = [self._message, self._severity, self._node, self._topic]
00057 for f in self._all_filters:
00058 f.filter_changed_signal.connect(self._relay_signal)
00059
00060 def set_enabled(self, checked):
00061 """
00062 :signal: emits filter_changed_signal
00063 :param checked: enables the filters if checked is True''bool''
00064 """
00065 for f in self._all_filters:
00066 f.set_enabled(checked)
00067 super(CustomFilter, self).set_enabled(checked)
00068
00069 def _relay_signal(self):
00070 """
00071 Passes any signals emitted by the child filters along
00072 """
00073 self.start_emit_timer(1)
00074
00075 def has_filter(self):
00076 for f in self._all_filters:
00077 if f.has_filter():
00078 return True
00079 return False
00080
00081 def test_message(self, message):
00082 """
00083 Tests if the message matches the filter.
00084 :param message: the message to be tested against the filters, ''Message''
00085 :returns: True if the message matches all child filters, ''bool''
00086 """
00087 if not self.is_enabled():
00088 return False
00089
00090 if not self.has_filter():
00091 return False
00092
00093 all_filters = [not f.has_filter() or f.test_message(message) for f in self._all_filters]
00094 return False not in all_filters