Source code for ramverk.rendering

try:
    import simplejson as json
except ImportError:
    import json

from werkzeug.utils import cached_property


[docs]class RenderingMixin(object): """Generic mixins for adding support for "renderers" to an application.""" @cached_property
[docs] def renderers(self): """Mapping of renderer names to rendering callables. A name is either a plain string like ``'json'`` or starts with a dot to represent a file extension, e.g. ``'.html'``.""" return {}
[docs] def render(self, renderer_name, **context): """Look up a renderer and call it with the name and context. The name is cut at the first dot such that ``'index.html'`` gets the ``'.html'`` renderer.""" if '.' in renderer_name: renderer = renderer_name[renderer_name.index('.'):] else: renderer = renderer_name renderer = self.renderers[renderer] return renderer(renderer_name, **context)
[docs]class TemplatingMixin(RenderingMixin): """Add common functionality for templating to an application."""
[docs] def create_template_context(self, overrides): """Create a context mapping to render a template in, including `overrides`. Override to add globals. Includes `request`, `url` and `path` from the application, and the application as `app`, by default.""" context = dict(app=self, request=self.request, url=self.url, path=self.path) context.update(overrides) return context
[docs]class JSONRenderingMixin(RenderingMixin): """Add a `json` renderer to an application.""" @cached_property def renderers(self): renderers = super(JSONRenderingMixin, self).renderers renderers['json'] = self.__render return renderers def __default(self, obj): raise TypeError def __render(self, _, **kwargs): return self.response(json.dumps(kwargs, default=self.__default))\ .using(mimetype='application/json')

Project Versions