summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/views/__init__.py7
-rw-r--r--app/views/svg.py43
2 files changed, 47 insertions, 3 deletions
diff --git a/app/views/__init__.py b/app/views/__init__.py
index d64b945..6405d3e 100644
--- a/app/views/__init__.py
+++ b/app/views/__init__.py
@@ -13,8 +13,8 @@ def handle_mobile():
flask.g.is_mobile = any((x in ua) for x in mobile_checks)
@app.template_filter("static_url")
-def static_url(s):
- return url_for("static", filename=s)
+def static_url(s, **kwargs):
+ return url_for("static", filename=s, **kwargs)
@app.template_filter("eur")
def eur(s):
@@ -31,10 +31,11 @@ def format_date(s, format="%Y/%m"):
def page_not_found (error):
return render_template("404.jinja", page = request.path), 404
-from . import categories, consts, expenses
+from . import categories, consts, expenses, svg
app.register_blueprint(expenses.mod)
app.register_blueprint(consts.mod, url_prefix="/const")
app.register_blueprint(categories.mod, url_prefix="/cat")
+app.register_blueprint(svg.mod, url_prefix="/svg")
app.add_url_rule("/", endpoint = "index", build_only = True)
diff --git a/app/views/svg.py b/app/views/svg.py
new file mode 100644
index 0000000..06666b3
--- /dev/null
+++ b/app/views/svg.py
@@ -0,0 +1,43 @@
+from ..flask_extend import Blueprint
+
+from .expenses import calc_month_exp
+from . import static_url
+from ..model import Category
+
+from pygal.style import DefaultStyle as Style
+from pygal import Pie as _Pie
+
+mod = Blueprint('svg', __name__)
+
+Style.background = Style.plot_background = "rgba(255,0,0,0)"
+
+def Pie(*args, **kwargs):
+ # does not work as functools.partial, because static_url would be called without request
+ return _Pie(*args,
+ style=Style,
+ js = [static_url('pygal/pygal.js', _external = True)],
+ legend_font_size = 24,
+ tooltip_font_size = 24,
+ value_font_size = 24,
+ margin = 0,
+ legend_at_bottom = True,
+ pretty_print = True,
+ **kwargs)
+
+@mod.route("/month/<int(fixed_digits=4):year>/<int(fixed_digits=2):month>.svg")
+def month(year, month):
+ exp = calc_month_exp(year, month)
+ pie = Pie()
+
+ expenses = {}
+ for c in exp.catexps:
+ expenses[c.cat.name] = float(c.expense)
+
+ for c in Category.query.order_by(Category.name).all():
+ pie.add(c.name, expenses.get(c.name, 0.0))
+
+ if not expenses:
+ pie.raw_series = []
+ pie.add("Empty", 0.1)
+
+ return pie.render_response()