73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
from datetime import datetime
|
|
from flask import session, g
|
|
|
|
import settings
|
|
from wowfunding.factory import app, db_session, summary_data
|
|
from wowfunding.orm.orm import Proposal, User
|
|
|
|
|
|
@app.context_processor
|
|
def templating():
|
|
global summary_data
|
|
from flask.ext.login import current_user
|
|
return dict(logged_in=current_user.is_authenticated,
|
|
current_user=current_user,
|
|
funding_categories=settings.FUNDING_CATEGORIES,
|
|
funding_statuses=settings.FUNDING_STATUSES,
|
|
summary_data=summary_data[1])
|
|
|
|
|
|
def fetch_summary(purge=False):
|
|
global summary_data
|
|
if summary_data and not purge:
|
|
if (datetime.now() - summary_data[0]).total_seconds() <= 120:
|
|
return
|
|
|
|
data = {}
|
|
categories = settings.FUNDING_CATEGORIES
|
|
statuses = settings.FUNDING_STATUSES.keys()
|
|
|
|
for cat in categories:
|
|
q = db_session.query(Proposal)
|
|
q = q.filter(Proposal.category == cat)
|
|
res = q.count()
|
|
data.setdefault('cats', {})
|
|
data['cats'][cat] = res
|
|
|
|
for status in statuses:
|
|
q = db_session.query(Proposal)
|
|
q = q.filter(Proposal.status == status)
|
|
res = q.count()
|
|
data.setdefault('statuses', {})
|
|
data['statuses'][status] = res
|
|
|
|
data.setdefault('users', {})
|
|
data['users']['count'] = db_session.query(User.id).count()
|
|
summary_data = [datetime.now(), data]
|
|
|
|
|
|
@app.before_request
|
|
def before_request():
|
|
fetch_summary()
|
|
|
|
|
|
@app.after_request
|
|
def after_request(res):
|
|
res.headers.add('Accept-Ranges', 'bytes')
|
|
if settings.DEBUG:
|
|
res.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
|
|
res.headers['Pragma'] = 'no-cache'
|
|
res.headers['Expires'] = '0'
|
|
res.headers['Cache-Control'] = 'public, max-age=0'
|
|
return res
|
|
|
|
|
|
@app.teardown_appcontext
|
|
def shutdown_session(**kwargs):
|
|
db_session.remove()
|
|
|
|
|
|
@app.errorhandler(404)
|
|
def error(err):
|
|
return 'Error', 404
|