diff options
Diffstat (limited to '')
-rw-r--r-- | app/views/svg.py | 43 |
1 files changed, 43 insertions, 0 deletions
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() |