1
# -*- coding utf-8 -*-
2
# User Management::User
3
4
from datetime import datetime
5
from flask import session
6
from hashlib import md5
7
8
from .config import db
9
10
class User(db.Model):
11
    """ docstring """
12
13
    __tablename__ = 'users'
14
15
    id = db.Column(db.Integer, primary_key=True)
16
    username = db.Column(db.String(80))
17
    email = db.Column(db.String(120), unique=True)
18
    created = db.Column(db.DateTime, default=datetime.utcnow)
19
    last_active = db.Column(db.DateTime, default=datetime.utcnow)
20
21
    def __init__(self, username, email):
22
        self.username = username
23
        self.email = email
24
25
    def update(self, **kwargs):
26
        if kwargs.get('username'):
27
            self.username = kwargs.get('username')
28
        if kwargs.get('last_active'):
29
            print 'Updated last_active timestamp for user %s' % self
30
            self.last_active = kwargs.get('last_active')
31
32
        self.persist()
33
34
    # persist current object in the database
35
    def persist(self):
36
        db.session.add(self)
37
        db.session.commit()
38
39
    # delete from database
40
    def remove(self):
41
        db.session.delete(self)
42
        db.session.commit()
43
44
    @staticmethod
45
    def getCurrentUser():
46
        if 'email' in session:
47
            user = User.query.filter_by(email=session['email']).first()
48
            user.update(last_active=datetime.utcnow())
49
            return user
50
        return None
51
52
    @staticmethod
53
    def getByName(username):
54
        return User.query.filter_by(username=username).first()
55
56
    def to_dict(self):
57
        return {
58
            'id': self.id,
59
            'username': self.username,
60
            'email': self.email,
61
            'created': self.created.isoformat(),
62
            'last_active': self.last_active.isoformat()
63
        }
64
65
    def __repr__(self):
66
        return '<User:: %r %r>' % (self.username, self.email)