# HG changeset patch # User Marcin Kuzminski # Date 2010-04-18 19:15:53 # Node ID 9f6300b96380e97593df69cd7806bbc1d3847cbb # Parent e47d1db5ef20bf3472862d000d30ad5366c948be Updated error handling, from mercurial to pylons. + added tempalte for 404 diff --git a/pylons_app/controllers/error.py b/pylons_app/controllers/error.py --- a/pylons_app/controllers/error.py +++ b/pylons_app/controllers/error.py @@ -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 @@ class ErrorController(BaseController): """ # 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 diff --git a/pylons_app/lib/filters.py b/pylons_app/lib/filters.py --- a/pylons_app/lib/filters.py +++ b/pylons_app/lib/filters.py @@ -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() diff --git a/pylons_app/templates/errors/error_404.html b/pylons_app/templates/errors/error_404.html new file mode 100644 --- /dev/null +++ b/pylons_app/templates/errors/error_404.html @@ -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 name="breadcrumbs()"> + ${h.link_to(u'Home',h.url('hg_home'))} + / + ${h.link_to(u'Admin',h.url('admin_home'))} + + +<%def name="page_nav()"> +
  • ${h.link_to(u'Home',h.url('hg_home'))}
  • +
  • ${_('Admin')}
  • + +<%def name="js()"> + + +<%def name="main()"> + + +

    The specified repository "${c.repo_name}" is unknown, sorry.

    +

    + Create "${c.repo_name}" repository as ${c.repo_name|n,filters.clean_repo} + +

    +

    Go back to the ${h.link_to(_('main repository list page'),h.url('hg_home'))}.

    + + \ No newline at end of file