changeset 14:923f0e6ab010

change error controller, added handling 404 to mercurial,
author Marcin Kuzminski
date Sat, 20 Feb 2010 22:45:59 +0100
parents b6b3533ad63c
children c8265b4f0c2a
files development.ini production.ini pylons_app/config/middleware.py pylons_app/controllers/error.py pylons_app/templates/errors/error_document.html
diffstat 5 files changed, 46 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/development.ini	Sat Feb 20 17:55:59 2010 +0100
+++ b/development.ini	Sat Feb 20 22:45:59 2010 +0100
@@ -11,9 +11,12 @@
 ## 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
--- a/production.ini	Sat Feb 20 17:55:59 2010 +0100
+++ b/production.ini	Sat Feb 20 22:45:59 2010 +0100
@@ -11,9 +11,12 @@
 ## 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 @@
 
 [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  ##
--- a/pylons_app/config/middleware.py	Sat Feb 20 17:55:59 2010 +0100
+++ b/pylons_app/config/middleware.py	Sat Feb 20 22:45:59 2010 +0100
@@ -49,9 +49,10 @@
         # 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)
--- a/pylons_app/controllers/error.py	Sat Feb 20 17:55:59 2010 +0100
+++ b/pylons_app/controllers/error.py	Sat Feb 20 22:45:59 2010 +0100
@@ -1,10 +1,13 @@
 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 @@
     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
--- a/pylons_app/templates/errors/error_document.html	Sat Feb 20 17:55:59 2010 +0100
+++ b/pylons_app/templates/errors/error_document.html	Sat Feb 20 22:45:59 2010 +0100
@@ -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>