summaryrefslogtreecommitdiff
path: root/app/views
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2013-10-14 23:50:27 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2013-10-14 23:50:27 +0200
commitdbb134751c3a87cf203cd243b1952b146b8914c1 (patch)
treecb34abe63bd1e3f95a4616b4a20a7528380014f1 /app/views
parenta628fd3084e94959dc29c86912f2a2e97038799c (diff)
downloadkosten-dbb134751c3a87cf203cd243b1952b146b8914c1.tar.gz
kosten-dbb134751c3a87cf203cd243b1952b146b8914c1.tar.bz2
kosten-dbb134751c3a87cf203cd243b1952b146b8914c1.zip
Finish login stuff
Diffstat (limited to 'app/views')
-rw-r--r--app/views/__init__.py3
-rw-r--r--app/views/categories.py6
-rw-r--r--app/views/consts.py13
-rw-r--r--app/views/expenses.py15
-rw-r--r--app/views/login.py26
5 files changed, 52 insertions, 11 deletions
diff --git a/app/views/__init__.py b/app/views/__init__.py
index 659a568..ef7c033 100644
--- a/app/views/__init__.py
+++ b/app/views/__init__.py
@@ -33,8 +33,9 @@ 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, api
+from . import categories, consts, expenses, login, api
+app.register_blueprint(login.mod)
app.register_blueprint(expenses.mod)
app.register_blueprint(consts.mod, url_prefix="/const")
app.register_blueprint(categories.mod, url_prefix="/cat")
diff --git a/app/views/categories.py b/app/views/categories.py
index 3491998..1ec7b1d 100644
--- a/app/views/categories.py
+++ b/app/views/categories.py
@@ -1,23 +1,25 @@
from ..flask_extend import Blueprint
from flask import request
+from ..login import current_user, login_required
from ..utils import templated, redirect
from ..model import db, Category
mod = Blueprint('categories', __name__)
@mod.route("/", methods=("GET", "POST"))
+@login_required
@templated()
def manage ():
if request.method == "GET":
- categories = Category.query.order_by(Category.name).all()
+ categories = Category.of(current_user).order_by(Category.name).all()
return { 'cats' : categories }
else:
for id, name in request.form.iteritems():
if id.startswith("n-"):
- db.session.add(Category(name = name))
+ db.session.add(Category(name = name, user = current_user))
else:
Category.get(id).name = name
diff --git a/app/views/consts.py b/app/views/consts.py
index dab02e0..8eef73b 100644
--- a/app/views/consts.py
+++ b/app/views/consts.py
@@ -5,6 +5,7 @@ import datetime
from sqlalchemy import sql
from ..model import db, Category, ConstExpense
+from ..login import current_user, login_required
from ..forms import ConstForm, today
from ..utils import templated, redirect
@@ -13,7 +14,7 @@ mod = Blueprint('consts', __name__)
def const_form(cur=None, obj=None):
obj = cur if obj is None else obj
form = ConstForm(obj=obj)
- form.category.query = Category.query.order_by(Category.name)
+ form.category.query = Category.of(current_user).order_by(Category.name)
# init prev_list
CE = ConstExpense
@@ -24,16 +25,17 @@ def const_form(cur=None, obj=None):
filter = sql.or_(CE.next == cur, filter)
filter = sql.and_(filter, CE.id != cur.id)
- form.prev.query = CE.query.filter(filter).order_by(CE.description)
+ form.prev.query = CE.of(current_user).filter(filter).order_by(CE.description)
return form
@mod.route("/")
+@login_required
@templated()
def list ():
d = today()
- expenses = ConstExpense.query.order_by(ConstExpense.description).all()
+ expenses = ConstExpense.of(current_user).order_by(ConstExpense.description).all()
current = []
old = []
@@ -51,11 +53,13 @@ def list ():
return { 'current': current, 'old': old, 'future': future }
@mod.route("/<int:id>")
+@login_required
@templated()
def show(id):
return { 'exp': ConstExpense.get(id) }
@mod.route("/edit/<int:id>", methods=("GET", "POST"))
+@login_required
@templated()
def edit(id):
exp = ConstExpense.get(id)
@@ -75,6 +79,7 @@ def edit(id):
return { 'form': form }
@mod.route("/add/from/<int:other>")
+@login_required
@templated(".add")
def add_from(other):
exp = ConstExpense() # needed to initialize 'CE.next'
@@ -93,6 +98,7 @@ def add_from(other):
return { 'form': form }
@mod.route("/add/", methods=("GET", "POST"))
+@login_required
@templated()
def add ():
exp = ConstExpense()
@@ -101,6 +107,7 @@ def add ():
if form.validate_on_submit():
form.populate_obj(exp)
+ exp.user = current_user
db.session.add(exp)
db.session.commit()
return redirect(".show", id = exp.id)
diff --git a/app/views/expenses.py b/app/views/expenses.py
index efa6717..aa1fd51 100644
--- a/app/views/expenses.py
+++ b/app/views/expenses.py
@@ -5,7 +5,7 @@ import datetime, decimal
from sqlalchemy import sql, func
from ..model import db, Category, SingleExpense, CatExpense, MonthExpense
-
+from ..login import login_required, current_user
from ..forms import ExpenseForm
from ..utils import templated, redirect
@@ -13,26 +13,26 @@ mod = Blueprint('expenses', __name__)
def expense_form(obj=None):
form = ExpenseForm(obj=obj)
- form.category.query = Category.query.order_by(Category.name)
+ form.category.query = Category.of(current_user).order_by(Category.name)
return form
def calc_month_exp(year, month):
ssum = func.sum(SingleExpense.expense)
- query = SingleExpense.of_month(month, year)
+ query = SingleExpense.of_month(current_user, month, year)
result = query.group_by(SingleExpense.category_id).\
values(SingleExpense.category_id, ssum)
exps = [CatExpense(Category.query.get(c), s, query.filter(SingleExpense.category_id == c)) for c,s in result]
- return MonthExpense(datetime.date(year, month, 1), exps)
+ return MonthExpense(current_user, datetime.date(year, month, 1), exps)
def pie_stuff(exp):
expenses = {}
for c in exp.catexps:
expenses[c.cat.name] = float(c.expense)
- for c in Category.query.order_by(Category.name).all():
+ for c in Category.of(current_user).order_by(Category.name).all():
yield (c.name, expenses.get(c.name, 0.0))
def calc_month_and_pie(year, month):
@@ -59,6 +59,7 @@ def is_last(exp):
return exp.date >= datetime.date.today().replace(day = 1)
@mod.route("/<int(fixed_digits=4):year>/<int(fixed_digits=2):month>")
+@login_required
@templated(".show")
def show_date(year, month):
c,p = calc_month_and_pie(year, month)
@@ -67,6 +68,7 @@ def show_date(year, month):
mod.add_url_rule("/<path:p>", endpoint = "show_date_str", build_only = True)
@mod.route("/")
+@login_required
@templated()
def show():
d = datetime.date.today()
@@ -80,6 +82,7 @@ def show():
return { 'exps' : [first, second], 'pies': [pfirst, psecond] }
@mod.route("/edit/<int:id>", methods=("GET", "POST"))
+@login_required
@templated()
def edit(id):
exp = SingleExpense.get(id)
@@ -101,6 +104,7 @@ def edit(id):
return { 'form': form }
@mod.route("/add/", methods=("GET", "POST"))
+@login_required
@templated()
def add():
form = expense_form()
@@ -109,6 +113,7 @@ def add():
exp = SingleExpense()
form.populate_obj(exp)
+ exp.user = current_user
db.session.add(exp)
db.session.commit()
diff --git a/app/views/login.py b/app/views/login.py
new file mode 100644
index 0000000..8693c30
--- /dev/null
+++ b/app/views/login.py
@@ -0,0 +1,26 @@
+from ..flask_extend import Blueprint
+from flask import request, url_for, redirect
+
+from ..forms import LoginForm
+from ..login import login_user, logout_user, login_manager
+from ..utils import templated
+
+mod = Blueprint('login', __name__)
+
+@mod.route("/login", methods=("GET", "POST"))
+@templated()
+def login():
+ form = LoginForm()
+
+ if form.validate_on_submit():
+ login_user(form.user)
+ return redirect(request.args.get("next") or url_for("index"))
+
+ return { 'form': form }
+
+@mod.route("/logout")
+def logout():
+ logout_user()
+ return redirect(url_for(".login"))
+
+login_manager.login_view = 'login.login'