From 18f0c3c367a4dd53aff163f717bb62fb661e8600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 14 Apr 2013 21:00:24 +0200 Subject: Backport @app.template_test; make the functions in expenses filters/tests --- app/__init__.py | 2 +- app/flask_extend.py | 32 ++++++++++++++++++++++++++++++++ app/forms.py | 3 +-- app/views/categories.py | 2 +- app/views/consts.py | 2 +- app/views/expenses.py | 34 ++++++++++++++++------------------ templates/pages/show.jinja | 6 +++--- 7 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 app/flask_extend.py diff --git a/app/__init__.py b/app/__init__.py index 6ba7025..0f84d3f 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,4 +1,4 @@ -from flask import Flask +from .flask_extend import Flask # create app app = Flask("kosten") diff --git a/app/flask_extend.py b/app/flask_extend.py new file mode 100644 index 0000000..5096d17 --- /dev/null +++ b/app/flask_extend.py @@ -0,0 +1,32 @@ +from flask import Flask as _Flask +from flask import Blueprint as _Blueprint + +if not hasattr(_Flask, 'template_test'): +# model `template_test` -- introduced with flask-0.10 + class Flask(_Flask): + def template_test(self, name=None): + def decorator(f): + self.add_template_test(f, name=name) + return f + return decorator + + def add_template_test(self, f, name=None): + self.jinja_env.tests[name or f.__name__] = f + + class Blueprint(_Blueprint): + def app_template_test(self, name=None): + def decorator(f): + self.add_app_template_test(f, name=name) + return f + return decorator + + def add_app_template_test(self, f, name=None): + def register_template(state): + state.app.jinja_env.tests[name or f.__name__] = f + self.record_once(register_template) + +else: + Flask = _Flask + Blueprint = _Blueprint + +del _Flask, _Blueprint diff --git a/app/forms.py b/app/forms.py index 9490839..a7b9fcd 100644 --- a/app/forms.py +++ b/app/forms.py @@ -13,11 +13,10 @@ from . import app today = datetime.date.today +@app.template_test("hidden") def is_hidden_field(f): return isinstance(f, HiddenField) -app.jinja_env.tests["hidden"] = is_hidden_field - class DecimalField(fields.DecimalField): def process_formdata(self, valuelist): if valuelist: diff --git a/app/views/categories.py b/app/views/categories.py index c351746..902959b 100644 --- a/app/views/categories.py +++ b/app/views/categories.py @@ -1,4 +1,4 @@ -from flask import Blueprint +from ..flask_extend import Blueprint from flask import render_template, request, url_for from ..model import Category diff --git a/app/views/consts.py b/app/views/consts.py index 6358ed1..bda6067 100644 --- a/app/views/consts.py +++ b/app/views/consts.py @@ -1,4 +1,4 @@ -from flask import Blueprint +from ..flask_extend import Blueprint from flask import render_template, request, url_for mod = Blueprint('consts', __name__) diff --git a/app/views/expenses.py b/app/views/expenses.py index 400876c..269d9bb 100644 --- a/app/views/expenses.py +++ b/app/views/expenses.py @@ -1,4 +1,4 @@ -from flask import Blueprint +from ..flask_extend import Blueprint from flask import render_template, request, url_for, redirect import datetime, decimal @@ -26,25 +26,23 @@ def calc_month_exp(year, month): return MonthExpense(datetime.date(year, month, 1), exps) -@mod.context_processor -def inject_funs(): - def prev_date(exp): - if exp.date.month == 1: - return { "year": exp.date.year - 1, "month": 12 } - else: - return { "year": exp.date.year, "month": exp.date.month - 1 } - - def next_date(exp): - if exp.date.month == 12: - return { "year": exp.date.year + 1, "month": 1 } - else: - return { "year": exp.date.year, "month": exp.date.month + 1} - - def is_last(exp): - return exp.date >= datetime.date.today().replace(day = 1) +@mod.app_template_filter() +def prev_date(exp): + if exp.date.month == 1: + return { "year": exp.date.year - 1, "month": 12 } + else: + return { "year": exp.date.year, "month": exp.date.month - 1 } +@mod.app_template_filter() +def next_date(exp): + if exp.date.month == 12: + return { "year": exp.date.year + 1, "month": 1 } + else: + return { "year": exp.date.year, "month": exp.date.month + 1} - return { 'prev_date' : prev_date, 'next_date' : next_date, 'is_last': is_last } +@mod.app_template_test("last_date") +def is_last(exp): + return exp.date >= datetime.date.today().replace(day = 1) @mod.app_template_filter("date") def format_date(s): diff --git a/templates/pages/show.jinja b/templates/pages/show.jinja index 895a107..57bb1b3 100644 --- a/templates/pages/show.jinja +++ b/templates/pages/show.jinja @@ -34,12 +34,12 @@ {# Note: exps are given _reversed_, i.e. "exps | last" is the _first_ on the timeline #} - {% set d = prev_date(exps | last) %} + {% set d = exps | last | prev_date %} {{ left_arrow(url_for(".show_date", **d), d | date) }} {% set first = exps | first %} - {% if not is_last(first) %} - {% set d = next_date(first) %} + {% if not first is last_date %} + {% set d = first | next_date %} {{ right_arrow(url_for(".show_date", **d), d | date) }} {% endif %} {% endblock content %} -- cgit v1.2.3