Speed up processing by loading folders and categories on 1st run

This commit will also
- Update package requirements
- Update filters
This commit is contained in:
Stacy Brock
2024-02-15 15:15:00 -08:00
parent 6e942d329f
commit defa1de136
3 changed files with 37 additions and 21 deletions

View File

@@ -139,12 +139,17 @@ class O365MailFilter(object):
def _log_result(self, message, result):
log(f"{self._repr_message(message)} RESULT: {result}")
def filter(self):
def filter(self, is_first_run=False):
log(f" {pendulum.now()} Getting mailbox...", logging.DEBUG)
mailbox = self._account.mailbox()
log(f" {pendulum.now()} Getting folder...", logging.DEBUG)
inbox = mailbox.inbox_folder()
self._load_folders(mailbox)
self._load_categories()
if is_first_run:
log(f" {pendulum.now()} Loading folders and categories...", logging.DEBUG)
self._load_folders(mailbox)
self._load_categories()
log(f" {pendulum.now()} Loading filter rules...", logging.DEBUG)
self._load_filters()
# set limit to max allowed by O365, which is 999 messages
@@ -156,9 +161,11 @@ class O365MailFilter(object):
'to_recipients', 'from', 'subject', 'body',
'internet_message_headers'
)
log(f" {pendulum.now()} Getting messages from inbox...", logging.DEBUG)
messages = inbox.get_messages(query=query, limit=limit, batch=25)
for message in messages:
log(f" {pendulum.now()} {message}", logging.DEBUG)
if message.object_id in self._filtered_cache['ids']:
# we've already filtered this message, so skip it
continue
@@ -167,13 +174,16 @@ class O365MailFilter(object):
def run(self):
""" run filter as a loop """
is_first_run = True
while not self._is_canceled:
# clear the filtered message cache if it's older than 4 hours
if (self._filtered_cache['last_reset'] is None or
self._filtered_cache['last_reset'] < pendulum.now().subtract(hours=4)):
self._clear_cache()
self.filter()
log(f"Filtering the sludge @ {pendulum.now()}...", logging.DEBUG)
self.filter(is_first_run)
is_first_run = False
time.sleep(self._config['CHECK_INTERVAL'])
log('Done.')