From 4965d55e86d291d4bbccae3833ebaf6fac7c16e9 Mon Sep 17 00:00:00 2001 From: linuro Date: Mon, 15 Jun 2020 12:26:42 +0200 Subject: [PATCH] Documentation/formatting --- files/main.py | 54 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/files/main.py b/files/main.py index 101e276..d8b692a 100755 --- a/files/main.py +++ b/files/main.py @@ -1,13 +1,21 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# assemble the undead +#### Assemble the Undead ##### # # This is a script that serves the purpose of creating a wikipage and # send out a mail, when there are issues in redmine with a certain # status. It's supposed to be running as a crownjob. # -# Copyright 2020 +#### Arguments: ##### +# +# --nomail do not send a mail +# --nowiki don't create a wiki page +# --verbose, -v output everything +# --quiet, -q only print errors +# +# +#### Copyright 2020 ##### # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -35,7 +43,7 @@ redmine_api_key = '' ## Mediawiki config mediawiki_url = 'https://w.zom.bi' -# those should be Bot credentials, that can be created on Special:BotPasswords +# should be Bot credentials, that can be created on Special:BotPasswords mediawiki_username = 'Assemblybot@assemblybot' mediawiki_botpassword='' @@ -43,7 +51,7 @@ mediawiki_botpassword='' smtp_host = 'mail.zom.bi' smtp_port = 465 smtp_from = 'assembly_noreply@zom.bi' -smtp_to = [''] +smtp_recipients = [['']] smtp_user = 'assemblybot' smtp_password = '' mail_subject = '☣ The undead assemble' @@ -52,7 +60,6 @@ issues that require a decision from an assembly. You'll find a list \ of said issues at the end of this mail. If you wonna know more about \ those topics, please head to our issue tracker at https://tickets.zom.bi\ \n----\n\n\n" - mail_footer = "\n----\n beep, boop. I'm a bot.\n If you wonna\ complain about me, write a mail to cpp or create a ticket at https://tickets.zom.bi" @@ -67,7 +74,8 @@ def main(args): # do nothing, if there are no issues requiring an assembly. log(1,"No issue requires an assembly.\n exiting.") return 0 - mediawiki_page = {'title': 'Zombi:Assembly '+assembly_date, 'content':'{{plenum|Datum=' + assembly_date + '}}'} + mediawiki_page = {'title': 'Zombi:Assembly '+assembly_date,\ + 'content':'{{plenum|Datum=' + assembly_date + '}}'} mediawiki_page['content'] = '=Issues from redmine that require an assembly=\n' for issue in issues: # Append every issue to the page content @@ -86,19 +94,25 @@ def main(args): if '--no-mail' in args: log(1,"'--no-mail' argument given, so no mails have been sent.") else: - smtp_server = smtplib.SMTP_SSL(host=smtp_host,port=smtp_port) - if loglevel == 2: - smtp_server.set_debuglevel(1) - smtp_server.connect(host=smtp_host) - smtp_server.login(user=smtp_user,password=smtp_password) - mail_message = MIMEText(mail_header + mediawiki_page['content'] + mail_footer) - mail_message['Subject'] = mail_subject - mail_message['From'] = smtp_from - mail_message['To'] = None - smtp_server.sendmail(from_addr=smtp_from,to_addrs=smtp_to,msg=mail_message.as_string()) - smtp_server.quit() + smtp_send() return 0 +def smtp_send() + smtp_server = smtplib.SMTP_SSL(host=smtp_host,port=smtp_port) + if loglevel == 2: + smtp_server.set_debuglevel(1) + smtp_server.connect(host=smtp_host) + smtp_server.login(user=smtp_user,password=smtp_password) + mail_message = MIMEText(mail_header + \ + mediawiki_page['content'] + mail_footer) + mail_message['Subject'] = mail_subject + mail_message['From'] = smtp_from + for recipient in smtp_recipients: + mail_message['To'] = recipient + smtp_server.sendmail(from_addr=smtp_from,\ + to_addrs=recipient,msg=mail_message.as_string()) + smtp_server.quit() + def redmine_request(path): request = requests.get(redmine_url + path, headers={ @@ -109,7 +123,8 @@ def redmine_request(path): def redmine_get_requires_assembly_id(): data = redmine_request('/issue_statuses.json') - requires_assembly = next(filter(lambda x: x['name'] == 'Requires Assembly',data['issue_statuses']))['id'] + requires_assembly = next(filter(lambda x: x['name'] == \ + 'Requires Assembly',data['issue_statuses']))['id'] return requires_assembly def redmine_get_issues(state): @@ -140,7 +155,8 @@ def mediawiki_create(s,page): t_request = s.post(mediawiki_url + '/api.php?action=query&format=json&meta=tokens') token = t_request.json()["query"]["tokens"]["csrftoken"] - response = s.post(mediawiki_url + '/api.php?action=edit&format=json' + '&title=' + page['title'] + '&text=', + response = s.post(mediawiki_url + '/api.php?action=edit&format=json' \ + + '&title=' + page['title'] + '&text=', data = { 'token': token, 'text' : page['content']