Commit e432b39ffc7d1d465d443db00be12fe16a34f073
Changes to user class and config to pass db
- This module being a module which will the use the host application's
database directly, a config file deviced to pass in the SQLAlchemy db
object from the host application. config.py is gitignored, a sample_config.py
is provided.
- Changes to user class
| | | | 1 | from user import User | 1 | from user import User |
---|
2 | from group import Group | 2 | from group import Group |
---|
3 | from membership import Membership | 3 | from membership import Membership |
---|
4 | | | |
---|
5 | from flask import g | | from flask import g |
---|
6 | | | |
---|
7 | def setup_app(app): | | def setup_app(app): |
---|
8 | db = app.db | | db = app.db |
---|
9 | g.db = db | | g.db = db |
---|
| | | | 6 | | 6 | |
---|
7 | from datetime import datetime | 7 | from datetime import datetime |
---|
8 | | 8 | |
---|
| | 9 | from .config import db |
---|
| | 10 | |
---|
9 | class Group(db.Model): | 11 | class Group(db.Model): |
---|
10 | """ | 12 | """ |
---|
11 | docstring | 13 | docstring |
---|
… | | … | |
---|
19 | created = db.Column(db.DateTime, default=datetime.utcnow) | 19 | created = db.Column(db.DateTime, default=datetime.utcnow) |
---|
20 | created_by = db.Column(db.Integer, db.ForeignKey('users.id')) | 20 | created_by = db.Column(db.Integer, db.ForeignKey('users.id')) |
---|
21 | | 21 | |
---|
22 | creator = db.relationship('User', backref='groups', lazy='dynamic') | | creator = db.relationship('User', backref='groups', lazy='dynamic') |
---|
| | 22 | creator = db.relationship('User', backref='groups') | 23 | | 23 | |
---|
24 | def __init__(self, name, creator): | 24 | def __init__(self, name, creator): |
---|
25 | self.name = name | 25 | self.name = name |
---|
| | | | 3 | | 3 | |
---|
4 | from datetime import datetime | 4 | from datetime import datetime |
---|
5 | | 5 | |
---|
| | 6 | from .config import db |
---|
| | 7 | |
---|
6 | class Membership(db.Model): | 8 | class Membership(db.Model): |
---|
7 | """ docstring """ | 9 | """ docstring """ |
---|
8 | | 10 | |
---|
… | | … | |
---|
15 | gid = db.Column(db.Integer, db.ForeignKey('groups.id')) | 15 | gid = db.Column(db.Integer, db.ForeignKey('groups.id')) |
---|
16 | created = db.Column(db.DateTime, default=datetime.utcnow) | 16 | created = db.Column(db.DateTime, default=datetime.utcnow) |
---|
17 | | 17 | |
---|
18 | user = db.relationship('User', backref='memberships', lazy='dynamic') | | user = db.relationship('User', backref='memberships', lazy='dynamic') |
---|
19 | group = db.relationship('Group', backref='memberships', lazy='dynamic') | | group = db.relationship('Group', backref='memberships', lazy='dynamic') |
---|
| | 18 | user = db.relationship('User', backref='memberships') | | | 19 | group = db.relationship('Group', backref='memberships') |
---|
20 | | 20 | |
---|
21 | def __init__(self, user, group): | 21 | def __init__(self, user, group): |
---|
22 | self.user = user | 22 | self.user = user |
---|
| | | | | | 1 | # Copy the contents of this file to config.py |
---|
| | 2 | |
---|
| | 3 | # Import the SQLAlchemy database (db) object from your application |
---|
| | 4 | # the object which has he Model and Column classes |
---|
| | 5 | # Even if your application calls it something else, import it, and assign it to |
---|
| | 6 | # db: like: |
---|
| | 7 | # from yourapp import database |
---|
| | 8 | # db = database |
---|
| | 9 | |
---|
| | 10 | from yourapp import db |
---|
| | 11 | |
---|
| | 12 | # keep this line as it is..this passes the database object to the user |
---|
| | 13 | # management modules |
---|
| | 14 | __all__ = ['db'] |
---|
| | | | 2 | # User Management::User | 2 | # User Management::User |
---|
3 | | 3 | |
---|
4 | from datetime import datetime | 4 | from datetime import datetime |
---|
5 | from flask import current_app, g | | from flask import current_app, g |
---|
| | 5 | from flask import session | | | 6 | from hashlib import md5 |
---|
6 | | 7 | |
---|
| | 8 | from .config import db |
---|
7 | | 9 | |
---|
8 | db = g.db | | db = g.db |
---|
9 | | | |
---|
10 | | | |
---|
11 | class User(db.Model): | 10 | class User(db.Model): |
---|
12 | """ docstring """ | 11 | """ docstring """ |
---|
13 | | 12 | |
---|
… | | … | |
---|
22 | self.username = username | 22 | self.username = username |
---|
23 | self.email = email | 23 | self.email = email |
---|
24 | | 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 | |
---|
25 | # persist current object in the database | 34 | # persist current object in the database |
---|
26 | def persist(self): | 35 | def persist(self): |
---|
27 | db.session.add(self) | 36 | db.session.add(self) |
---|
… | | … | |
---|
41 | db.session.delete(self) | 41 | db.session.delete(self) |
---|
42 | db.session.commit() | 42 | db.session.commit() |
---|
43 | | 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 | def to_dict(self): |
---|
| | 53 | return { |
---|
| | 54 | 'id': self.id, |
---|
| | 55 | 'username': self.username, |
---|
| | 56 | 'email': self.email, |
---|
| | 57 | 'created': self.created.isoformat(), |
---|
| | 58 | 'last_active': self.last_active.isoformat() |
---|
| | 59 | } |
---|
| | 60 | |
---|
44 | def __repr__(self): | 61 | def __repr__(self): |
---|
45 | return '<User %r %r>' % (self.username, self.email) | | return '<User %r %r>' % (self.username, self.email) |
---|
| | 62 | return '<User:: %r %r>' % (self.username, self.email) |