aboutsummaryrefslogtreecommitdiff
path: root/budget/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'budget/api.py')
-rw-r--r--budget/api.py46
1 files changed, 24 insertions, 22 deletions
diff --git a/budget/api.py b/budget/api.py
index 3df8ab2..c5ae76b 100644
--- a/budget/api.py
+++ b/budget/api.py
@@ -2,8 +2,8 @@
from flask import *
from models import db, Project, Person, Bill
-from forms import ProjectForm
-from utils import for_all_methods
+from forms import ProjectForm, EditProjectForm, MemberForm, BillForm
+from utils import for_all_methods, get_billform_for
from rest import RESTResource, need_auth# FIXME make it an ext
from werkzeug import Response
@@ -32,7 +32,7 @@ class ProjectHandler(object):
def add(self):
form = ProjectForm(csrf_enabled=False)
if form.validate():
- project = form.save(Project())
+ project = form.save()
db.session.add(project)
db.session.commit()
return 201, project.id
@@ -40,7 +40,7 @@ class ProjectHandler(object):
@need_auth(check_project, "project")
def get(self, project):
- return project
+ return 200, project
@need_auth(check_project, "project")
def delete(self, project):
@@ -50,9 +50,9 @@ class ProjectHandler(object):
@need_auth(check_project, "project")
def update(self, project):
- form = ProjectForm(csrf_enabled=False)
+ form = EditProjectForm(csrf_enabled=False)
if form.validate():
- form.save(project)
+ form.update(project)
db.session.commit()
return 200, "UPDATED"
return 400, form.errors
@@ -61,25 +61,25 @@ class ProjectHandler(object):
class MemberHandler(object):
def get(self, project, member_id):
- member = Person.query.get(member_id)
+ member = Person.query.get(member_id, project)
if not member or member.project != project:
return 404, "Not Found"
- return member
+ return 200, member
def list(self, project):
- return project.members
+ return 200, project.members
def add(self, project):
- form = MemberForm(csrf_enabled=False)
+ form = MemberForm(project, csrf_enabled=False)
if form.validate():
member = Person()
form.save(project, member)
db.session.commit()
- return 200, member.id
+ return 201, member.id
return 400, form.errors
def update(self, project, member_id):
- form = MemberForm(csrf_enabled=False)
+ form = MemberForm(project, csrf_enabled=False)
if form.validate():
member = Person.query.get(member_id, project)
form.save(project, member)
@@ -99,39 +99,41 @@ class BillHandler(object):
bill = Bill.query.get(project, bill_id)
if not bill:
return 404, "Not Found"
- return bill
+ return 200, bill
def list(self, project):
return project.get_bills().all()
def add(self, project):
- form = BillForm(csrf_enabled=False)
+ form = get_billform_for(project, True, csrf_enabled=False)
if form.validate():
bill = Bill()
- form.save(bill)
+ form.save(bill, project)
db.session.add(bill)
db.session.commit()
- return 200, bill.id
+ return 201, bill.id
return 400, form.errors
def update(self, project, bill_id):
- form = BillForm(csrf_enabled=False)
+ form = get_billform_for(project, True, csrf_enabled=False)
if form.validate():
- form.save(bill)
+ bill = Bill.query.get(project, bill_id)
+ form.save(bill, project)
db.session.commit()
return 200, bill.id
return 400, form.errors
def delete(self, project, bill_id):
bill = Bill.query.delete(project, bill_id)
+ db.session.commit()
if not bill:
return 404, "Not Found"
- return bill
+ return 200, "OK"
project_resource = RESTResource(
name="project",
- route="/project",
+ route="/projects",
app=api,
actions=["add", "update", "delete", "get"],
handler=ProjectHandler())
@@ -139,7 +141,7 @@ project_resource = RESTResource(
member_resource = RESTResource(
name="member",
inject_name="project",
- route="/project/<project_id>/members",
+ route="/projects/<project_id>/members",
app=api,
handler=MemberHandler(),
authentifier=check_project)
@@ -147,7 +149,7 @@ member_resource = RESTResource(
bill_resource = RESTResource(
name="bill",
inject_name="project",
- route="/project/<project_id>/bills",
+ route="/projects/<project_id>/bills",
app=api,
handler=BillHandler(),
authentifier=check_project)