aboutsummaryrefslogtreecommitdiff
path: root/budget/api.py
diff options
context:
space:
mode:
authorAlexis Metaireau <alexis@notmyidea.org>2017-07-07 00:06:56 +0200
committerGitHub <noreply@github.com>2017-07-07 00:06:56 +0200
commit3a4282fd75e3b3317b2b08b4aa2e6ac154310e73 (patch)
tree9470c907ba1f884246af87d26d55c3aaac6d6dc5 /budget/api.py
parent0e374cd5e0ef5a9be67084365f91de2ab84f636c (diff)
downloadihatemoney-mirror-3a4282fd75e3b3317b2b08b4aa2e6ac154310e73.zip
ihatemoney-mirror-3a4282fd75e3b3317b2b08b4aa2e6ac154310e73.tar.gz
ihatemoney-mirror-3a4282fd75e3b3317b2b08b4aa2e6ac154310e73.tar.bz2
Absolute imports & some other improvements (#243)
* Use absolute imports and rename package to ihatemoney * Add a ihatemoney command * Factorize application creation logic * Refactor the tests * Update the wsgi.py module with the new create_app() function * Fix some styling thanks to Flake8. * Automate Flake8 check in the CI.
Diffstat (limited to 'budget/api.py')
-rw-r--r--budget/api.py154
1 files changed, 0 insertions, 154 deletions
diff --git a/budget/api.py b/budget/api.py
deleted file mode 100644
index 7ce6a34..0000000
--- a/budget/api.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# -*- coding: utf-8 -*-
-from flask import Blueprint, request
-from flask_rest import RESTResource, need_auth
-
-from .models import db, Project, Person, Bill
-from .forms import (ProjectForm, EditProjectForm, MemberForm,
- get_billform_for)
-
-
-api = Blueprint("api", __name__, url_prefix="/api")
-
-
-def check_project(*args, **kwargs):
- """Check the request for basic authentication for a given project.
-
- Return the project if the authorization is good, False otherwise
- """
- auth = request.authorization
-
- # project_id should be contained in kwargs and equal to the username
- if auth and "project_id" in kwargs and \
- auth.username == kwargs["project_id"]:
- project = Project.query.get(auth.username)
- if project and project.password == auth.password:
- return project
- return False
-
-
-class ProjectHandler(object):
-
- def add(self):
- form = ProjectForm(meta={'csrf': False})
- if form.validate():
- project = form.save()
- db.session.add(project)
- db.session.commit()
- return 201, project.id
- return 400, form.errors
-
- @need_auth(check_project, "project")
- def get(self, project):
- return 200, project
-
- @need_auth(check_project, "project")
- def delete(self, project):
- db.session.delete(project)
- db.session.commit()
- return 200, "DELETED"
-
- @need_auth(check_project, "project")
- def update(self, project):
- form = EditProjectForm(meta={'csrf': False})
- if form.validate():
- form.update(project)
- db.session.commit()
- return 200, "UPDATED"
- return 400, form.errors
-
-
-class MemberHandler(object):
-
- def get(self, project, member_id):
- member = Person.query.get(member_id, project)
- if not member or member.project != project:
- return 404, "Not Found"
- return 200, member
-
- def list(self, project):
- return 200, project.members
-
- def add(self, project):
- form = MemberForm(project, meta={'csrf': False})
- if form.validate():
- member = Person()
- form.save(project, member)
- db.session.commit()
- return 201, member.id
- return 400, form.errors
-
- def update(self, project, member_id):
- form = MemberForm(project, meta={'csrf': False})
- if form.validate():
- member = Person.query.get(member_id, project)
- form.save(project, member)
- db.session.commit()
- return 200, member
- return 400, form.errors
-
- def delete(self, project, member_id):
- if project.remove_member(member_id):
- return 200, "OK"
- return 404, "Not Found"
-
-
-class BillHandler(object):
-
- def get(self, project, bill_id):
- bill = Bill.query.get(project, bill_id)
- if not bill:
- return 404, "Not Found"
- return 200, bill
-
- def list(self, project):
- return project.get_bills().all()
-
- def add(self, project):
- form = get_billform_for(project, True, meta={'csrf': False})
- if form.validate():
- bill = Bill()
- form.save(bill, project)
- db.session.add(bill)
- db.session.commit()
- return 201, bill.id
- return 400, form.errors
-
- def update(self, project, bill_id):
- form = get_billform_for(project, True, meta={'csrf': False})
- if form.validate():
- 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 200, "OK"
-
-
-project_resource = RESTResource(
- name="project",
- route="/projects",
- app=api,
- actions=["add", "update", "delete", "get"],
- handler=ProjectHandler())
-
-member_resource = RESTResource(
- name="member",
- inject_name="project",
- route="/projects/<project_id>/members",
- app=api,
- handler=MemberHandler(),
- authentifier=check_project)
-
-bill_resource = RESTResource(
- name="bill",
- inject_name="project",
- route="/projects/<project_id>/bills",
- app=api,
- handler=BillHandler(),
- authentifier=check_project)