annotate pylons_app/controllers/error.py @ 510:9bedaa073c23

fixed lockdecrator to return executed function data removed print
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 28 Sep 2010 20:07:55 +0000
parents 7a086a83f00b
children
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
125
2811259dc12d Moved check_repo function to utils, error controller check for first name in url, for this repo and only prints 404 make repo template if repo does not exists, moded check repo from admin
Marcin Kuzminski <marcin@python-works.com>
parents: 101
diff changeset
2 import cgi
2811259dc12d Moved check_repo function to utils, error controller check for first name in url, for this repo and only prints 404 make repo template if repo does not exists, moded check repo from admin
Marcin Kuzminski <marcin@python-works.com>
parents: 101
diff changeset
3 import os
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
4 import paste.fileapp
87
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
5 from pylons import tmpl_context as c, app_globals as g, request, config
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6 from pylons.controllers.util import forward
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 from pylons.i18n.translation import _
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8 from pylons_app.lib.base import BaseController, render
125
2811259dc12d Moved check_repo function to utils, error controller check for first name in url, for this repo and only prints 404 make repo template if repo does not exists, moded check repo from admin
Marcin Kuzminski <marcin@python-works.com>
parents: 101
diff changeset
9 from pylons.middleware import media_path
2811259dc12d Moved check_repo function to utils, error controller check for first name in url, for this repo and only prints 404 make repo template if repo does not exists, moded check repo from admin
Marcin Kuzminski <marcin@python-works.com>
parents: 101
diff changeset
10 from pylons_app.lib.utils import check_repo
260
6ada8c223374 made global funcion to clean repo names, and remove all special chars from the name.
Marcin Kuzminski <marcin@python-works.com>
parents: 215
diff changeset
11 import pylons_app.lib.helpers as h
312
91ba8489119a another small fix for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 311
diff changeset
12 from pylons_app import __version__
215
70f645fa97cc Moved repo creation to admin/repos, as part of crud controller. Now repo creation is based on a form, which can be auto filled with data from 404 page. Fixed the error controller to properly give the repo name.
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
13 log = logging.getLogger(__name__)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 class ErrorController(BaseController):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 Generates error documents as and when they are required.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19 The ErrorDocuments middleware forwards to ErrorController when error
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20 related status codes are returned from the application.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
22 This behaviour can be altered by changing the parameters to the
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
23 ErrorDocuments middleware in your config/middleware.py file.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
24 """
311
9a70fe918a81 fixed error controller __before__ behavior,
Marcin Kuzminski <marcin@python-works.com>
parents: 260
diff changeset
25 def __before__(self):
9a70fe918a81 fixed error controller __before__ behavior,
Marcin Kuzminski <marcin@python-works.com>
parents: 260
diff changeset
26 pass#disable all base actions since we don't need them here
87
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
27
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
28 def document(self):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
29 resp = request.environ.get('pylons.original_response')
215
70f645fa97cc Moved repo creation to admin/repos, as part of crud controller. Now repo creation is based on a form, which can be auto filled with data from 404 page. Fixed the error controller to properly give the repo name.
Marcin Kuzminski <marcin@python-works.com>
parents: 191
diff changeset
30
311
9a70fe918a81 fixed error controller __before__ behavior,
Marcin Kuzminski <marcin@python-works.com>
parents: 260
diff changeset
31 log.debug('### %s ###', resp.status)
87
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
32
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
33 e = request.environ
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
34 c.serv_p = r'%(protocol)s://%(host)s/' % {
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
35 'protocol': e.get('wsgi.url_scheme'),
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
36 'host':e.get('HTTP_HOST'),
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
37 }
125
2811259dc12d Moved check_repo function to utils, error controller check for first name in url, for this repo and only prints 404 make repo template if repo does not exists, moded check repo from admin
Marcin Kuzminski <marcin@python-works.com>
parents: 101
diff changeset
38
87
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
39
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40 c.error_message = cgi.escape(request.GET.get('code', str(resp.status)))
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 c.error_explanation = self.get_error_explanation(resp.status_int)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43 #redirect to when error with given seconds
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
44 c.redirect_time = 0
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 c.redirect_module = _('Home page')# name to what your going to be redirected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 c.url_redirect = "/"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
47
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
48 return render('/errors/error_document.html')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
49
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
50
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
51 def img(self, id):
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
52 """Serve Pylons' stock images"""
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
53 return self._serve_file(os.path.join(media_path, 'img', id))
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
54
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
55 def style(self, id):
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
56 """Serve Pylons' stock stylesheets"""
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
57 return self._serve_file(os.path.join(media_path, 'style', id))
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
58
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
59 def _serve_file(self, path):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
60 """Call Paste's FileApp (a WSGI application) to serve the file
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
61 at the specified path
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
62 """
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
63 fapp = paste.fileapp.FileApp(path)
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
64 return fapp(request.environ, self.start_response)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
65
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
66 def get_error_explanation(self, code):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
67 ''' get the error explanations of int codes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
68 [400, 401, 403, 404, 500]'''
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
69 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
70 code = int(code)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
71 except:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
72 code = 500
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
73
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
74 if code == 400:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
75 return _('The request could not be understood by the server due to malformed syntax.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
76 if code == 401:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
77 return _('Unathorized access to resource')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
78 if code == 403:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
79 return _("You don't have permission to view this page")
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
80 if code == 404:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
81 return _('The resource could not be found')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
82 if code == 500:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
83 return _('The server encountered an unexpected condition which prevented it from fulfilling the request.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
84
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
85