2009-01-21 16:11:39 +01:00
|
|
|
# -*- python -*-
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
|
|
|
# DDPortfolio service ErrorController
|
2012-01-07 01:46:57 +01:00
|
|
|
# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
|
2009-01-21 16:11:39 +01:00
|
|
|
#
|
|
|
|
# This file is part of DDPortfolio service.
|
|
|
|
#
|
|
|
|
# DDPortfolio service is free software: you can redistribute it and/or
|
|
|
|
# modify it under the terms of the GNU Affero General Public License
|
|
|
|
# as published by the Free Software Foundation, either version 3 of
|
|
|
|
# the License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# DDPortfolio service is distributed in the hope that it will be
|
|
|
|
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
|
|
|
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# Affero General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Affero General Public
|
|
|
|
# License along with this program. If not, see
|
|
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
2009-01-20 22:39:05 +01:00
|
|
|
import cgi
|
|
|
|
|
2010-04-17 12:05:29 +02:00
|
|
|
from paste.urlparser import PkgResourcesParser
|
|
|
|
from pylons import request
|
|
|
|
from pylons.controllers.util import forward
|
|
|
|
from pylons.middleware import error_document_template
|
|
|
|
from webhelpers.html.builder import literal
|
2009-01-20 22:39:05 +01:00
|
|
|
|
2010-04-17 12:05:29 +02:00
|
|
|
from ddportfolioservice.lib.base import BaseController
|
2009-01-20 22:39:05 +01:00
|
|
|
|
2010-04-17 12:05:29 +02:00
|
|
|
|
2012-01-07 01:46:57 +01:00
|
|
|
class ErrorController(BaseController):
|
2009-01-20 22:39:05 +01:00
|
|
|
"""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.
|
|
|
|
"""
|
2010-04-17 12:05:29 +02:00
|
|
|
|
2009-01-20 22:39:05 +01:00
|
|
|
def document(self):
|
|
|
|
"""Render the error document"""
|
2010-04-17 12:05:29 +02:00
|
|
|
resp = request.environ.get('pylons.original_response')
|
2012-01-07 01:46:57 +01:00
|
|
|
content = literal(resp.body) or cgi.escape(
|
|
|
|
request.GET.get('message', ''))
|
2009-01-20 22:39:05 +01:00
|
|
|
page = error_document_template % \
|
|
|
|
dict(prefix=request.environ.get('SCRIPT_NAME', ''),
|
2012-01-07 01:46:57 +01:00
|
|
|
code=cgi.escape(
|
|
|
|
request.GET.get('code', str(resp.status_int))),
|
2010-04-17 12:05:29 +02:00
|
|
|
message=content)
|
2009-01-20 22:39:05 +01:00
|
|
|
return page
|
|
|
|
|
|
|
|
def img(self, id):
|
|
|
|
"""Serve Pylons' stock images"""
|
2010-04-17 12:05:29 +02:00
|
|
|
return self._serve_file('/'.join(['media/img', id]))
|
2009-01-20 22:39:05 +01:00
|
|
|
|
|
|
|
def style(self, id):
|
|
|
|
"""Serve Pylons' stock stylesheets"""
|
2010-04-17 12:05:29 +02:00
|
|
|
return self._serve_file('/'.join(['media/style', id]))
|
2009-01-20 22:39:05 +01:00
|
|
|
|
2010-04-17 12:05:29 +02:00
|
|
|
def _serve_file(self, path):
|
2012-01-07 01:46:57 +01:00
|
|
|
"""
|
|
|
|
Call Paste's FileApp (a WSGI application) to serve the file at
|
|
|
|
the specified path
|
2009-01-20 22:39:05 +01:00
|
|
|
"""
|
|
|
|
request.environ['PATH_INFO'] = '/%s' % path
|
2010-04-17 12:05:29 +02:00
|
|
|
return forward(PkgResourcesParser('pylons', 'pylons'))
|