Mercurial > wikked
changeset 97:fa8f18c9be9a
Made the resolver handle errors a bit better.
Fixed bad behaviour with how parameters are passed and used for includes.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 21 Apr 2013 08:10:15 -0700 |
parents | c4e907b51237 |
children | 8f785c5858c6 |
files | wikked/resolver.py |
diffstat | 1 files changed, 23 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/resolver.py Sun Apr 21 08:08:33 2013 -0700 +++ b/wikked/resolver.py Sun Apr 21 08:10:15 2013 -0700 @@ -74,9 +74,10 @@ '__empty': "<p>No page matches the query.</p>\n" } - def __init__(self, page, ctx=None): + def __init__(self, page, ctx=None, parameters=None): self.page = page self.ctx = ctx + self.parameters = parameters self.output = None self.env = None @@ -89,10 +90,28 @@ return self.page == self.ctx.root_page def run(self): + try: + return self._unsafeRun() + except Exception as e: + self.output = ResolveOutput(self.page) + self.output.text = u'<div class="error">%s</div>' % e + return self.output + + def _unsafeRun(self): # Create the context object. if not self.ctx: self.ctx = ResolveContext(self.page) + # Create default parameters. + if not self.parameters: + self.parameters = { + '__page': { + 'url': self.page.url, + 'title': self.page.title + }, + '__args': [] + } + # Create the output object, so it can be referenced and merged # with child outputs (from included pages). self.output = ResolveOutput(self.page) @@ -139,12 +158,7 @@ # Run text through templating and formatting if this # is the root page. if self.is_root: - parameters = { - '__page': { - 'url': self.page.url, - 'title': self.page.title - } - } + parameters = dict(self.parameters) final_text = self._renderTemplate(final_text, parameters, error_url=self.page.url) formatter = self._getFormatter(self.page.extension) final_text = formatter(final_text) @@ -165,13 +179,7 @@ raise CircularIncludeError("Circular include detected at: %s" % include_url, self.ctx.url_trail) # Parse the templating parameters. - parameters = { - '__page': { - 'url': self.ctx.root_page.url, - 'title': self.ctx.root_page.title - }, - '__args': [] - } + parameters = dict(self.parameters) if args: # For each parameter, we render templated expressions in case # they depend on parent paremeters passed to the call. @@ -190,7 +198,7 @@ # formatted text. page = self.wiki.getPage(include_url) self.ctx.url_trail.add(page.url) - child = PageResolver(page, self.ctx) + child = PageResolver(page, self.ctx, parameters) child_output = child.run() self.output.add(child_output) @@ -338,4 +346,3 @@ if title is None: title = value return '<a class="wiki-link" data-wiki-url="%s" data-action="edit">%s</a>' % (value, title) -