diff --git a/budget/api.py b/budget/api.py index c5ae76b..b197b81 100644 --- a/budget/api.py +++ b/budget/api.py @@ -2,8 +2,9 @@ from flask import * from models import db, Project, Person, Bill -from forms import ProjectForm, EditProjectForm, MemberForm, BillForm -from utils import for_all_methods, get_billform_for +from forms import (ProjectForm, EditProjectForm, MemberForm, BillForm, + get_billform_for) +from utils import for_all_methods from rest import RESTResource, need_auth# FIXME make it an ext from werkzeug import Response diff --git a/budget/forms.py b/budget/forms.py index 25731bc..499f382 100644 --- a/budget/forms.py +++ b/budget/forms.py @@ -1,4 +1,6 @@ from flaskext.wtf import * +from flask import request + from wtforms.widgets import html_params from models import Project, Person, Bill, db from datetime import datetime @@ -20,14 +22,14 @@ def select_multi_checkbox(field, ul_class='', **kwargs): return u''.join(html) -def get_billform_for(request, project, set_default=True): +def get_billform_for(project, set_default=True, **kwargs): """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 = BillForm(**kwargs) 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] @@ -36,6 +38,7 @@ def get_billform_for(request, project, set_default=True): return form + class EditProjectForm(Form): name = TextField("Project name", validators=[Required()]) password = TextField("Private code", validators=[Required()]) @@ -71,10 +74,8 @@ class ProjectForm(EditProjectForm): if Project.query.get(form.id.data): raise ValidationError(Markup("""The project identifier is used to log in and for the URL of the project. -
We tried to generate an identifier for you but a project with this identifier already exists. -
Please create a new identifier you will be able to remember. """)) diff --git a/budget/tests.py b/budget/tests.py index 1541cbb..2b573f4 100644 --- a/budget/tests.py +++ b/budget/tests.py @@ -410,7 +410,8 @@ class APITestCase(TestCase): resp = self.api_create("raclette") self.assertTrue(400, resp.status_code) - self.assertEqual('{"id": ["This project id is already used"]}', resp.data) + self.assertIn('id', json.loads(resp.data)) + # get information about it resp = self.app.get("/api/projects/raclette", headers=self.get_auth("raclette")) diff --git a/budget/utils.py b/budget/utils.py index df165b5..52fd151 100644 --- a/budget/utils.py +++ b/budget/utils.py @@ -18,21 +18,6 @@ def slugify(value): return re.sub('[-\s]+', '-', value) -def get_billform_for(project, set_default=True, **kwargs): - """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(**kwargs) - 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. diff --git a/budget/web.py b/budget/web.py index 94c42d3..28740fc 100644 --- a/budget/web.py +++ b/budget/web.py @@ -219,7 +219,7 @@ def list_bills(): bills = g.project.get_bills() return render_template("list_bills.html", bills=bills, member_form=MemberForm(g.project), - bill_form=get_billform_for(request, g.project) + bill_form=get_billform_for(g.project) ) @main.route("//members/add", methods=["GET", "POST"]) @@ -258,7 +258,7 @@ def remove_member(member_id): @main.route("//add", methods=["GET", "POST"]) def add_bill(): - form = get_billform_for(request, g.project) + form = get_billform_for(g.project) if request.method == 'POST': if form.validate(): bill = Bill() @@ -292,7 +292,7 @@ def edit_bill(bill_id): if not bill: raise werkzeug.exceptions.NotFound() - form = get_billform_for(request, g.project, set_default=False) + form = get_billform_for(g.project, set_default=False) if request.method == 'POST' and form.validate(): form.save(bill, g.project)