aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney
diff options
context:
space:
mode:
authorByron Ullauri <Ullauri.Byron@gmail.com>2018-12-26 13:07:09 -0500
committerAlexis Metaireau <alexis@notmyidea.org>2018-12-26 19:07:09 +0100
commit7cb339c0bb8aacaeae47838a68c7af60cf414618 (patch)
tree9b404ea1b24d27af890daf26ecaa4604ac925678 /ihatemoney
parent620596e32cbacac62d79d1a9f82cd57136b95b52 (diff)
downloadihatemoney-mirror-7cb339c0bb8aacaeae47838a68c7af60cf414618.zip
ihatemoney-mirror-7cb339c0bb8aacaeae47838a68c7af60cf414618.tar.gz
ihatemoney-mirror-7cb339c0bb8aacaeae47838a68c7af60cf414618.tar.bz2
Resolve "Update API project list" (#409)
* refactoring models _to_serialize property * updated project api members list * addressing flake8: line too long
Diffstat (limited to 'ihatemoney')
-rw-r--r--ihatemoney/models.py48
-rw-r--r--ihatemoney/tests/tests.py25
-rw-r--r--ihatemoney/utils.py6
3 files changed, 47 insertions, 32 deletions
diff --git a/ihatemoney/models.py b/ihatemoney/models.py
index 9e9fbeb..3c36e76 100644
--- a/ihatemoney/models.py
+++ b/ihatemoney/models.py
@@ -13,11 +13,6 @@ db = SQLAlchemy()
class Project(db.Model):
- _to_serialize = (
- "id", "name", "contact_email", "members", "active_members",
- "balance"
- )
-
id = db.Column(db.String(64), primary_key=True)
name = db.Column(db.UnicodeText)
@@ -26,6 +21,23 @@ class Project(db.Model):
members = db.relationship("Person", backref="project")
@property
+ def _to_serialize(self):
+ obj = {
+ "id": self.id,
+ "name": self.name,
+ "contact_email": self.contact_email,
+ "members": [],
+ }
+
+ balance = self.balance
+ for member in self.members:
+ member_obj = member._to_serialize
+ member_obj['balance'] = balance.get(member.id, 0)
+ obj['members'].append(member_obj)
+
+ return obj
+
+ @property
def active_members(self):
return [m for m in self.members if m.activated]
@@ -276,8 +288,6 @@ class Person(db.Model):
query_class = PersonQuery
- _to_serialize = ("id", "name", "weight", "activated")
-
id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.String(64), db.ForeignKey("project.id"))
bills = db.relationship("Bill", backref="payer")
@@ -286,6 +296,15 @@ class Person(db.Model):
weight = db.Column(db.Float, default=1)
activated = db.Column(db.Boolean, default=True)
+ @property
+ def _to_serialize(self):
+ return {
+ "id": self.id,
+ "name": self.name,
+ "weight": self.weight,
+ "activated": self.activated,
+ }
+
def has_bills(self):
"""return if the user do have bills or not"""
bills_as_ower_number = db.session.query(billowers)\
@@ -330,9 +349,6 @@ class Bill(db.Model):
query_class = BillQuery
- _to_serialize = ("id", "payer_id", "owers", "amount", "date",
- "creation_date", "what")
-
id = db.Column(db.Integer, primary_key=True)
payer_id = db.Column(db.Integer, db.ForeignKey("person.id"))
@@ -345,6 +361,18 @@ class Bill(db.Model):
archive = db.Column(db.Integer, db.ForeignKey("archive.id"))
+ @property
+ def _to_serialize(self):
+ return {
+ "id": self.id,
+ "payer_id": self.payer_id,
+ "owers": self.owers,
+ "amount": self.amount,
+ "date": self.date,
+ "creation_date": self.creation_date,
+ "what": self.what,
+ }
+
def pay_each(self):
"""Compute what each share has to pay"""
if self.owers:
diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py
index 17b3a8d..2f3d4ac 100644
--- a/ihatemoney/tests/tests.py
+++ b/ihatemoney/tests/tests.py
@@ -1084,12 +1084,10 @@ class APITestCase(IhatemoneyTestCase):
self.assertTrue(200, resp.status_code)
expected = {
- "active_members": [],
+ "members": [],
"name": "raclette",
"contact_email": "raclette@notmyidea.org",
- "members": [],
"id": "raclette",
- "balance": {},
}
decoded_resp = json.loads(resp.data.decode('utf-8'))
self.assertDictEqual(decoded_resp, expected)
@@ -1108,12 +1106,10 @@ class APITestCase(IhatemoneyTestCase):
self.assertEqual(200, resp.status_code)
expected = {
- "active_members": [],
"name": "The raclette party",
"contact_email": "yeah@notmyidea.org",
"members": [],
"id": "raclette",
- "balance": {},
}
decoded_resp = json.loads(resp.data.decode('utf-8'))
self.assertDictEqual(decoded_resp, expected)
@@ -1449,21 +1445,16 @@ class APITestCase(IhatemoneyTestCase):
headers=self.get_auth("raclette"))
expected = {
- "active_members": [
- {"activated": True, "id": 1, "name": "alexis", "weight": 1.0},
- {"activated": True, "id": 2, "name": "freddy familly", "weight": 4.0},
- {"activated": True, "id": 3, "name": "arnaud", "weight": 1.0}
+ "members": [
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1.0, "balance": 20.0},
+ {"activated": True, "id": 2, "name": "freddy familly", "weight": 4.0,
+ "balance": -20.0},
+ {"activated": True, "id": 3, "name": "arnaud", "weight": 1.0, "balance": 0},
],
- "balance": {"1": 20.0, "2": -20.0, "3": 0},
"contact_email": "raclette@notmyidea.org",
"id": "raclette",
-
- "members": [
- {"activated": True, "id": 1, "name": "alexis", "weight": 1.0},
- {"activated": True, "id": 2, "name": "freddy familly", "weight": 4.0},
- {"activated": True, "id": 3, "name": "arnaud", "weight": 1.0}
- ],
- "name": "raclette"}
+ "name": "raclette",
+ }
self.assertStatus(200, req)
decoded_req = json.loads(req.data.decode('utf-8'))
diff --git a/ihatemoney/utils.py b/ihatemoney/utils.py
index 19340df..ec22834 100644
--- a/ihatemoney/utils.py
+++ b/ihatemoney/utils.py
@@ -192,11 +192,7 @@ class IhmJSONEncoder(JSONEncoder):
Taken from the deprecated flask-rest package."""
def default(self, o):
if hasattr(o, "_to_serialize"):
- # build up the object
- data = {}
- for attr in o._to_serialize:
- data[attr] = getattr(o, attr)
- return data
+ return o._to_serialize
elif hasattr(o, "isoformat"):
return o.isoformat()
else: