diff --git a/loggy.py b/loggy.py index f6150f1..1823edb 100644 --- a/loggy.py +++ b/loggy.py @@ -77,26 +77,31 @@ class OptionSelectList(dict): def Toggle(self, entry_num): if entry_num < 0: - self.__default_value__ = entry_num == -1 + if not self.__selection_regex__: + self.__default_value__ = entry_num == -1 for key in self: - self[key] = self.__default_value__ + if self.__match__(key): + self[key] = entry_num == -1 elif entry_num > len(self): raise ValueError(f"The Entry '{entry} is not in the list") else: entry = self.__sorted_keys__()[entry_num] self[entry] = not self[entry] + def __match__(self, key): + try: + match = len(re.findall(self.__selection_regex__, key)) > 0 + except re.error: + match = True # No valid regular expression + return match + def GetSelectList(self): rv = [] if len(self) > 2: rv.append(('All', -1)) rv.append(('None', -2)) for index, key in enumerate(self.__sorted_keys__()): - try: - match = len(re.findall(self.__selection_regex__, key)) > 0 - except re.error: - match = True # No valid regular expression - if match: + if self.__match__(key): prefix = "\\[X] " if self[key] else "\\[-] " rv.append((prefix + key, index)) return rv @@ -126,6 +131,7 @@ class LogViewerApp(App): ("q", "quit", "Quit"), ("c", "clear_screen", "Clear") ] + MAX_LOGS = 1000 def __init__(self): super().__init__() @@ -166,6 +172,8 @@ class LogViewerApp(App): self.__level_select_list__.AddEntry(record.levelname) self.__level_selection__.set_options(self.__level_select_list__.GetSelectList()) self.all_logs.append(record) + if len(self.all_logs) > self.MAX_LOGS: + self.all_logs = self.all_logs[-self.MAX_LOGS:] self._apply_filters_to_log(record) def _force(self, lvl: str) -> bool: