Mercurial > piecrust2
view piecrust/taxonomies.py @ 363:dd25bd3ce1f9
serve: Refactoring and fixes to be able to serve taxonomy pages.
* Page sources' `findPagePath` is renamed to `findPageFactory`, so that it
also returns source metadata.
* Page refs now store possible hits more properly, and use the previous point
to also store metadata. As a result, they can also return a proper factory.
* Implement `findPageFactory` correctly in all built-in sources.
* When the Chef server matches a taxonomy page, get the source metadata from
the page ref in order to make a more proper page.
* Make the `getRoute(s)` functions explicitely say if they want taxonomy routes
or not.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 26 Apr 2015 15:07:40 -0700 |
parents | 6c5de6edacf7 |
children | e7b865f8f335 |
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_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