From 2376296b867acc38b4d3c7208a78c45da8a83666 Mon Sep 17 00:00:00 2001 From: Daniel Langbein Date: Wed, 14 Jun 2023 22:10:04 +0200 Subject: [PATCH] refactor --- packaging/PKGBUILD | 2 +- src/exec_notify/do_notify.py | 2 +- src/exec_notify/lib/mail.py | 78 ++++++++++++++++++------------------ src/exec_notify/main.py | 18 ++++----- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/packaging/PKGBUILD b/packaging/PKGBUILD index 722e3cd..adc834e 100644 --- a/packaging/PKGBUILD +++ b/packaging/PKGBUILD @@ -5,7 +5,7 @@ _name=exec-notify pkgname="python-$_name-git" -pkgver=r49.b96b44a +pkgver=r50.21f07da pkgrel=1 pkgdesc='execute command and notify about failure via email' arch=(any) diff --git a/src/exec_notify/do_notify.py b/src/exec_notify/do_notify.py index da82b03..9d289f7 100755 --- a/src/exec_notify/do_notify.py +++ b/src/exec_notify/do_notify.py @@ -41,7 +41,7 @@ def main(): print(SUBJECT) print(BODY) - mail.sendMailOrWriteToFile(SUBJECT=SUBJECT, BODY=BODY) + mail.send_mail_or_write_to_file(subject=SUBJECT, body=BODY) if __name__ == '__main__': diff --git a/src/exec_notify/lib/mail.py b/src/exec_notify/lib/mail.py index 2c49066..e9ef0fb 100644 --- a/src/exec_notify/lib/mail.py +++ b/src/exec_notify/lib/mail.py @@ -9,34 +9,34 @@ from email.mime.multipart import MIMEMultipart from exec_notify.lib import config, util -def sendMailOrWriteToFile(SUBJECT: str, BODY: str, informAboutLocalMail: bool = True): - if informAboutLocalMail and _localMailExists(): - mailDir = config.getMailDir() +def send_mail_or_write_to_file(subject: str, body: str, inform_about_local_mail: bool = True): + if inform_about_local_mail and _local_mail_exists(): + mail_dir = config.getMailDir() - SUBJECT = f'{SUBJECT} | UNREAD LOCAL MAIL' - BODY = f'[!] Note [!]\n' \ - f'There is local mail inside {mailDir} that was not delivered previously! ' \ + subject = f'{subject} | UNREAD LOCAL MAIL' + body = f'[!] Note [!]\n' \ + f'There is local mail inside {mail_dir} that was not delivered previously! ' \ f'Please read and then delete it to get rid of this warning.\n\n\n' \ - f'{BODY}' + f'{body}' try: - sendMail(SUBJECT=SUBJECT, BODY=BODY) + send_mail(subject=subject, body=body) except Exception as e: print(f'exec-notify>> Could not send mail: {e}', file=sys.stderr) print(f'exec-notify>> Writing to file instead ...', file=sys.stderr) # Instead, try to save the mail so that the user can read # it later when connected to this computer - saveMail(SUBJECT=SUBJECT, BODY=BODY) + save_mail(subject=subject, body=body) -def sendMail(SUBJECT: str, BODY: str): +def send_mail(subject: str, body: str): """ :raises Exception: If mail could not be sent """ - FROM = config.getFrom() - TO = config.getTo() + from_ = config.getFrom() + to = config.getTo() password = config.getPassword() # Create a secure SSL context @@ -44,58 +44,58 @@ def sendMail(SUBJECT: str, BODY: str): host, port = config.getHostAndPort() with smtplib.SMTP_SSL(host=host, port=port, context=context) as server: - server.login(FROM, password) + server.login(from_, password) message = MIMEMultipart() - message["Subject"] = SUBJECT - message["From"] = FROM - message["To"] = TO - message["Bcc"] = TO # Recommended for mass emails + message["Subject"] = subject + message["From"] = from_ + message["To"] = to + message["Bcc"] = to # Recommended for mass emails # Turn plain/html message_body into plain/html MIMEText objects - message.attach(MIMEText(BODY, "plain")) + message.attach(MIMEText(body, "plain")) - server.sendmail(FROM, TO, message.as_string()) + server.sendmail(from_, to, message.as_string()) -def saveMail(SUBJECT: str, BODY: str): +def save_mail(subject: str, body: str): """ This method does NOT throw exceptions """ time = datetime.datetime.now() - timeStr = time.strftime('%Y%m%d_%H%M%S') + time_str = time.strftime('%Y%m%d_%H%M%S') - mailDir = config.getMailDir() - mailFile = mailDir.joinpath(timeStr) + mail_dir = config.getMailDir() + mail_file = mail_dir.joinpath(time_str) prefix = '┃ ' - mailStr = f'┏{"━"*19}\n' \ - f'┣╸Date:\n' \ - f'{util.appendLinePrefix(prefix, timeStr)}\n' \ - f'┣╸Subject:\n' \ - f'{util.appendLinePrefix(prefix, SUBJECT)}\n' \ - f'┣╸Body:\n' \ - f'{util.appendLinePrefix(prefix, BODY)}\n' \ - f'┗{"━"*19}' + mail_str = f'┏{"━" * 19}\n' \ + f'┣╸Date:\n' \ + f'{util.appendLinePrefix(prefix, time_str)}\n' \ + f'┣╸Subject:\n' \ + f'{util.appendLinePrefix(prefix, subject)}\n' \ + f'┣╸Body:\n' \ + f'{util.appendLinePrefix(prefix, body)}\n' \ + f'┗{"━" * 19}' try: # create parent directory if not existent - mailDir.mkdir(parents=True, exist_ok=True) + mail_dir.mkdir(parents=True, exist_ok=True) # append to file; create file if not existent - with open(mailFile, "a") as f: - f.write(mailStr) + with open(mail_file, "a") as f: + f.write(mail_str) except Exception as e: print(f'exec-notify>> Could not write to file: {e}', file=sys.stderr) -def _localMailExists(): +def _local_mail_exists(): """ :return: True if local mail exists in maildir folder. Once the mail is read the user shall delete (or move) it. """ - mailDir = config.getMailDir() - if not mailDir.exists(): + mail_dir = config.getMailDir() + if not mail_dir.exists(): return False else: - # mailDir has at least one child (file/folder) - return len(list(mailDir.iterdir())) > 0 + # mail_dir has at least one child (file/folder) + return len(list(mail_dir.iterdir())) > 0 diff --git a/src/exec_notify/main.py b/src/exec_notify/main.py index 8a52dfc..9c0ef48 100755 --- a/src/exec_notify/main.py +++ b/src/exec_notify/main.py @@ -22,10 +22,10 @@ def main(): print('No command given to execute!', file=sys.stderr) exit(1) - exit(executeCommand(argv[1:])) + exit(execute_command(argv[1:])) -def executeCommand(command: List[str]) -> int: +def execute_command(command: List[str]) -> int: """ Executes the given command and sends an email on failure. @@ -33,16 +33,16 @@ def executeCommand(command: List[str]) -> int: """ try: - exitCode, stdout, stderr = exec.execute(command) + exit_code, stdout, stderr = exec.execute(command) except Exception as e: - exitCode, stdout, stderr = 1, '', 'Caught subprocess exception: ' + str(e) + exit_code, stdout, stderr = 1, '', 'Caught subprocess exception: ' + str(e) prefix = '┃ ' BODY = f'┏{"━" * 19}\n' \ f'┣╸Command:\n' \ f'{util.appendLinePrefix(prefix, str(command))}\n' \ f'┣╸Exit Code:\n' \ - f'{util.appendLinePrefix(prefix, str(exitCode))}\n' \ + f'{util.appendLinePrefix(prefix, str(exit_code))}\n' \ f'┣╸stderr:\n' \ f'{util.appendLinePrefix(prefix, stderr)}\n' \ f'┣╸stdout:\n' \ @@ -50,11 +50,11 @@ def executeCommand(command: List[str]) -> int: f'┗{"━" * 19}' print(BODY) - if exitCode != 0: - SUBJECT = f'{socket.gethostname()} | {str(command)}' - mail.sendMailOrWriteToFile(SUBJECT=SUBJECT, BODY=BODY) + if exit_code != 0: + subject = f'{socket.gethostname()} | {str(command)}' + mail.send_mail_or_write_to_file(subject=subject, body=BODY) - return exitCode + return exit_code if __name__ == '__main__':