/minger_plus/controllers/error.py
https://bitbucket.org/bwmcadams/mingerplus · Python · 46 lines · 28 code · 6 blank · 12 comment · 1 complexity · 80869457133653b03468cce77f9e6f1f MD5 · raw file
- import cgi
- from paste.urlparser import PkgResourcesParser
- from pylons.middleware import error_document_template
- from webhelpers.html.builder import literal
- from minger_plus.lib.base import BaseController
- class ErrorController(BaseController):
- """Generates error documents as and when they are required.
- The ErrorDocuments middleware forwards to ErrorController when error
- related status codes are returned from the application.
- This behaviour can be altered by changing the parameters to the
- ErrorDocuments middleware in your config/middleware.py file.
- """
- def document(self):
- """Render the error document"""
- request = self._py_object.request
- resp = request.environ.get('pylons.original_response')
- content = literal(resp.body) or cgi.escape(request.GET.get('message', ''))
- page = error_document_template % \
- dict(prefix=request.environ.get('SCRIPT_NAME', ''),
- code=cgi.escape(request.GET.get('code', str(resp.status_int))),
- message=content)
- return page
- def img(self, id):
- """Serve Pylons' stock images"""
- return self._serve_file('/'.join(['media/img', id]))
- def style(self, id):
- """Serve Pylons' stock stylesheets"""
- return self._serve_file('/'.join(['media/style', id]))
- def _serve_file(self, path):
- """Call Paste's FileApp (a WSGI application) to serve the file
- at the specified path
- """
- request = self._py_object.request
- request.environ['PATH_INFO'] = '/%s' % path
- return PkgResourcesParser('pylons', 'pylons')(request.environ, self.start_response)