Prevent {{ url_for_node(...) }} crashing the planet when node doesn't exist.
Now None is returned as URL, and a warning is logged, rather than crashing with a 500. A situation like this occurs when an activity refers to a no longer existing node.
This commit is contained in:
parent
7be8e9b967
commit
b59fcb5cba
@ -2,14 +2,20 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import logging
|
||||
|
||||
import flask
|
||||
import jinja2.filters
|
||||
import jinja2.utils
|
||||
import werkzeug.exceptions as wz_exceptions
|
||||
|
||||
import pillar.api.utils
|
||||
from pillar.web.utils import pretty_date
|
||||
from pillar.web.nodes.routes import url_for_node
|
||||
import pillar.markdown
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def format_pretty_date(d):
|
||||
return pretty_date(d)
|
||||
@ -92,6 +98,15 @@ def do_markdown(s):
|
||||
return jinja2.utils.Markup(safe_html)
|
||||
|
||||
|
||||
def do_url_for_node(node_id=None, node=None):
|
||||
try:
|
||||
return url_for_node(node_id=node_id, node=node)
|
||||
except wz_exceptions.NotFound:
|
||||
log.info('%s: do_url_for_node(node_id=%r, ...) called for non-existing node.',
|
||||
flask.request.url, node_id)
|
||||
return None
|
||||
|
||||
|
||||
def setup_jinja_env(jinja_env):
|
||||
jinja_env.filters['pretty_date'] = format_pretty_date
|
||||
jinja_env.filters['pretty_date_time'] = format_pretty_date_time
|
||||
@ -100,4 +115,4 @@ def setup_jinja_env(jinja_env):
|
||||
jinja_env.filters['pluralize'] = do_pluralize
|
||||
jinja_env.filters['gravatar'] = pillar.api.utils.gravatar
|
||||
jinja_env.filters['markdown'] = do_markdown
|
||||
jinja_env.globals['url_for_node'] = url_for_node
|
||||
jinja_env.globals['url_for_node'] = do_url_for_node
|
||||
|
@ -593,7 +593,7 @@ def url_for_node(node_id=None, node=None):
|
||||
log.warning(
|
||||
'url_for_node(node_id=%r, node=None): Unable to find node.',
|
||||
node_id)
|
||||
raise ValueError('Unable to find node %r' % node_id)
|
||||
raise NotFound('Unable to find node %r' % node_id)
|
||||
|
||||
return finders.find_url_for_node(node)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user