From 90e314801666de75335c5d6dd35a50571b765f61 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 14 Oct 2013 21:05:08 +0200 Subject: Add User to model --- app/model.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'app/model.py') diff --git a/app/model.py b/app/model.py index 92b3710..28de237 100644 --- a/app/model.py +++ b/app/model.py @@ -2,6 +2,8 @@ from flask.ext.sqlalchemy import SQLAlchemy from sqlalchemy import sql from sqlalchemy.ext.declarative import declared_attr +from passlib.apps import custom_app_context as pwd_context + import datetime import decimal from functools import partial @@ -13,7 +15,8 @@ db = SQLAlchemy(app) __all__ = ["db", "Category", "SingleExpense", "ConstExpense", "CatExpense", "MonthExpense"] -ReqColumn = partial(db.Column, nullable = False) +Column = db.Column +ReqColumn = partial(Column, nullable = False) ExpNum = db.Numeric(scale = 2, precision = 10) def to_exp(d): @@ -25,7 +28,7 @@ def to_exp(d): class Model (db.Model): __abstract__ = True - id = db.Column(db.Integer, primary_key=True) + id = Column(db.Integer, primary_key=True) @declared_attr def __tablename__ (cls): @@ -47,9 +50,18 @@ class Model (db.Model): def get_or_404 (cls, *args, **kwargs): return cls.query.get_or_404(*args, **kwargs) +class User (Model): + name = ReqColumn(db.Unicode(50), unique = True) + pwd = ReqColumn(db.Unicode(255)) + alias = Column(db.Unicode(50)) + + def check_password(self, pwd): + return pwd_context.verify(pwd, self.pwd) + class Category (Model): name = ReqColumn(db.Unicode(50), unique = True) - parent_id = db.Column(db.Integer, db.ForeignKey('category.id')) + user_id = Column(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")) @@ -68,9 +80,13 @@ class Category (Model): class Expense (Model): __abstract__ = True - description = db.Column(db.Unicode(50)) + description = Column(db.Unicode(50)) expense = ReqColumn(ExpNum) + @declared_attr + def user_id(cls): + return ReqColumn(db.Integer, db.ForeignKey(User.id)) + @declared_attr def category_id(cls): return ReqColumn(db.Integer, db.ForeignKey(Category.id)) @@ -85,10 +101,11 @@ class SingleExpense (Expense): day = ReqColumn(db.SmallInteger) @classmethod - def of_month (cls, month, year): - comp = sql.and_( + def of_month (cls, user, month, year): + comp = sql.and_(cls.user == user, + sql.and_( cls.month == month, - cls.year == year) + cls.year == year)) return cls.query.filter(comp) @@ -106,7 +123,7 @@ class ConstExpense (Expense): months = ReqColumn(db.SmallInteger) start = ReqColumn(db.Date, index = True) end = ReqColumn(db.Date, index = True) - prev_id = db.Column(db.Integer, db.ForeignKey('constexpense.id')) + prev_id = Column(db.Integer, db.ForeignKey('constexpense.id')) prev = db.relationship('ConstExpense', remote_side = "ConstExpense.id", uselist = False, backref=db.backref('next', uselist = False)) -- cgit v1.2.3-54-g00ecf