changeset 87:9f6300b96380

Updated error handling, from mercurial to pylons. + added tempalte for 404
author Marcin Kuzminski <marcin@python-blog.com>
date Sun, 18 Apr 2010 21:15:53 +0200
parents e47d1db5ef20
children 911dab498eb2
files pylons_app/controllers/error.py pylons_app/lib/filters.py pylons_app/templates/errors/error_404.html
diffstat 3 files changed, 59 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/controllers/error.py	Sun Apr 18 20:06:35 2010 +0200
+++ b/pylons_app/controllers/error.py	Sun Apr 18 21:15:53 2010 +0200
@@ -1,7 +1,7 @@
 import logging
 from paste.urlparser import PkgResourcesParser
 import paste.fileapp
-from pylons import request, tmpl_context as c
+from pylons import tmpl_context as c, app_globals as g, request, config
 from pylons.controllers.util import forward
 from pylons.i18n.translation import _
 from pylons_app.lib.base import BaseController, render
@@ -22,17 +22,27 @@
     """
 #
     def __before__(self):
-        pass
-
+        c.repos_prefix = config['repos_name']
+        c.staticurl = g.statics
+        c.repo_name = request.environ['pylons.original_request']\
+            .environ.get('PATH_INFO').split('/')[-1]
+        
     def document(self):
-
         resp = request.environ.get('pylons.original_response')
         log.debug(resp.status)
+
+        e = request.environ
+        c.serv_p = r'%(protocol)s://%(host)s/' % {
+                                                'protocol': e.get('wsgi.url_scheme'),
+                                                'host':e.get('HTTP_HOST'),
+                                                }
+                
+        if resp.status_int == 404:
+            return render('/errors/error_404.html')
+                
         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 = 0
         c.redirect_module = _('Home page')# name to what your going to be redirected
--- a/pylons_app/lib/filters.py	Sun Apr 18 20:06:35 2010 +0200
+++ b/pylons_app/lib/filters.py	Sun Apr 18 21:15:53 2010 +0200
@@ -1,5 +1,13 @@
 from mercurial import util
 from mercurial.templatefilters import age as _age, person as _person
+from string import punctuation
+
+def clean_repo(repo_name):
+    for x in punctuation:
+        if x != '_':
+            repo_name = repo_name.replace(x, '')
+    repo_name = repo_name.lower().strip()
+    return repo_name.replace(' ', '_')
 
 age = lambda  x:_age(x)
 capitalize = lambda x: x.capitalize()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/templates/errors/error_404.html	Sun Apr 18 21:15:53 2010 +0200
@@ -0,0 +1,35 @@
+## -*- coding: utf-8 -*-
+<%!
+from pylons_app.lib import filters
+%>
+<%inherit file="./../base/base.html"/>
+            
+<%def name="title()">
+    ${_('Repository not found')}
+</%def>
+
+<%def name="breadcrumbs()">
+	${h.link_to(u'Home',h.url('hg_home'))}
+	 / 
+	${h.link_to(u'Admin',h.url('admin_home'))}
+</%def>
+
+<%def name="page_nav()">
+<li>${h.link_to(u'Home',h.url('hg_home'))}</li>
+<li class="current">${_('Admin')}</li>
+</%def>
+<%def name="js()">
+
+</%def>
+<%def name="main()">
+
+    <h2 class="no-link no-border">Not Found</h2>
+    <p class="normal">The specified repository "${c.repo_name}" is unknown, sorry.</p>
+    <p class="normal">
+    <a href="/_admin/add_repo/${c.repo_name|n,filters.clean_repo}">Create "${c.repo_name}" repository as ${c.repo_name|n,filters.clean_repo}</a>
+
+    </p>
+    <p class="normal">Go back to the ${h.link_to(_('main repository list page'),h.url('hg_home'))}.</p>
+    <div class="page-footer">
+    </div>
+</%def>
\ No newline at end of file