Skip to content

Commit

Permalink
[#279] Make bp_includes.lib.basehandler share jinja2_factory with bp_…
Browse files Browse the repository at this point in the history
…includes.lib.error_handler.
  • Loading branch information
Bezoar committed Apr 3, 2014
1 parent ed92f76 commit 6d73b56
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 31 deletions.
33 changes: 3 additions & 30 deletions bp_includes/lib/basehandler.py
Expand Up @@ -12,36 +12,9 @@
from webapp2_extras import sessions
# local application/library specific imports
from bp_includes import models
from bp_includes.lib import utils, i18n
from bp_includes.lib import utils, i18n, jinja_bootstrap
from babel import Locale


def generate_csrf_token():
session = sessions.get_store().get_session()
if '_csrf_token' not in session:
session['_csrf_token'] = utils.random_string()
return session['_csrf_token']


def jinja2_factory(app):
j = jinja2.Jinja2(app)
j.environment.filters.update({
# Set filters.
# ...
})
j.environment.globals.update({
# Set global variables.
'csrf_token': generate_csrf_token,
'uri_for': webapp2.uri_for,
'getattr': getattr,
})
j.environment.tests.update({
# Set test.
# ...
})
return j


class ViewClass:
"""
ViewClass to insert variables into the template.
Expand Down Expand Up @@ -267,7 +240,7 @@ def is_mobile(self):

@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(factory=jinja2_factory, app=self.app)
return jinja2.get_jinja2(factory=jinja_bootstrap.jinja2_factory, app=self.app)

@webapp2.cached_property
def get_base_layout(self):
Expand Down Expand Up @@ -330,4 +303,4 @@ def render_template(self, filename, **kwargs):
kwargs['messages'] = self.messages

self.response.headers.add_header('X-UA-Compatible', 'IE=Edge,chrome=1')
self.response.write(self.jinja2.render_template(filename, **kwargs))
self.response.write(self.jinja2.render_template(filename, **kwargs))
3 changes: 2 additions & 1 deletion bp_includes/lib/error_handler.py
Expand Up @@ -12,6 +12,7 @@
from google.appengine.api import app_identity
from google.appengine.api import taskqueue
# local application/library specific imports
from bp_includes.lib import jinja_bootstrap
import i18n


Expand Down Expand Up @@ -78,7 +79,7 @@ def handle_error(request, response, exception):

status_int = hasattr(exception, 'status_int') and exception.status_int or 500
template = request.app.config.get('error_templates')[status_int]
t = jinja2.get_jinja2(app=webapp2.get_app()).render_template(template, **c)
t = jinja2.get_jinja2(factory=jinja_bootstrap.jinja2_factory, app=webapp2.get_app()).render_template(template, **c)
logging.error("Error {}: {}".format(status_int, exception))
response.write(t)
response.set_status(status_int)
28 changes: 28 additions & 0 deletions bp_includes/lib/jinja_bootstrap.py
@@ -0,0 +1,28 @@
import webapp2
from webapp2_extras import jinja2
from webapp2_extras import sessions
from bp_includes.lib import utils

def generate_csrf_token():
session = sessions.get_store().get_session()
if '_csrf_token' not in session:
session['_csrf_token'] = utils.random_string()
return session['_csrf_token']

def jinja2_factory(app):
j = jinja2.Jinja2(app)
j.environment.filters.update({
# Set filters.
# ...
})
j.environment.globals.update({
# Set global variables.
'csrf_token': generate_csrf_token,
'uri_for': webapp2.uri_for,
'getattr': getattr,
})
j.environment.tests.update({
# Set test.
# ...
})
return j

0 comments on commit 6d73b56

Please sign in to comment.