annotate rhodecode/controllers/error.py @ 1217:a3b2b4b4e440

fixes for issue #149
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 05 Apr 2011 18:04:06 +0200
parents af6ca51fb80f
children bf263968da47
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
1 # -*- coding: utf-8 -*-
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
2 """
1057
af6ca51fb80f rhodecode release 1.1.3 changes
Marcin Kuzminski <marcin@python-works.com>
parents: 860
diff changeset
3 package.rhodecode.controllers.error
af6ca51fb80f rhodecode release 1.1.3 changes
Marcin Kuzminski <marcin@python-works.com>
parents: 860
diff changeset
4 ~~~~~~~~~~~~~~
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
5
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
6 RhodeCode error controller
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
7
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
8 :created_on: Dec 8, 2010
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
9 :author: marcink
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
10 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
11 :license: GPLv3, see COPYING for more details.
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
12 """
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
14 # it under the terms of the GNU General Public License as published by
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
16 # (at your option) any later version.
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
17 #
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
18 # This program is distributed in the hope that it will be useful,
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
21 # GNU General Public License for more details.
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
22 #
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
23 # You should have received a copy of the GNU General Public License
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1057
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
25 import os
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
26 import cgi
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
27 import logging
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
28 import paste.fileapp
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
29
1057
af6ca51fb80f rhodecode release 1.1.3 changes
Marcin Kuzminski <marcin@python-works.com>
parents: 860
diff changeset
30 from pylons import tmpl_context as c, request, config
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
31 from pylons.i18n.translation import _
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
32 from pylons.middleware import media_path
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
33
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 354
diff changeset
34 from rhodecode.lib.base import BaseController, render
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
35
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
36 log = logging.getLogger(__name__)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
37
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 class ErrorController(BaseController):
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
39 """Generates error documents as and when they are required.
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 The ErrorDocuments middleware forwards to ErrorController when error
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42 related status codes are returned from the application.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
44 This behavior can be altered by changing the parameters to the
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 ErrorDocuments middleware in your config/middleware.py file.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 """
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
47
311
9a70fe918a81 fixed error controller __before__ behavior,
Marcin Kuzminski <marcin@python-works.com>
parents: 260
diff changeset
48 def __before__(self):
1057
af6ca51fb80f rhodecode release 1.1.3 changes
Marcin Kuzminski <marcin@python-works.com>
parents: 860
diff changeset
49 c.rhodecode_name = config.get('rhodecode_title')
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
50
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
51 def document(self):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
52 resp = request.environ.get('pylons.original_response')
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
53
311
9a70fe918a81 fixed error controller __before__ behavior,
Marcin Kuzminski <marcin@python-works.com>
parents: 260
diff changeset
54 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
55
9f6300b96380 Updated error handling, from mercurial to pylons. + added tempalte for 404
Marcin Kuzminski <marcin@python-blog.com>
parents: 14
diff changeset
56 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
57 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
58 '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
59 '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
60 }
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
61
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
62
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
63 c.error_message = cgi.escape(request.GET.get('code', str(resp.status)))
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
64 c.error_explanation = self.get_error_explanation(resp.status_int)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
65
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
66 #redirect to when error with given seconds
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
67 c.redirect_time = 0
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
68 c.redirect_module = _('Home page')# name to what your going to be redirected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
69 c.url_redirect = "/"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
70
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
71 return render('/errors/error_document.html')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
72
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
73
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
74 def img(self, id):
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
75 """Serve Pylons' stock images"""
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
76 return self._serve_file(os.path.join(media_path, 'img', id))
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
77
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
78 def style(self, id):
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
79 """Serve Pylons' stock stylesheets"""
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
80 return self._serve_file(os.path.join(media_path, 'style', id))
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
81
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
82 def _serve_file(self, path):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
83 """Call Paste's FileApp (a WSGI application) to serve the file
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
84 at the specified path
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
85 """
14
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
86 fapp = paste.fileapp.FileApp(path)
923f0e6ab010 change error controller,
Marcin Kuzminski
parents: 0
diff changeset
87 return fapp(request.environ, self.start_response)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
88
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
89 def get_error_explanation(self, code):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
90 ''' get the error explanations of int codes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
91 [400, 401, 403, 404, 500]'''
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
92 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
93 code = int(code)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
94 except:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
95 code = 500
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
96
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
97 if code == 400:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
98 return _('The request could not be understood by the server due to malformed syntax.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
99 if code == 401:
819
f579790a0ecd spelling fixes for error controller
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
100 return _('Unauthorized access to resource')
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
101 if code == 403:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
102 return _("You don't have permission to view this page")
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
103 if code == 404:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
104 return _('The resource could not be found')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
105 if code == 500:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
106 return _('The server encountered an unexpected condition which prevented it from fulfilling the request.')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
107
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
108