view piecrust/taxonomies.py @ 173:0a86a7a6b284

routes: Actually match metadata when finding routes, fix problems with paths. When we look for a route that matches a given page, we now look at the source metadata that comes with that page, and compare it to the metadata we need to build URIs. Also, when matching URIs, we handle the case where a 'path'-component in our pattern may be completely empty, and thus we may be missing some trailing slashes in the URI.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 03 Jan 2015 21:10:44 -0800
parents f485ba500df3
children f130365568ff
line wrap: on
line source

from piecrust.sources.base import PageRef, PageNotFoundError


class Taxonomy(object):
    def __init__(self, app, name, config):
        self.app = app
        self.name = name
        self.term_name = config['term']
        self.is_multiple = config['multiple']
        self.page_ref = config['page']
        self._source_page_refs = {}

    def resolvePagePath(self, source_name):
        pr = self.getPageRef(source_name)
        try:
            return pr.path
        except PageNotFoundError:
            return None

    def getPageRef(self, source_name):
        if source_name in self._source_page_refs:
            return self._source_page_refs[source_name]

        source = self.app.getSource(source_name)
        ref_path = (source.getTaxonomyPageRef(self.name) or
                '%s:%s' % (source_name, self.page_ref))
        page_ref = PageRef(self.app, ref_path)
        self._source_page_refs[source_name] = page_ref
        return page_ref