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

Reply via email to