]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/model/expenditure.py
Normalized the implementation of tags
[bluechips.git] / bluechips / model / expenditure.py
index 6b3b1cb242c6c1e4ecd4de1fef70e537870cc3b6..d732fbe18328c9d6b909bbb52635f0f1775b6033 100644 (file)
@@ -1,8 +1,10 @@
+from sqlalchemy.ext.associationproxy import association_proxy
+
 from bluechips.model.user import User
 from bluechips.model.split import Split
 from bluechips.model import meta
 from bluechips.model.types import Currency
 from bluechips.model.user import User
 from bluechips.model.split import Split
 from bluechips.model import meta
 from bluechips.model.types import Currency
-from bluechips.model.tag import Tag
+from bluechips.model.tag import create_tag
 from decimal import Decimal
 from datetime import datetime
 import random
 from decimal import Decimal
 from datetime import datetime
 import random
@@ -16,6 +18,8 @@ class Expenditure(object):
         if self.date == None:
             self.date = datetime.now()
     
         if self.date == None:
             self.date = datetime.now()
     
+    tags = association_proxy('_tags', 'name', creator=create_tag)
+
     def __repr__(self):
         return '<Expenditure: spender: %s spent: %s>' % (self.spender,
                                                          self.amount)
     def __repr__(self):
         return '<Expenditure: spender: %s spent: %s>' % (self.spender,
                                                          self.amount)
@@ -75,14 +79,6 @@ class Expenditure(object):
             s = Split(self, user, share, split_text_dict[user])
             meta.Session.add(s)
 
             s = Split(self, user, share, split_text_dict[user])
             meta.Session.add(s)
 
-    def tag(self, tags):
-        map(meta.Session.delete,
-            meta.Session.query(Tag).filter_by(expenditure_id=self.id))
-
-        for tag in tags:
-            t = Tag(self, tag)
-            meta.Session.add(t)
-
     def involves(self, user):
         "Returns True if ``user`` is involved in this expenditure."
         return (any((split.user == user) and (split.share != 0)
     def involves(self, user):
         "Returns True if ``user`` is involved in this expenditure."
         return (any((split.user == user) and (split.share != 0)