error.py
110 lines
| 3.8 KiB
| text/x-python
|
PythonLexer
r819 | # -*- coding: utf-8 -*- | |||
""" | ||||
r1057 | package.rhodecode.controllers.error | |||
~~~~~~~~~~~~~~ | ||||
r819 | ||||
RhodeCode error controller | ||||
:created_on: Dec 8, 2010 | ||||
:author: marcink | ||||
:copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> | ||||
:license: GPLv3, see COPYING for more details. | ||||
""" | ||||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; version 2 | ||||
# of the License or (at your opinion) any later version of the license. | ||||
# | ||||
# This program 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 General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||||
# MA 02110-1301, USA. | ||||
import os | ||||
r547 | import cgi | |||
r819 | import logging | |||
r547 | import paste.fileapp | |||
r819 | ||||
r1057 | from pylons import tmpl_context as c, request, config | |||
r547 | from pylons.i18n.translation import _ | |||
r819 | from pylons.middleware import media_path | |||
r547 | from rhodecode.lib.base import BaseController, render | |||
r819 | ||||
r547 | log = logging.getLogger(__name__) | |||
class ErrorController(BaseController): | ||||
r819 | """Generates error documents as and when they are required. | |||
r547 | ||||
The ErrorDocuments middleware forwards to ErrorController when error | ||||
related status codes are returned from the application. | ||||
r819 | This behavior can be altered by changing the parameters to the | |||
r547 | ErrorDocuments middleware in your config/middleware.py file. | |||
""" | ||||
r819 | ||||
r547 | def __before__(self): | |||
r1057 | c.rhodecode_name = config.get('rhodecode_title') | |||
r819 | ||||
r547 | def document(self): | |||
resp = request.environ.get('pylons.original_response') | ||||
r819 | ||||
r547 | log.debug('### %s ###', resp.status) | |||
e = request.environ | ||||
c.serv_p = r'%(protocol)s://%(host)s/' % { | ||||
'protocol': e.get('wsgi.url_scheme'), | ||||
'host':e.get('HTTP_HOST'), | ||||
} | ||||
r819 | ||||
r547 | c.error_message = cgi.escape(request.GET.get('code', str(resp.status))) | |||
c.error_explanation = self.get_error_explanation(resp.status_int) | ||||
#redirect to when error with given seconds | ||||
c.redirect_time = 0 | ||||
c.redirect_module = _('Home page')# name to what your going to be redirected | ||||
c.url_redirect = "/" | ||||
return render('/errors/error_document.html') | ||||
def img(self, id): | ||||
"""Serve Pylons' stock images""" | ||||
return self._serve_file(os.path.join(media_path, 'img', id)) | ||||
def style(self, id): | ||||
"""Serve Pylons' stock stylesheets""" | ||||
return self._serve_file(os.path.join(media_path, 'style', id)) | ||||
def _serve_file(self, path): | ||||
"""Call Paste's FileApp (a WSGI application) to serve the file | ||||
at the specified path | ||||
""" | ||||
fapp = paste.fileapp.FileApp(path) | ||||
return fapp(request.environ, self.start_response) | ||||
def get_error_explanation(self, code): | ||||
''' get the error explanations of int codes | ||||
[400, 401, 403, 404, 500]''' | ||||
try: | ||||
code = int(code) | ||||
except: | ||||
code = 500 | ||||
if code == 400: | ||||
return _('The request could not be understood by the server due to malformed syntax.') | ||||
if code == 401: | ||||
r819 | return _('Unauthorized access to resource') | |||
r547 | if code == 403: | |||
return _("You don't have permission to view this page") | ||||
if code == 404: | ||||
return _('The resource could not be found') | ||||
if code == 500: | ||||
return _('The server encountered an unexpected condition which prevented it from fulfilling the request.') | ||||