From 02172e39c15272f9567bd39a28ec24d0270ea70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Mon, 15 Apr 2013 23:56:53 +0200 Subject: 'templated' and wrapped 'redirect' --- app/utils.py | 29 +++++++++++++++++++++++++++++ app/views/categories.py | 11 +++++------ app/views/consts.py | 31 +++++++++++++++++-------------- app/views/expenses.py | 26 +++++++++++++------------- 4 files changed, 64 insertions(+), 33 deletions(-) create mode 100644 app/utils.py (limited to 'app') diff --git a/app/utils.py b/app/utils.py new file mode 100644 index 0000000..caacea7 --- /dev/null +++ b/app/utils.py @@ -0,0 +1,29 @@ +from functools import wraps +from flask import request, render_template, url_for +from flask import redirect as _redirect + +def templated(template=None): + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + template_name = template + if template_name is None: + template_name = request.endpoint \ + .replace('.', '/') + '.jinja' + ctx = f(*args, **kwargs) + if ctx is None: + ctx = {} + elif not isinstance(ctx, dict): + return ctx + return render_template(template_name, **ctx) + return decorated_function + return decorator + +def redirect (target, **kwargs): + code = kwargs.pop("_code", None) + url = url_for(target, **kwargs) + + if code is None: + return _redirect(url) + else: + return _redirect(url, code) diff --git a/app/views/categories.py b/app/views/categories.py index c7346d3..3491998 100644 --- a/app/views/categories.py +++ b/app/views/categories.py @@ -1,20 +1,19 @@ from ..flask_extend import Blueprint -from flask import render_template, request, url_for, redirect +from flask import request +from ..utils import templated, redirect from ..model import db, Category mod = Blueprint('categories', __name__) -def T(tpl): - return "categories/%s.jinja" % tpl - @mod.route("/", methods=("GET", "POST")) +@templated() def manage (): if request.method == "GET": categories = Category.query.order_by(Category.name).all() - return render_template(T("manage"), cats = categories) + return { 'cats' : categories } else: for id, name in request.form.iteritems(): if id.startswith("n-"): @@ -24,4 +23,4 @@ def manage (): db.session.commit() - return redirect(url_for(".manage")) + return redirect(".manage") diff --git a/app/views/consts.py b/app/views/consts.py index 1879c15..441137d 100644 --- a/app/views/consts.py +++ b/app/views/consts.py @@ -1,17 +1,15 @@ from ..flask_extend import Blueprint -from flask import render_template, request, url_for, redirect +from flask import request import datetime from sqlalchemy import sql from ..model import db, Category, ConstExpense from ..forms import ConstForm, today +from ..utils import templated, redirect mod = Blueprint('consts', __name__) -def T(tpl): - return "consts/%s.jinja" % tpl - def const_form(cur=None, obj=None): obj = cur if obj is None else obj form = ConstForm(obj=obj) @@ -31,6 +29,7 @@ def const_form(cur=None, obj=None): return form @mod.route("/") +@templated() def list (): d = today() @@ -49,13 +48,15 @@ def list (): else: future.append(e) - return render_template(T("list"), current = current, old = old, future = future) + return { 'current': current, 'old': old, 'future': future } @mod.route("/") +@templated() def show(id): - return render_template(T("show"), exp = ConstExpense.get(id)) + return { 'exp': ConstExpense.get(id) } @mod.route("/edit/", methods=("GET", "POST")) +@templated() def edit(id): exp = ConstExpense.get(id) form = const_form(exp) @@ -64,16 +65,17 @@ def edit(id): if "deleteB" in request.form: db.session.delete(exp) db.session.commit() - return redirect(url_for(".list")) + return redirect(".list") elif form.validate(): # change form.populate_obj(exp) db.session.commit() - return redirect(url_for(".show", id = exp.id)) + return redirect(".show") - return render_template(T("edit"), form=form) + return { 'form': form } @mod.route("/add/from/") +@templated("add") def add_from(other): exp = ConstExpense() # needed to initialize 'CE.next' @@ -88,18 +90,19 @@ def add_from(other): form.end.data = start.replace(year = start.year + 1) if not other.next: form.prev.data = other - return add(form) + return { 'form': form } @mod.route("/add/", methods=("GET", "POST")) -def add (form=None): +@templated() +def add (): exp = ConstExpense() - form = const_form() if form is None else form + form = const_form() if form.validate_on_submit(): form.populate_obj(exp) db.session.add(exp) db.session.commit() - return redirect(url_for(".show", id = exp.id)) + return redirect(".show", id = exp.id) - return render_template(T("add"), form = form) + return { 'form': form } diff --git a/app/views/expenses.py b/app/views/expenses.py index 583ac79..c0d9c65 100644 --- a/app/views/expenses.py +++ b/app/views/expenses.py @@ -1,5 +1,5 @@ from ..flask_extend import Blueprint -from flask import render_template, request, url_for, redirect +from flask import request import datetime, decimal from sqlalchemy import sql, func @@ -7,12 +7,10 @@ from sqlalchemy import sql, func from ..model import db, Category, SingleExpense, CatExpense, MonthExpense from ..forms import ExpenseForm +from ..utils import templated, redirect mod = Blueprint('expenses', __name__) -def T(tpl): - return "expenses/%s.jinja" % tpl - def expense_form(obj=None): form = ExpenseForm(obj=obj) form.category.query = Category.query.order_by(Category.name) @@ -48,13 +46,15 @@ def is_last(exp): return exp.date >= datetime.date.today().replace(day = 1) @mod.route("//") +@templated("show") def show_date(year, month): c = calc_month_exp(year, month) - return render_template(T("show"), exps = [c]) + return { 'exps' : [c] } mod.add_url_rule("/", endpoint = "show_date_str", build_only = True) @mod.route("/") +@templated() def show(): d = datetime.date.today() @@ -64,15 +64,14 @@ def show(): else: second = calc_month_exp(d.year, d.month - 1) - return render_template(T("show"), exps = [first, second]) + return { 'exps' : [first, second] } @mod.route("/edit/", methods=("GET", "POST")) +@templated() def edit(id): exp = SingleExpense.get(id) form = expense_form(exp) - ret = lambda: render_template(T("edit"), form=form) - if request.method == "POST": if "deleteB" in request.form: db.session.delete(exp) @@ -81,14 +80,15 @@ def edit(id): form.populate_obj(exp) else: - return ret() + return { 'form': form } db.session.commit() - return redirect(url_for("index")) + return redirect("index") - return ret() + return { 'form': form } @mod.route("/add/", methods=("GET", "POST")) +@templated() def add(): form = expense_form() @@ -100,6 +100,6 @@ def add(): db.session.add(exp) db.session.commit() - return redirect(url_for(".add")) + return redirect(".add") - return render_template(T("add"), form=form) + return { 'form': form } -- cgit v1.2.3