Source code for restfulgrok.fancyhtmlview

import json
from jinja2 import Environment, PrefixLoader, PackageLoader

from view import GrokRestViewMixin
from contenttype import ContentType, ContentTypesRegistry
from contenttype import JsonContentType



[docs]class HtmlContentType(ContentType): """ XHTML content type. Provides a dumps-method that uses a jinja2-template to generate a bootrap-styled HTML-document which is suitable as a default view for a REST API. """ mimetype = 'text/html' extension = 'html' description = 'Formatted HTML view with help for the REST API.' #: Variable forwarded to the template as ``title``. html_title = 'REST API' #: Variable forwarded to the template as ``brandingtitle``. html_brandingtitle = html_title #: Variable forwarded to the template as ``heading``. html_heading = html_title #: jinja2 template name for the :meth:`.errorview`. error_template_name = 'restfulgrok/errorview.jinja.html' #: jinja2 template name for the normal html view (not for errors) template_name = 'restfulgrok/fancyhtmlview.jinja.html' #: The ``jinja2.Environment`` template_environment = Environment(loader = PrefixLoader({ 'restfulgrok': PackageLoader('restfulgrok') })) @classmethod
[docs] def get_previewdata(cls, pydata): """ Get the data that should be added to the data preview box. :return: A string containing the data. """ return JsonContentType.dumps(pydata)
@classmethod
[docs] def get_template_data(cls, pydata, view): """ Get the template data. :return: Template data. :rtype: dict """ return dict(previewdata=cls.get_previewdata(pydata), content_types=view.content_types, title=cls.html_title, brandingtitle=cls.html_brandingtitle, heading=cls.html_heading)
@classmethod def errorview(cls, errordata, view): template = cls.template_environment.get_template(cls.error_template_name) try: errordata = json.dumps(errordata) except TypeError: errordata = None return template.render(errordata=errordata, statuscode=view.response.getStatus(), statusmessage=view.response.errmsg).encode('utf-8') @classmethod def dumps(cls, pydata, view): if view.response.getStatus() < 300: template = cls.template_environment.get_template(cls.template_name) return template.render(**cls.get_template_data(pydata, view)).encode('utf-8') else: return cls.errorview(pydata, view)
[docs]class GrokRestViewWithFancyHtmlMixin(GrokRestViewMixin): """ Adds :class:`HtmlContentType` to ``content_types``. """ content_types = GrokRestViewMixin.content_types + ContentTypesRegistry(HtmlContentType)