summaryrefslogtreecommitdiff
path: root/app/model.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/model.py55
1 files changed, 39 insertions, 16 deletions
diff --git a/app/model.py b/app/model.py
index 414cfd0..ebf3d5b 100644
--- a/app/model.py
+++ b/app/model.py
@@ -58,17 +58,45 @@ class User (Model):
def check_password(self, pwd):
return pwd_context.verify(pwd, self.pwd)
-class Category (Model):
+ # Stuff needed for LoginManager
+ def is_authenticated(self):
+ return True
+
+ def is_active(self):
+ return True
+
+ def is_anonymous(self):
+ return False
+
+ def get_id(self):
+ return unicode(self.id)
+
+class UserModel (Model):
+ __abstract__ = True
+
+ @declared_attr
+ def user_id(cls):
+ return ReqColumn(db.Integer, db.ForeignKey(User.id))
+
+ @declared_attr
+ def user(cls):
+ return db.relationship('User')
+
+ @classmethod
+ def of (cls, user):
+ return cls.query.filter_by(user = user)
+
+class Category (UserModel):
name = ReqColumn(db.Unicode(50), unique = True)
- user_id = ReqColumn(db.Integer, db.ForeignKey(User.id))
parent_id = Column(db.Integer, db.ForeignKey('category.id'))
children = db.relationship('Category',
backref=db.backref('parent', remote_side="Category.id"))
- def __init__ (self, name, parent_id = None):
+ def __init__ (self, name, user, parent_id = None):
Model.__init__(self)
self.name = name
+ self.user = user
self.parent_id = parent_id
def __repr__ (self):
@@ -77,7 +105,7 @@ class Category (Model):
else:
return '<Category "%s">' % self.name
-class Expense (Model):
+class Expense (UserModel):
__abstract__ = True
description = Column(db.Unicode(50))
@@ -102,12 +130,7 @@ class SingleExpense (Expense):
@classmethod
def of_month (cls, user, month, year):
- comp = sql.and_(cls.user == user,
- sql.and_(
- cls.month == month,
- cls.year == year))
-
- return cls.query.filter(comp)
+ return cls.of(user).filter_by(month = month, year = year)
@property
def date (self):
@@ -133,9 +156,9 @@ class ConstExpense (Expense):
return to_exp(self.expense / self.months)
@classmethod
- def of_month (cls, month, year):
+ def of_month (cls, user, month, year):
d = datetime.date(year, month, 1)
- return cls.query.filter(sql.between(d, cls.start, cls.end))
+ return cls.of(user).filter(sql.between(d, cls.start, cls.end))
#
# Work entities (not stored in DB)
@@ -147,7 +170,7 @@ class CatExpense (namedtuple('CatExpense', 'cat expense exps')):
def all (self):
return self.exps.order_by(SingleExpense.day).all()
-class MonthExpense (namedtuple('MonthExpense', 'date catexps')):
+class MonthExpense (namedtuple('MonthExpense', 'user date catexps')):
def __init__ (self, *args, **kwargs):
self._consts = None
@@ -156,7 +179,7 @@ class MonthExpense (namedtuple('MonthExpense', 'date catexps')):
@property
def consts (self):
if self._consts is None:
- self._consts = ConstExpense.of_month(self.date.month, self.date.year).all()
+ self._consts = ConstExpense.of_month(self.user, self.date.month, self.date.year).all()
return self._consts
@@ -171,10 +194,10 @@ class MonthExpense (namedtuple('MonthExpense', 'date catexps')):
@property
def all (self):
- return SingleExpense.of_month(self.date.month, self.date.year).order_by(SingleExpense.day).all()
+ return SingleExpense.of_month(self.user, self.date.month, self.date.year).order_by(SingleExpense.day).all()
def __str__ (self):
- return '<MonthExpense of "%s": %s>' % (self.date, self.sum)
+ return '<MonthExpense (user: %s) of "%s": %s>' % (self.user.name, self.date, self.sum)
#
# Extra indizes have to be here