Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified __pycache__/config.cpython-36.pyc
Binary file not shown.
2 changes: 2 additions & 0 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from flask import Flask
from flask_caching import Cache
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_mail import Mail
Expand All @@ -17,6 +18,7 @@
login = LoginManager(app)
admin = Admin(app, name='pedagogy')
mail = Mail(app)
cache = Cache(app)

# let Flask-Login know which page (function name) handles login
login.login_view = 'login'
Expand Down
9 changes: 7 additions & 2 deletions app/analytics.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from flask import g
from flask_login import current_user
from app import app
from app import app, cache
from app.models import Employee, Workshop, Response
import altair as alt
from altair import expr, datum
Expand Down Expand Up @@ -57,6 +57,7 @@ def before_request():
g.accumtotal['cumsum'] = g.accumtotal['class_size'].cumsum()

@app.route('/data/class_size_vs')
@cache.cached(timeout=86400, key_prefix='cs_vs')
def class_size_vs():
brush = alt.selection(type='interval', encodings=['x'])
upper = alt.Chart(df[df['this_user'] == True]).mark_area(
Expand All @@ -83,6 +84,7 @@ def class_size_vs():
return chart.to_json()

@app.route('/data/class_size_hours')
@cache.cached(timeout=86400, key_prefix='cs_hours')
def class_size_hours():
chart = alt.Chart(g.user_melted).mark_bar().encode(
column='variable',
Expand All @@ -99,6 +101,7 @@ def class_size_hours():
return chart.to_json()

@app.route('/data/accum_global')
@cache.cached(timeout=86400, key_prefix='accum_g')
def accum_global():
chart = alt.Chart(g.accum).mark_area().encode(
column=alt.Column('workshop_category', title=None, sort="descending",
Expand All @@ -117,6 +120,7 @@ def accum_global():
return chart.to_json()

@app.route('/data/accum_global_line')
@cache.cached(timeout=86400, key_prefix='gt_line')
def accum_global_line():
brush = alt.selection(type='interval', encodings=['x'])
# Create a selection that chooses the nearest point & selects based on x-value
Expand Down Expand Up @@ -207,6 +211,7 @@ def category_bars():
return chart.to_json()

@app.route('/data/instructor_breakdown')
@cache.cached(timeout=86400, key_prefix='ib')
def instructor_breakdown():
# Getting Responses Data
q = """ SELECT response.*, workshop_category, name
Expand Down Expand Up @@ -318,7 +323,7 @@ def studentprof():
# ================ Non-Chart Section ================
# Return Stats, usually in the form of Dictionary
# ===================================================

@cache.cached(timeout=86400, key_prefix='gt_stats')
def global_total_stats():
stats = {
'students': df['class_size'].sum(),
Expand Down
3 changes: 2 additions & 1 deletion app/routes.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from flask import render_template, flash, redirect, url_for, g
from flask_login import current_user, login_user, logout_user, login_required
from app import app, db
from app import app, db, cache
from app.analytics import global_total_stats, person_total_stats
from app.users import User
from app.models import Employee, Workshop, Response
Expand Down Expand Up @@ -35,6 +35,7 @@ def accomplishment():

@app.route('/analytics')
@login_required
@cache.cached(timeout=86400*7)
def analytics():
return render_template('analytics.html')

Expand Down
3 changes: 2 additions & 1 deletion app/templates/accomplishment.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{% extends "base.html" %}

{% block content %}
{% cache 43200 %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vega/3.3.1/vega.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vega-lite/2.6.0/vega-lite.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vega-embed/3.20.0/vega-embed.min.js"></script>
Expand Down Expand Up @@ -146,5 +147,5 @@ <h4><i class="material-icons md-light">rate_review</i> Most Recent Reviews</h4>
parse("/data/class_size_hours", "#vis_accomp_2")
parse("/data/accum_personal", "#vis_accomp_3")
</script>

{% endcache %}
{% endblock %}
4 changes: 3 additions & 1 deletion config.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
class Config():
SECRET_KEY = os.environ.get('SECRET_KEY') or 'l3arn2t3ach'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
FLASK_DEBUG = 0
FLASK_DEBUG = 1
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False
SQLALCHEMY_RECORD_QUERIES = False
Expand All @@ -28,4 +28,6 @@ class Config():
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
ADMINS = ['samuel@algorit.ma']
CACHE_TYPE = 'simple'
CACHE_DEFAULT_TIMEOUT = 86400 # 24 hours

3 changes: 2 additions & 1 deletion environment.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: pedagogy
channels:
- conda-forge
- anaconda
- conda-forge
- defaults
dependencies:
- appnope=0.1.0=py36hf537a9a_0
Expand Down Expand Up @@ -52,6 +52,7 @@ dependencies:
- entrypoints=0.2.3=py36_2
- flask=1.0.2=py_1
- flask-admin=1.5.3=py_0
- flask-caching=1.6.0=py_0
- flask-mail=0.9.1=py_2
- flask-migrate=2.2.1=py36_0
- flask-sqlalchemy=2.3.2=py_0
Expand Down
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# pip freeze > requirements.txt
alembic==0.9.9
altair==2.2.2
appnope==0.1.0
Expand All @@ -15,6 +16,7 @@ decorator==4.3.0
entrypoints==0.2.3
Flask==1.0.2
Flask-Admin==1.5.3
Flask-Caching==1.6.0
Flask-Login==0.4.1
Flask-Mail==0.9.1
Flask-Migrate==2.2.1
Expand Down