forked from server/reporter
use jinja for messages
This commit is contained in:
parent
21a046f537
commit
600b11b700
@ -18,11 +18,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"RZ": {
|
"RZ": {
|
||||||
"mail": "fachschaft.wiai@uni-bamberg.de",
|
"mail": "clemens.klug@uni-bamberg.de",
|
||||||
"templates": {
|
"templates": {
|
||||||
"Portsperre": "liebes RZ, Port {port} ist zu. das ist doof :(",
|
"Portsperre": "liebes RZ, Port {{port}} ist zu. das ist doof :(",
|
||||||
"WLAN": "hallo RZ, in Raum {raum} funkt das WLAN {wlan} nicht. 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}"
|
"test": "ich bin ein test mit einer zahl: {{anzahl}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,9 +4,11 @@ from string import Formatter
|
|||||||
|
|
||||||
from flask import Flask, render_template, request
|
from flask import Flask, render_template, request
|
||||||
from flask_mail import Mail, Message
|
from flask_mail import Mail, Message
|
||||||
|
from jinja2 import Environment, meta, Template
|
||||||
|
|
||||||
Placeholder = namedtuple("Placeholder", ["name", "type", "desc", "default"])
|
Placeholder = namedtuple("Placeholder", ["name", "type", "desc", "default"])
|
||||||
|
env = Environment()
|
||||||
|
|
||||||
|
|
||||||
def load_config(conf="config.json"):
|
def load_config(conf="config.json"):
|
||||||
config = json.load(open(conf))
|
config = json.load(open(conf))
|
||||||
@ -26,15 +28,17 @@ def load_config(conf="config.json"):
|
|||||||
templates = []
|
templates = []
|
||||||
for issue_name in target["templates"]:
|
for issue_name in target["templates"]:
|
||||||
text = target["templates"][issue_name]
|
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}"
|
name = f"{org}: {issue_name}"
|
||||||
value = json.dumps({
|
value = {
|
||||||
"org": org,
|
"org": org,
|
||||||
"name": issue_name,
|
"name": issue_name,
|
||||||
"mail": config[org]["mail"],
|
"mail": config[org]["mail"],
|
||||||
"text": text,
|
"text": text,
|
||||||
"placeholders": [i._asdict() for i in placeholders if i.name in fields]
|
"placeholders": [i._asdict() for i in placeholders if i.name in fields]
|
||||||
})
|
}
|
||||||
flat.append({"name": name, "value": value})
|
flat.append({"name": name, "value": value})
|
||||||
return flat
|
return flat
|
||||||
|
|
||||||
@ -63,20 +67,25 @@ def send():
|
|||||||
if all([field in request.form for field in ("text", "sender", "target")]):
|
if all([field in request.form for field in ("text", "sender", "target")]):
|
||||||
text = request.form["text"]
|
text = request.form["text"]
|
||||||
print("all fields present")
|
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:
|
if None in fields:
|
||||||
fields.remove(None)
|
fields.remove(None)
|
||||||
if all([field in request.form for field in fields]):
|
if all([field in request.form for field in fields]):
|
||||||
values = {field: request.form[field] 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"]
|
sender = request.form["sender"]
|
||||||
recipients = [request.form["target"]]
|
recipients = [request.form["target"]]
|
||||||
msg = Message("Störungsmeldung", body=text, sender=sender, recipients=recipients)
|
msg = Message("Störungsmeldung", body=text, sender=sender, recipients=recipients)
|
||||||
print(msg)
|
print(msg)
|
||||||
if not mail.send(msg) is None:
|
result = mail.send(msg)
|
||||||
return "Success!"
|
if result is None:
|
||||||
|
return f"Success! ({result})"
|
||||||
|
else:
|
||||||
|
return f"Fail :( ({result})"
|
||||||
print([(field,field in request.form) for field in fields])
|
print([(field,field in request.form) for field in fields])
|
||||||
return "2"
|
return "2"
|
||||||
print([(field,field in request.form) for field in ("text", "sender", "target")])
|
print([(field,field in request.form) for field in ("text", "sender", "target")])
|
||||||
print(request.form)
|
print(request.form)
|
||||||
return "1"
|
return "1"
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
<option selected disabled="true">---</option>
|
<option selected disabled="true">---</option>
|
||||||
|
|
||||||
{% for issue in issues %}
|
{% for issue in issues %}
|
||||||
<option value="{{issue.value}}">{{ issue.name }}</option>
|
<option value='{{issue.value|tojson}}'>{{ issue.name }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</p>
|
</p>
|
||||||
@ -21,4 +21,4 @@
|
|||||||
<div id="placeholders" ></div>
|
<div id="placeholders" ></div>
|
||||||
<input type="submit">
|
<input type="submit">
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user