From 5ad7e821b676bd2eb48d8ba4542b4e65db7524d7 Mon Sep 17 00:00:00 2001 From: Nathan Thorpe Date: Thu, 21 Apr 2022 16:45:28 -0700 Subject: [PATCH] pep8 fixes on graph/imap, readme changes --- parsedmarc/__init__.py | 8 ------- parsedmarc/mail/graph.py | 48 ++++++++++++++++++++++++++-------------- parsedmarc/mail/imap.py | 13 ++++++++--- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index 6ae31c6..9245e41 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -29,14 +29,6 @@ from lxml import etree from mailsuite.smtp import send_email from parsedmarc.mail import MailboxConnection - -from google.auth.transport.requests import Request -from google.oauth2.credentials import Credentials -from google_auth_oauthlib.flow import InstalledAppFlow -from googleapiclient.discovery import build -from googleapiclient.errors import HttpError -from base64 import urlsafe_b64decode - from parsedmarc.utils import get_base_domain, get_ip_address_info from parsedmarc.utils import is_outlook_msg, convert_outlook_msg from parsedmarc.utils import parse_email diff --git a/parsedmarc/mail/graph.py b/parsedmarc/mail/graph.py index f718856..66d8db8 100644 --- a/parsedmarc/mail/graph.py +++ b/parsedmarc/mail/graph.py @@ -35,45 +35,56 @@ class MSGraphConnection(MailboxConnection): if len(path_parts) > 1: # Folder is a subFolder parent_folder_id = None for folder in path_parts[:-1]: - parent_folder_id = self._find_folder_id_with_parent(folder, parent_folder_id) + parent_folder_id = self._find_folder_id_with_parent( + folder, parent_folder_id) sub_url = f'/{parent_folder_id}/childFolders' folder_name = path_parts[-1] request_body = { 'displayName': folder_name } - resp = self._client.post(f'/users/{self.mailbox_name}/mailFolders{sub_url}', json=request_body) + request_url = f'/users/{self.mailbox_name}/mailFolders{sub_url}' + resp = self._client.post(request_url, json=request_body) if resp.status_code == 409: - logger.debug(f'Folder {folder_name} already exists, skipping creation') + logger.debug(f'Folder {folder_name} already exists, ' + f'skipping creation') elif resp.status_code == 201: logger.debug(f'Created folder {folder_name}') else: - logger.warning(f'Unknown response {resp.status_code} {resp.json()}') + logger.warning(f'Unknown response ' + f'{resp.status_code} {resp.json()}') def fetch_messages(self, folder_name: str) -> List[str]: """ Returns a list of message UIDs in the specified folder """ folder_id = self._find_folder_id_from_folder_path(folder_name) - result = self._client.get(f'/users/{self.mailbox_name}/mailFolders/{folder_id}/messages?$select=id') + url = f'/users/{self.mailbox_name}/mailFolders/' \ + f'{folder_id}/messages?$select=id' + result = self._client.get(url) emails = result.json()['value'] return [email['id'] for email in emails] def fetch_message(self, message_id: str): - result = self._client.get(f'/users/{self.mailbox_name}/messages/{message_id}/$value') + url = f'/users/{self.mailbox_name}/messages/{message_id}/$value' + result = self._client.get(url) return result.text def delete_message(self, message_id: str): - resp = self._client.delete(f'/users/{self.mailbox_name}/messages/{message_id}') + url = f'/users/{self.mailbox_name}/messages/{message_id}' + resp = self._client.delete(url) if resp.status_code != 204: - raise RuntimeWarning(f"Failed to delete message {resp.status_code}: {resp.json()}") + raise RuntimeWarning(f"Failed to delete message " + f"{resp.status_code}: {resp.json()}") def move_message(self, message_id: str, folder_name: str): folder_id = self._find_folder_id_from_folder_path(folder_name) request_body = { 'destinationId': folder_id } - resp = self._client.post(f'/users/{self.mailbox_name}/messages/{message_id}/move', json=request_body) + url = f'/users/{self.mailbox_name}/messages/{message_id}/move' + resp = self._client.post(url, json=request_body) if resp.status_code != 201: - raise RuntimeWarning(f"Failed to move message {resp.status_code}: {resp.json()}") + raise RuntimeWarning(f"Failed to move message " + f"{resp.status_code}: {resp.json()}") def keepalive(self): # Not needed @@ -91,21 +102,26 @@ class MSGraphConnection(MailboxConnection): parent_folder_id = None if len(path_parts) > 1: for folder in path_parts[:-1]: - folder_id = self._find_folder_id_with_parent(folder, parent_folder_id) + folder_id = self._find_folder_id_with_parent( + folder, parent_folder_id) parent_folder_id = folder_id - return self._find_folder_id_with_parent(path_parts[-1], parent_folder_id) + return self._find_folder_id_with_parent( + path_parts[-1], parent_folder_id) else: return self._find_folder_id_with_parent(folder_name, None) - def _find_folder_id_with_parent(self, folder_name: str, parent_folder_id: Optional[str]): + def _find_folder_id_with_parent(self, + folder_name: str, + parent_folder_id: Optional[str]): sub_url = '' if parent_folder_id is not None: sub_url = f'/{parent_folder_id}/childFolders' - folders_resp = self._client.get(f'/users/{self.mailbox_name}/mailFolders{sub_url}') + url = f'/users/{self.mailbox_name}/mailFolders{sub_url}' + folders_resp = self._client.get(url) folders = folders_resp.json()['value'] - matched_folders = [folder for folder in folders if folder['displayName'] == folder_name] + matched_folders = [folder for folder in folders + if folder['displayName'] == folder_name] if len(matched_folders) == 0: raise RuntimeError(f"folder {folder_name} not found") selected_folder = matched_folders[0] return selected_folder['id'] - diff --git a/parsedmarc/mail/imap.py b/parsedmarc/mail/imap.py index 3090b15..83a7598 100644 --- a/parsedmarc/mail/imap.py +++ b/parsedmarc/mail/imap.py @@ -49,11 +49,18 @@ class IMAPConnection(MailboxConnection): self._client.noop() def watch(self, check_callback, check_timeout): - """ Use an IDLE IMAP connection to parse incoming emails, and pass the results to a callback function""" + """ + Use an IDLE IMAP connection to parse incoming emails, + and pass the results to a callback function + """ while True: try: - IMAPClient(host=self._client.host, username=self._username, password=self._password, - port=self._client.port, ssl=self._client.ssl, verify=self._verify, + IMAPClient(host=self._client.host, + username=self._username, + password=self._password, + port=self._client.port, + ssl=self._client.ssl, + verify=self._verify, idle_callback=check_callback, idle_timeout=check_timeout) except (timeout, IMAPClientError):