Skip to content

Instantly share code, notes, and snippets.

Created May 22, 2013 15:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/5628709 to your computer and use it in GitHub Desktop.
Save anonymous/5628709 to your computer and use it in GitHub Desktop.
request_filter blueprint
from flask import Blueprint, g, _request_ctx_stack, current_app
from flask.ext.security import current_user, login_required
from project_database.models import ASnapshot
BLUEPRINT = Blueprint('preprocess_request', __name__)
class PreProcessRequest(object):
def __init__(self, request):
self.aid = self.determine_account(request)
self.get_page = self.determine_page(request)
self.endpoint = request.endpoint
self.back = self.determine_back(request)
@property
def asnapshot(self):
return ASnapshot(self)
@property
def current_blueprint(self):
return self.endpoint.rsplit('.')[0]
@property
def current_method(self):
return self.endpoint.rsplit('.')[-1]
def is_none(self, l):
try:
return filter(None, l).pop()
except:
return None
def determine_account(self, request):
return self.is_none([request.form.get('who', None),
current_user.account.identifier])
@login_required
def _preprocess_with_user(request):
g.preprocessed = PreProcessRequest(request)
PASS_ROUTE = ['static', 'shield_index', 'login']
@BLUEPRINT.before_app_request
def preprocess_request():
r = _request_ctx_stack.top.request
if str(r.url_rule.endpoint).rsplit('.')[-1] not in PASS_ROUTE:
_preprocess_with_user(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment