Mercurial > piecrust2
view piecrust/sources/prose.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 | f130365568ff |
children | 4b1019bb2533 |
line wrap: on
line source
import os import os.path import logging from piecrust.sources.base import MODE_CREATING from piecrust.sources.default import DefaultPageSource logger = logging.getLogger(__name__) class ProseSource(DefaultPageSource): SOURCE_NAME = 'prose' def __init__(self, app, name, config): super(ProseSource, self).__init__(app, name, config) self.config_recipe = config.get('config', {}) def _populateMetadata(self, rel_path, metadata, mode=None): metadata['config'] = self._makeConfig(rel_path, mode) def _makeConfig(self, rel_path, mode): c = dict(self.config_recipe) if c.get('title') == '%first_line%' and mode != MODE_CREATING: path = os.path.join(self.fs_endpoint_path, rel_path) c['title'] = get_first_line(path) return c def get_first_line(path): with open(path, 'r') as f: while True: l = f.readline() if not l: break l = l.strip() if not l: continue return l return None