annotate pylons_app/controllers/error.py @ 0:564e40829f80

initial commit.
author Marcin Kuzminski
date Thu, 18 Feb 2010 13:01:57 +0100
parents
children 923f0e6ab010
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 import logging
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 from paste.urlparser import PkgResourcesParser
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3 from pylons import request, tmpl_context as c
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4 from pylons.controllers.util import forward
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 from pylons.i18n.translation import _
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6 from pylons_app.lib.base import BaseController, render
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 import cgi
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9 log = logging.getLogger(__name__)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10 class ErrorController(BaseController):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 Generates error documents as and when they are required.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
13
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14 The ErrorDocuments middleware forwards to ErrorController when error
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 related status codes are returned from the application.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 This behaviour can be altered by changing the parameters to the
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 ErrorDocuments middleware in your config/middleware.py file.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 def document(self):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
22
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
23 resp = request.environ.get('pylons.original_response')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
24 c.error_message = cgi.escape(request.GET.get('code', str(resp.status)))
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
25 c.error_explanation = self.get_error_explanation(resp.status_int)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
26
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
27 c.serv_p = ''.join(['http://', request.environ.get('HTTP_HOST', '')])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
28
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
29 #redirect to when error with given seconds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
30 c.redirect_time = 5
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
31 c.redirect_module = _('Home page')# name to what your going to be redirected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
32 c.url_redirect = "/"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
33
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
34 return render('/errors/error_document.html')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
35
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
36 def _serve_file(self, path):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
37 """Call Paste's FileApp (a WSGI application) to serve the file
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 at the specified path
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
39 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40 request.environ['PATH_INFO'] = '/%s' % path
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 return forward(PkgResourcesParser('pylons', 'pylons'))
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43 def get_error_explanation(self, code):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
44 ''' get the error explanations of int codes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 [400, 401, 403, 404, 500]'''
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
47 code = int(code)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
48 except:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
49 code = 500
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
50
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
51 if code == 400:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
52 return _('The request could not be understood by the server due to malformed syntax.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
53 if code == 401:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
54 return _('Unathorized access to resource')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
55 if code == 403:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
56 return _("You don't have permission to view this page")
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
57 if code == 404:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58 return _('The resource could not be found')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
59 if code == 500:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
60 return _('The server encountered an unexpected condition which prevented it from fulfilling the request.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
61
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
62