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 46 insertions and 18 deletions:
0 comments (0 inline, 0 general)
development.ini
Show inline comments
 
@@ -11,9 +11,12 @@ 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
production.ini
Show inline comments
 
@@ -11,9 +11,12 @@ 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
 
@@ -22,14 +25,11 @@ 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  ##
pylons_app/config/middleware.py
Show inline comments
 
@@ -49,9 +49,10 @@ def make_app(global_conf, full_stack = T
 
        # 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)
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):
 
@@ -17,28 +20,41 @@ class ErrorController(BaseController):
 
    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
pylons_app/templates/errors/error_document.html
Show inline comments
 
@@ -6,14 +6,19 @@
 
<head>
 
    <title>Error - ${c.error_message}</title>
 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
 
    <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
 
    
 
    %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;
 
@@ -31,7 +36,10 @@
 
		<h1 class="error_message">${c.error_message}</h1>
 
		
 
		<p>${c.error_explanation}</p>
 
		<p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</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)