aboutsummaryrefslogtreecommitdiff
path: root/budget/utils.py
blob: 262ebfef51cf221e7eddf145a0e8c8199bac8461 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from functools import wraps
from flask import redirect, url_for, session, request
from werkzeug.routing import HTTPException, RoutingException

from models import Bill, Project
from forms import BillForm

def get_billform_for(project, set_default=True):
    """Return an instance of BillForm configured for a particular project.

    :set_default: if set to True, on GET methods (usually when we want to 
                  display the default form, it will call set_default on it.
    
    """
    form = BillForm()
    form.payed_for.choices = form.payer.choices = [(str(m.id), m.name) for m in project.active_members]
    form.payed_for.default = [str(m.id) for m in project.active_members]

    if set_default and request.method == "GET":
        form.set_default()
    return form

class Redirect303(HTTPException, RoutingException):
    """Raise if the map requests a redirect. This is for example the case if
    `strict_slashes` are activated and an url that requires a trailing slash.

    The attribute `new_url` contains the absolute destination url.
    """
    code = 303

    def __init__(self, new_url):
        RoutingException.__init__(self, new_url)
        self.new_url = new_url

    def get_response(self, environ):
        return redirect(self.new_url, 303)