From d2e2260e522cf4b7de24dbb2adbb3bfb12ee01f3 Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Tue, 13 Sep 2011 11:27:36 +0200 Subject: Add a serialization mechanism --- budget/models.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'budget/models.py') diff --git a/budget/models.py b/budget/models.py index 8feaccb..8d68746 100644 --- a/budget/models.py +++ b/budget/models.py @@ -7,6 +7,10 @@ db = SQLAlchemy() # define models class Project(db.Model): + + _to_serialize = ("id", "name", "password", "contact_email", + "members", "active_members") + id = db.Column(db.String, primary_key=True) name = db.Column(db.UnicodeText) @@ -68,6 +72,9 @@ class Project(db.Model): class Person(db.Model): + + _to_serialize = ("id", "name", "activated") + id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey("project.id")) bills = db.relationship("Bill", backref="payer") -- cgit v1.1 From e13ceaf351d4b54dd2bc651d9f4385a8188b7418 Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Tue, 13 Sep 2011 18:15:07 +0200 Subject: REST API is now able to list stuff \o/ --- budget/models.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'budget/models.py') diff --git a/budget/models.py b/budget/models.py index 8d68746..e56ae4e 100644 --- a/budget/models.py +++ b/budget/models.py @@ -3,6 +3,8 @@ from collections import defaultdict from datetime import datetime from flaskext.sqlalchemy import SQLAlchemy +from sqlalchemy import orm + db = SQLAlchemy() # define models @@ -103,6 +105,29 @@ billowers = db.Table('billowers', ) class Bill(db.Model): + + class BillQuery(orm.query.Query): + + def get(self, project, id): + try: + return self.join(Person, Project)\ + .filter(Bill.payer_id == Person.id)\ + .filter(Person.project_id == Project.id)\ + .filter(Project.id == project.id)\ + .filter(Bill.id == id).one() + except orm.exc.NoResultFound: + return None + + def delete(self, project, id): + bill = self.get(project, id) + if bill: + db.session.delete(bill) + return bill + + query_class = BillQuery + + _to_serialize = ("id", "payer_id", "owers", "amount", "date", "what") + id = db.Column(db.Integer, primary_key=True) payer_id = db.Column(db.Integer, db.ForeignKey("person.id")) @@ -122,7 +147,6 @@ class Bill(db.Model): return "" % (self.amount, self.payer, ", ".join([o.name for o in self.owers])) - class Archive(db.Model): id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey("project.id")) @@ -138,3 +162,4 @@ class Archive(db.Model): def __repr__(self): return "" + -- cgit v1.1 From b0d41291afade8aec86502d07d1d29d000ff1bca Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Tue, 13 Sep 2011 22:58:53 +0200 Subject: API: Create and Update support --- budget/models.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'budget/models.py') diff --git a/budget/models.py b/budget/models.py index e56ae4e..5ee7b07 100644 --- a/budget/models.py +++ b/budget/models.py @@ -1,7 +1,8 @@ from collections import defaultdict from datetime import datetime -from flaskext.sqlalchemy import SQLAlchemy +from flaskext.sqlalchemy import SQLAlchemy, BaseQuery +from flask import g from sqlalchemy import orm @@ -75,6 +76,20 @@ class Project(db.Model): class Person(db.Model): + class PersonQuery(BaseQuery): + def get_by_name(self, name, project): + return Person.query.filter(Person.name == name)\ + .filter(Project.id == project.id).one() + + def get(self, id, project=None): + if not project: + project = g.project + return Person.query.filter(Person.id == id)\ + .filter(Project.id == project.id).one() + + + query_class = PersonQuery + _to_serialize = ("id", "name", "activated") id = db.Column(db.Integer, primary_key=True) @@ -106,7 +121,7 @@ billowers = db.Table('billowers', class Bill(db.Model): - class BillQuery(orm.query.Query): + class BillQuery(BaseQuery): def get(self, project, id): try: -- cgit v1.1