owl-map/matcher/mail.py
2021-10-22 09:43:36 +01:00

104 lines
2.2 KiB
Python

from flask import current_app, g, request, has_request_context
from email.mime.text import MIMEText
from email.utils import formatdate, make_msgid
from pprint import pformat
import smtplib
import traceback
import sys
def send_mail(subject, body, config=None):
try:
send_mail_main(subject, body, config=config)
except smtplib.SMTPDataError:
pass # ignore email errors
def send_mail_main(subject, body, config=None):
return
if config is None:
config = current_app.config
mail_to = config["ADMIN_EMAIL"]
mail_from = config["MAIL_FROM"]
msg = MIMEText(body, "plain", "UTF-8")
msg["Subject"] = subject
msg["To"] = mail_to
msg["From"] = mail_from
msg["Date"] = formatdate()
msg["Message-ID"] = make_msgid()
s = smtplib.SMTP(config["SMTP_HOST"])
s.sendmail(mail_from, [mail_to], msg.as_string())
s.quit()
def get_username():
if hasattr(g, "user"):
if g.user.is_authenticated:
user = g.user.username
else:
user = "not authenticated"
else:
user = "no user"
return user
def error_mail(subject, data, r, via_web=True):
body = f"""
remote URL: {r.url}
status code: {r.status_code}
request data:
{data}
status code: {r.status_code}
content-type: {r.headers["content-type"]}
reply:
{r.text}
"""
if has_request_context():
body = f"site URL: {request.url}\nuser: {get_username()}\n" + body
send_mail(subject, body)
def open_changeset_error(session_id, changeset, r):
username = g.user.username
body = f"""
user: {username}
page: {url}
message user: https://www.openstreetmap.org/message/new/{username}
sent:
{changeset}
reply:
{r.text}
"""
send_mail("error creating changeset:" + body)
def send_traceback(info, prefix="osm-wikidata"):
exception_name = sys.exc_info()[0].__name__
subject = f"{prefix} error: {exception_name}"
body = f"user: {get_username()}\n" + info + "\n" + traceback.format_exc()
send_mail(subject, body)
def datavalue_missing(field, entity):
qid = entity["title"]
body = f"https://www.wikidata.org/wiki/{qid}\n\n{pformat(entity)}"
subject = f"{qid}: datavalue missing in {field}"
send_mail(subject, body)