diff options
author | René 'Necoro' Neumann <necoro@necoro.net> | 2013-10-14 23:50:27 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.net> | 2013-10-14 23:50:27 +0200 |
commit | dbb134751c3a87cf203cd243b1952b146b8914c1 (patch) | |
tree | cb34abe63bd1e3f95a4616b4a20a7528380014f1 /app/model.py | |
parent | a628fd3084e94959dc29c86912f2a2e97038799c (diff) | |
download | kosten-dbb134751c3a87cf203cd243b1952b146b8914c1.tar.gz kosten-dbb134751c3a87cf203cd243b1952b146b8914c1.tar.bz2 kosten-dbb134751c3a87cf203cd243b1952b146b8914c1.zip |
Finish login stuff
Diffstat (limited to 'app/model.py')
-rw-r--r-- | app/model.py | 55 |
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 |