From 600b11b700b7e82bd237d4a0be9bc4a9be1fdf42 Mon Sep 17 00:00:00 2001 From: Clemens Klug Date: Wed, 17 Oct 2018 19:39:49 +0200 Subject: [PATCH] use jinja for messages --- src/config.json | 10 +++++----- src/spammer.py | 27 ++++++++++++++++++--------- src/templates/index.html | 4 ++-- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/config.json b/src/config.json index 1f93272..cec610a 100644 --- a/src/config.json +++ b/src/config.json @@ -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}}" } } -} \ No newline at end of file +} diff --git a/src/spammer.py b/src/spammer.py index b39adc0..262e643 100644 --- a/src/spammer.py +++ b/src/spammer.py @@ -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,20 +67,25 @@ 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")]) print(request.form) - return "1" \ No newline at end of file + return "1" diff --git a/src/templates/index.html b/src/templates/index.html index 1bb556a..5649ff4 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -9,7 +9,7 @@ {% for issue in issues %} - + {% endfor %}

@@ -21,4 +21,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %}