Changeset - 923f0e6ab010
[Not reviewed]
default
0 5 0
Marcin Kuzminski - 16 years ago 2010-02-20 22:45:59

change error controller,
added handling 404 to mercurial,
5 files changed with 44 insertions and 16 deletions:
0 comments (0 inline, 0 general)
development.ini
Show inline comments
 
@@ -8,15 +8,18 @@
 
[DEFAULT]
 
debug = true
 
############################################
 
## Uncomment and replace with the address ##
 
## which should receive any error reports ##
 
############################################
 
email_to = marcin.kuzminski@etelko.pl
 
smtp_server = localhost
 
error_email_from = paste_error@localhost
 
#email_to = marcin.kuzminski@etelko.pl
 
#smtp_server = mail.etelko.pl
 
#error_email_from = paste_error@localhost
 
#smtp_username = 
 
#smtp_password = 
 
#error_message = 'mercurial crash !'
 

	
 
[server:main]
 
use = egg:Paste#http
 
host = 127.0.0.1
 
port = 5000
 

	
production.ini
Show inline comments
 
@@ -8,31 +8,31 @@
 
[DEFAULT]
 
debug = true
 
############################################
 
## Uncomment and replace with the address ##
 
## which should receive any error reports ##
 
############################################
 
email_to = marcin.kuzminski@etelko.pl
 
smtp_server = localhost
 
error_email_from = paste_error@localhost
 
#email_to = marcin.kuzminski@etelko.pl
 
#smtp_server = mail.etelko.pl
 
#error_email_from = paste_error@localhost
 
#smtp_username = 
 
#smtp_password = 
 
#error_message = 'mercurial crash !'
 

	
 
[server:main]
 
use = egg:Paste#http
 
host = 127.0.0.1
 
port = 8001
 

	
 
[app:main]
 
use = egg:pylons_app
 
full_stack = false
 
full_stack = true
 
static_files = true
 
#default lang
 
lang=en
 

	
 
cache_dir = %(here)s/data
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
 
## execute malicious code after an exception is raised.                       ##
 
################################################################################
 
set debug = false
pylons_app/config/middleware.py
Show inline comments
 
@@ -46,15 +46,16 @@ def make_app(global_conf, full_stack = T
 
        # Handle Python exceptions
 
        app = ErrorHandler(app, global_conf, **config['pylons.errorware'])
 

	
 
        # Display error documents for 401, 403, 404 status codes (and
 
        # 500 when debug is disabled)
 
        if asbool(config['debug']):
 
            app = StatusCodeRedirect(app)
 
            #don't handle 404, since mercurial does it for us.
 
            app = StatusCodeRedirect(app, [400, 401, 403, 500])
 
        else:
 
            app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])
 
            app = StatusCodeRedirect(app, [400, 401, 403, 500])
 

	
 
    # Establish the Registry for this application
 
    app = RegistryManager(app)
 

	
 
    # Static files (If running in production, and Apache or another web
 
    # server is handling this static content, remove the following 3 lines)
pylons_app/controllers/error.py
Show inline comments
 
import logging
 
from paste.urlparser import PkgResourcesParser
 
import paste.fileapp
 
from pylons import request, tmpl_context as c
 
from pylons.controllers.util import forward
 
from pylons.i18n.translation import _
 
from pylons_app.lib.base import BaseController, render
 
from pylons.middleware  import error_document_template, media_path
 
import cgi
 
import os
 

	
 
log = logging.getLogger(__name__)
 
class ErrorController(BaseController):
 
    """
 
    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.
 
    """
 
#
 
    def __before__(self):
 
        pass
 

	
 
    def document(self):
 

	
 
        resp = request.environ.get('pylons.original_response')
 
        log.debug(resp.status)
 
        c.error_message = cgi.escape(request.GET.get('code', str(resp.status)))
 
        c.error_explanation = self.get_error_explanation(resp.status_int)
 

	
 
        c.serv_p = ''.join(['http://', request.environ.get('HTTP_HOST', '')])
 

	
 
        #redirect to when error with given seconds
 
        c.redirect_time = 5
 
        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
 
        """
 
        request.environ['PATH_INFO'] = '/%s' % path
 
        return forward(PkgResourcesParser('pylons', 'pylons'))
 
        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)
pylons_app/templates/errors/error_document.html
Show inline comments
 
@@ -3,20 +3,25 @@
 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
 

	
 
<head>
 
    <title>Error - ${c.error_message}</title>
 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
 
    
 
    %if c.redirect_time:
 
    <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
 
    %endif
 
    
 
    
 
    <style type="text/css">
 
     
 
     body {
 
       font-family: sans-serif;
 
     }
 
     #main_div{
 
       border: 2px solid #8daed8;
 
       border: 0px solid #000;
 
       width: 500px;
 
       margin: auto;
 
       text-align: center;
 
       margin-top: 200px;
 
     }
 
     .error_message{
 
@@ -28,12 +33,15 @@
 
       
 
<body>
 
	<div id="main_div">
 
		<h1 class="error_message">${c.error_message}</h1>
 
		
 
		<p>${c.error_explanation}</p>
 
        %if c.redirect_time:
 
		<p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</p>
 
	    %endif		
 
		
 
	</div>
 
</body>
 
</html>
 

	
 

	
0 comments (0 inline, 0 general)