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//.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()