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 %}