use jinja for messages

This commit is contained in:
Clemens Klug 2018-10-17 19:39:49 +02:00
parent 21a046f537
commit 600b11b700
3 changed files with 25 additions and 16 deletions

View File

@ -18,11 +18,11 @@
}
},
"RZ": {
"mail": "fachschaft.wiai@uni-bamberg.de",
"mail": "clemens.klug@uni-bamberg.de",
"templates": {
"Portsperre": "liebes RZ, Port {port} ist zu. das ist doof :(",
"WLAN": "hallo RZ, in Raum {raum} funkt das WLAN {wlan} nicht. das ist doof :(",
"test": "ich bin ein test mit einer zahl: {anzahl}"
"Portsperre": "liebes RZ, Port {{port}} ist zu. das ist doof :(",
"WLAN": "hallo RZ, in Raum {{raum}} funkt das WLAN {{wlan}} nicht. das ist doof :(",
"test": "ich bin ein test mit einer zahl: {{anzahl}}"
}
}
}

View File

@ -4,9 +4,11 @@ from string import Formatter
from flask import Flask, render_template, request
from flask_mail import Mail, Message
from jinja2 import Environment, meta, Template
Placeholder = namedtuple("Placeholder", ["name", "type", "desc", "default"])
env = Environment()
def load_config(conf="config.json"):
config = json.load(open(conf))
@ -26,15 +28,17 @@ def load_config(conf="config.json"):
templates = []
for issue_name in target["templates"]:
text = target["templates"][issue_name]
fields = [name for _, name, _, _ in Formatter().parse(text)]
ast = env.parse(text)
fields = list(meta.find_undeclared_variables(ast))
#fields = [name for _, name, _, _ in Formatter().parse(text)]
name = f"{org}: {issue_name}"
value = json.dumps({
value = {
"org": org,
"name": issue_name,
"mail": config[org]["mail"],
"text": text,
"placeholders": [i._asdict() for i in placeholders if i.name in fields]
})
}
flat.append({"name": name, "value": value})
return flat
@ -63,18 +67,23 @@ def send():
if all([field in request.form for field in ("text", "sender", "target")]):
text = request.form["text"]
print("all fields present")
fields = [name for _, name, _, _ in Formatter().parse(text)]
ast = env.parse(text)
fields = list(meta.find_undeclared_variables(ast))
#fields = [name for _, name, _, _ in Formatter().parse(text)]
if None in fields:
fields.remove(None)
if all([field in request.form for field in fields]):
values = {field: request.form[field] for field in fields}
text = text.format(**values)
text = Template(text).render(**values)
sender = request.form["sender"]
recipients = [request.form["target"]]
msg = Message("Störungsmeldung", body=text, sender=sender, recipients=recipients)
print(msg)
if not mail.send(msg) is None:
return "Success!"
result = mail.send(msg)
if result is None:
return f"Success! ({result})"
else:
return f"Fail :( ({result})"
print([(field,field in request.form) for field in fields])
return "2"
print([(field,field in request.form) for field in ("text", "sender", "target")])

View File

@ -9,7 +9,7 @@
<option selected disabled="true">---</option>
{% for issue in issues %}
<option value="{{issue.value}}">{{ issue.name }}</option>
<option value='{{issue.value|tojson}}'>{{ issue.name }}</option>
{% endfor %}
</select>
</p>