1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/ihatemoney_ynh.git synced 2024-09-03 19:26:15 +02:00
ihatemoney_ynh/budget/utils.py
Alexis Metaireau 5e63a5034b Split the logic into different python modules:
* web.py contains the controllers (also called views) + url definitions
* models.py contains the models
* forms.py contains the forms
* utils.py contains a set of utility fonctions to ease the dev. process
2011-07-23 18:45:40 +02:00

39 lines
1.4 KiB
Python

from functools import wraps
from flask import redirect, url_for, session, request
from models import Bill, Project
from forms import BillForm
def get_billform_for(project_id):
"""Return an instance of BillForm configured for a particular project."""
form = BillForm()
payers = [(m.id, m.name) for m in Project.query.get("blah").members]
form.payed_for.choices = form.payer.choices = payers
return form
def requires_auth(f):
"""Decorator checking that the user do have access to the given project id.
If not, redirects to an authentication page, otherwise display the requested
page.
"""
@wraps(f)
def decorator(*args, **kwargs):
# if a project id is specified in kwargs, check we have access to it
# get the password matching this project id
# pop project_id out of the kwargs
project_id = kwargs.pop('project_id')
project = Project.query.get(project_id)
if not project:
return redirect(url_for("create_project", project_id=project_id))
if project.id in session and session[project.id] == project.password:
# add project into kwargs and call the original function
kwargs['project'] = project
return f(*args, **kwargs)
else:
# redirect to authentication page
return redirect(url_for("authenticate",
project_id=project.id, redirect_url=request.url))
return decorator