wownero-funding-system/wowfunding/bin/utils_request.py

75 lines
2.1 KiB
Python
Raw Normal View History

2018-06-26 22:48:25 +01:00
from datetime import datetime
from flask import session, g
import settings
from wowfunding.factory import app, db_session, summary_data
2018-07-10 00:14:16 +01:00
from wowfunding.orm.orm import Proposal, User, Comment
2018-06-26 22:48:25 +01:00
@app.context_processor
2018-07-04 15:04:19 +01:00
def templating():
2018-06-26 22:48:25 +01:00
global summary_data
2018-07-04 15:04:19 +01:00
from flask.ext.login import current_user
2018-07-10 00:14:16 +01:00
recent_comments = db_session.query(Comment).order_by(Comment.date_added.desc()).limit(3).all()
2018-07-04 15:04:19 +01:00
return dict(logged_in=current_user.is_authenticated,
current_user=current_user,
funding_categories=settings.FUNDING_CATEGORIES,
funding_statuses=settings.FUNDING_STATUSES,
2018-07-10 00:14:16 +01:00
summary_data=summary_data[1],
recent_comments=recent_comments)
2018-06-26 22:48:25 +01:00
2018-07-04 15:04:19 +01:00
def fetch_summary(purge=False):
2018-06-26 22:48:25 +01:00
global summary_data
2018-07-04 15:04:19 +01:00
if summary_data and not purge:
2018-06-26 22:48:25 +01:00
if (datetime.now() - summary_data[0]).total_seconds() <= 120:
return
data = {}
categories = settings.FUNDING_CATEGORIES
statuses = settings.FUNDING_STATUSES.keys()
2018-06-26 22:48:25 +01:00
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