view piecrust/taxonomies.py @ 447:aefe70229fdd

bake: Commonize worker pool code between html and asset baking. The `workerpool` package now defines a generic-ish worker pool. It's similar to the Python framework pool but with a simpler use-case (only one way to queue jobs) and support for workers to send a final "report" to the master process, which we use to get timing information here. The rest of the changes basically remove a whole bunch of duplicated code that's not needed anymore.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 05 Jul 2015 00:09:41 -0700
parents e7b865f8f335
children
line wrap: on
line source

from piecrust.sources.pageref import PageRef, PageNotFoundError


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

    @property
    def setting_name(self):
        if self.is_multiple:
            return self.name
        return self.term_name

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

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

        ref_path = source.getTaxonomyPageRef(self.name)
        page_ref = PageRef(self.app, ref_path)
        self._source_page_refs[source.name] = page_ref
        return page_ref