Yuvipanda has uploaded a new change for review. https://gerrit.wikimedia.org/r/148595
Change subject: Add user model and populate it after login ...................................................................... Add user model and populate it after login - Uses id from wiki as user id, reduces pain - Puts user object in flask.g for every request. Does a database read now, should probably be cached at some point. - Build base Model class and Session with SQLAlchemy - Add 'createdb.py' to create database from scratch Change-Id: I632044d881fa82047517ca09539c0a81bcb35207 --- M quarry/web/__init__.py M quarry/web/app.py A quarry/web/createdb.py A quarry/web/models/__init__.py A quarry/web/models/db.py A quarry/web/models/user.py M quarry/web/templates/base.html M quarry/web/templates/landing.html 8 files changed, 59 insertions(+), 8 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/analytics/quarry/web refs/changes/95/148595/1 diff --git a/quarry/web/__init__.py b/quarry/web/__init__.py index cc348bc..e69de29 100644 --- a/quarry/web/__init__.py +++ b/quarry/web/__init__.py @@ -1 +0,0 @@ -__author__ = 'ypanda' diff --git a/quarry/web/app.py b/quarry/web/app.py index e7971b1..b4f5cea 100644 --- a/quarry/web/app.py +++ b/quarry/web/app.py @@ -1,7 +1,9 @@ import os -from flask import Flask, render_template +from flask import Flask, render_template, redirect, session, g from flask_mwoauth import MWOAuth +from models import db +from models.user import User app = Flask(__name__) @@ -14,6 +16,18 @@ app.register_blueprint(mwoauth.bp) +def get_user(): + if 'user_id' in session: + return db.session.query(User).filter_by(id=session['user_id']).first() + else: + return None + + [email protected]_request +def set_user(): + g.user = get_user() + + @app.route("/static/<path:path>") def static_proxy(path): return app.send_static_file(os.path.join('static', path)) @@ -21,14 +35,26 @@ @app.route("/") def index(): - user = mwoauth.get_current_user() - return render_template("landing.html", user=user) + return render_template("landing.html", user=g.user) + + [email protected]("/login/done") +def login_done(): + user_name = mwoauth.get_current_user() + user_info = mwoauth.request({'action': 'query', 'meta': 'userinfo'}) + wiki_id = user_info['query']['userinfo']['id'] + user = db.session.query(User).filter_by(id=wiki_id).first() + if user is None: + user = User(id=wiki_id, name=user_name) + db.session.add(user) + db.session.commit() + session['user_id'] = user.id + return redirect("/") @app.route("/query/new") def new_query(): - user = mwoauth.get_current_user() - return render_template("query/new.html", user=user) + return render_template("query/new.html", user=g.user) @app.route("/query/all") diff --git a/quarry/web/createdb.py b/quarry/web/createdb.py new file mode 100644 index 0000000..79ff558 --- /dev/null +++ b/quarry/web/createdb.py @@ -0,0 +1,4 @@ +from models import db +from models.user import User + +print(db.Model.metadata.create_all(db.engine)) diff --git a/quarry/web/models/__init__.py b/quarry/web/models/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/quarry/web/models/__init__.py diff --git a/quarry/web/models/db.py b/quarry/web/models/db.py new file mode 100644 index 0000000..7403747 --- /dev/null +++ b/quarry/web/models/db.py @@ -0,0 +1,9 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +Model = declarative_base() + +engine = create_engine('sqlite:////tmp/hello', echo=True) +Session = sessionmaker(engine) +session = Session() diff --git a/quarry/web/models/user.py b/quarry/web/models/user.py new file mode 100644 index 0000000..d428313 --- /dev/null +++ b/quarry/web/models/user.py @@ -0,0 +1,13 @@ +from sqlalchemy import Column, Integer, String +import db + + +class User(db.Model): + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + name = Column(String(255)) + + def __repr__(self): + return '<User(id=%d, name="%s")' % ( + self.id, self.name + ) diff --git a/quarry/web/templates/base.html b/quarry/web/templates/base.html index f8feb33..caf644f 100644 --- a/quarry/web/templates/base.html +++ b/quarry/web/templates/base.html @@ -35,7 +35,7 @@ <ul class="nav navbar-nav navbar-right"> {% if user %} <li class="dropdown"> - <a href="#" data-toggle="dropdown" class="dropdown-toggle">{{ user }} <span class="caret"></span></a> + <a href="#" data-toggle="dropdown" class="dropdown-toggle">{{ user.name }} <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li><a href="/logout">Log out</a></li> </ul> diff --git a/quarry/web/templates/landing.html b/quarry/web/templates/landing.html index b0dd03d..fd54867 100644 --- a/quarry/web/templates/landing.html +++ b/quarry/web/templates/landing.html @@ -9,7 +9,7 @@ {% if user %} <a class="btn btn-primary btn-lg" role="button" href="/query/new">New Query</a> {% else %} - <a class="btn btn-primary btn-lg" role="button" href="/login">Login via WikiTech</a> + <a class="btn btn-primary btn-lg" role="button" href="/login?next=/login/done">Login via WikiTech</a> {% endif %} </p> </div> -- To view, visit https://gerrit.wikimedia.org/r/148595 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I632044d881fa82047517ca09539c0a81bcb35207 Gerrit-PatchSet: 1 Gerrit-Project: analytics/quarry/web Gerrit-Branch: master Gerrit-Owner: Yuvipanda <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
