From 14e68eed72e3d6874a30a0a523125ad2c5dc79c0 Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 12 Feb 2020 21:38:16 +0100 Subject: [PATCH] performance: set fetch handler getGroups depending on presence of alternate tags in RE (simplest variant or merged with alt-tags) in regex constructor --- fail2ban/server/failregex.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fail2ban/server/failregex.py b/fail2ban/server/failregex.py index f7dafbef..0ae9acc5 100644 --- a/fail2ban/server/failregex.py +++ b/fail2ban/server/failregex.py @@ -138,6 +138,8 @@ class Regex: except sre_constants.error: raise RegexException("Unable to compile regular expression '%s'" % regex) + # set fetch handler depending on presence of alternate tags: + self.getGroups = self._getGroupsWithAlt if self._altValues else self._getGroups def __str__(self): return "%s(%r)" % (self.__class__.__name__, self._regex) @@ -277,11 +279,12 @@ class Regex: # Returns all matched groups. # - def getGroups(self): - if not self._altValues: - return self._matchCache.groupdict() - # merge alternate values (e. g. 'alt_user_1' -> 'user' or 'alt_host' -> 'host'): + def _getGroups(self): + return self._matchCache.groupdict() + + def _getGroupsWithAlt(self): fail = self._matchCache.groupdict() + # merge alternate values (e. g. 'alt_user_1' -> 'user' or 'alt_host' -> 'host'): #fail = fail.copy() for k,n in self._altValues: v = fail.get(k) @@ -289,6 +292,9 @@ class Regex: fail[n] = v return fail + def getGroups(self): # pragma: no cover - abstract function (replaced in __init__) + pass + ## # Returns skipped lines. #