Skip to content
This repository has been archived by the owner on Apr 10, 2018. It is now read-only.

Commit

Permalink
loader in application. remove app.filters
Browse files Browse the repository at this point in the history
  • Loading branch information
lepture committed May 27, 2012
1 parent 0834752 commit 751c6ab
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 51 deletions.
32 changes: 18 additions & 14 deletions july/app.py
@@ -1,5 +1,6 @@
import os.path
from tornado.web import Application, URLSpec
from july.template import JulyLoader
from tornado.wsgi import WSGIApplication
from july.util import get_root_path, import_object, ObjectDict

Expand Down Expand Up @@ -78,16 +79,6 @@ def add_handler(self, handler):
else:
self.handlers.append(handler)

def register_filter(self, name, func):
"""Register filter function for template.
.. admonition:: this filter can only be accessed in this app.
"""
if '__july_filters__' not in self.settings:
self.settings['__july_filters__'] = {}

self.settings['__july_filters__'].update({name: func})

def first_register(self):
if not self._first_register:
return False
Expand Down Expand Up @@ -127,6 +118,14 @@ def __init__(self, handlers=None, default_host="", transforms=None,
self.default_host = default_host
self.transforms = transforms
self.wsgi = wsgi

if 'template_path' in settings:
template_path = settings.pop('template_path')
if isinstance(template_path, str):
settings['template_path'] = [template_path]
else:
settings['template_path'] = []

self.settings = settings

def add_handler(self, handler):
Expand Down Expand Up @@ -180,13 +179,12 @@ def register_app(self, app, url_prefix=''):
if isinstance(app, str):
app = import_object(app)
if app.first_register():
if '__july_apps__' not in self.settings:
self.settings['__july_apps__'] = {}

self.settings['__july_apps__'][app.import_name] = app
self._register_app_handlers(app, url_prefix)
self._register_app_ui_modules(app)

if app.template_path:
self.settings['template_path'].append(app.template_path)

def _register_app_handlers(self, app, url_prefix):
if not app.handlers:
return
Expand Down Expand Up @@ -217,6 +215,12 @@ def _register_app_ui_modules(self, app):
self.add_ui_moudle(app.ui_modules)

def __call__(self):
kwargs = {}
if 'autoescape' in self.settings:
kwargs['autoescape'] = self.settings['autoescape']
path = self.settings.pop('template_path')
loader = JulyLoader(path, **kwargs)
self.settings['template_loader'] = loader
if self.wsgi:
app = WSGIApplication(self.handlers, self.default_host,
**self.settings)
Expand Down
2 changes: 1 addition & 1 deletion july/template.py
Expand Up @@ -8,7 +8,7 @@ class JulyLoader(BaseLoader):

def __init__(self, roots, **kwargs):
super(JulyLoader, self).__init__(**kwargs)
if isinstance(roots, basestring):
if isinstance(roots, str):
self.roots = [roots]
else:
assert isinstance(roots, (list, tuple)), "roots should be lists"
Expand Down
36 changes: 0 additions & 36 deletions july/web.py
@@ -1,5 +1,4 @@
from tornado import web, escape
from july.template import JulyLoader
from july.cache import cache

#: initialize options
Expand All @@ -13,37 +12,7 @@ class JulyHandler(web.RequestHandler):
Subclass JulyHandler to make an app, it provides a way to organize a July
App, and will support more features in the future.
If you don't want the in app template feature, set app_template=False::
class HomeHandler(JulyHandler):
app_template = False
def get(self):
self.write('hello world')
"""
app_template = True

def _get_app(self):
if hasattr(self, '_july_app'):
return self._july_app
if '__july_apps__' in self.settings:
app = self.settings['__july_apps__'].get(self.__module__, None)
self._july_app = app
else:
self._july_app = None
return self._july_app

def create_template_loader(self, template_path):
app = self._get_app()
if app and self.app_template:
roots = [template_path, app.template_path]
kwargs = {}
if 'autoescape' in self.settings:
kwargs['autoescape'] = self.settings['autoescape']

return JulyLoader(roots, **kwargs)
return super(JulyHandler, self).create_template_loader(template_path)

def flash_message(self, msg=None, category=None):
"""flash_message provide an easy way to communicate with users.
Expand Down Expand Up @@ -102,11 +71,6 @@ def render_string(self, template_name, **kwargs):
assert "g" not in kwargs, "g is a reserved keyword."
kwargs["g"] = self.settings['__july_global__']

#: add app filters
app = self._get_app()
if app and '__july_filters__' in app.settings:
kwargs.update(app.settings['__july_filters__'])

#: flash message support
kwargs['flash_message'] = self.flash_message
return super(JulyHandler, self).render_string(template_name, **kwargs)
Expand Down

0 comments on commit 751c6ab

Please sign in to comment.