add option for multiple regexp too
This commit is contained in:
parent
33b49b88e9
commit
b4464ce579
1 changed files with 30 additions and 26 deletions
|
@ -222,11 +222,14 @@ class ImapFilter:
|
|||
else:
|
||||
field = 'From'
|
||||
if 'regexp' in mfilter:
|
||||
self._log.debug(
|
||||
"Filter look for %s regular expressions",
|
||||
len(mfilter['regexp'])
|
||||
)
|
||||
condition = f'allof (header :contains "{field}" "{mfilter['regexp']}")'
|
||||
if not isinstance(mfilter['regexp'], list):
|
||||
mfilter['regexp'] = [ mfilter['regexp'] ]
|
||||
for regexp in mfilter['regexp']:
|
||||
self._log.debug(
|
||||
"Filter look for %s regular expressions",
|
||||
len(regexp)
|
||||
)
|
||||
condition = f'allof (header :contains "{field}" "{regexp}")'
|
||||
else:
|
||||
self._log.debug(
|
||||
"Filter look for %s words",
|
||||
|
@ -302,32 +305,33 @@ class ImapFilter:
|
|||
field_data = raw_field_data[0]
|
||||
else:
|
||||
field_data = raw_field_data[0].decode()
|
||||
if 'words' in mfilter:
|
||||
regexp = '^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)'
|
||||
if 'regexp' in mfilter:
|
||||
if not isinstance(mfilter['regexp'], list):
|
||||
mfilter['regexp'] = [ mfilter['regexp'] ]
|
||||
elif 'words' in mfilter:
|
||||
mfilter['regexp'] = ['^(?=.*' + '.*|.*'.join(mfilter['words']) + '.*)']
|
||||
else:
|
||||
if 'regexp' in mfilter:
|
||||
regexp = mfilter['regexp']
|
||||
else:
|
||||
self._log.error(
|
||||
self._log.error(
|
||||
"The filter '%s' doesn't have a 'words' or 'regexp' value. %s",
|
||||
mfilter['name'],
|
||||
mfilter
|
||||
)
|
||||
return {"match": False}
|
||||
match = re.match(regexp, field_data)
|
||||
if match:
|
||||
self._log.info(
|
||||
"Field '%s' => '%s', matches filter '%s'",
|
||||
mfilter['field'],
|
||||
field_data,
|
||||
mfilter['name']
|
||||
)
|
||||
self.mailbox_matches += 1
|
||||
if self.config['dummy']:
|
||||
self._log.info('Doing nothing (dummy run)')
|
||||
else:
|
||||
self._do_filter(message_id, mfilter)
|
||||
return {"match": True}
|
||||
return {"match": False}
|
||||
for regexp in mfilter['regexp']:
|
||||
match = re.match(regexp, field_data)
|
||||
if match:
|
||||
self._log.info(
|
||||
"Field '%s' => '%s', matches filter '%s'",
|
||||
mfilter['field'],
|
||||
field_data,
|
||||
mfilter['name']
|
||||
)
|
||||
self.mailbox_matches += 1
|
||||
if self.config['dummy']:
|
||||
self._log.info('Doing nothing (dummy run)')
|
||||
else:
|
||||
self._do_filter(message_id, mfilter)
|
||||
return {"match": True}
|
||||
return {"match": False}
|
||||
|
||||
def _do_filter(self, message_id, mfilter):
|
||||
|
|
Loading…
Reference in a new issue