# HG changeset patch # User Ludovic Chabant # Date 1419733050 28800 # Node ID 55910ab4bfea3488c84c958fb7500ba38e810cae # Parent 683baa977d978710be9f0a2e6d6d5bcd1664a263 First draft of the `prose` page source. diff -r 683baa977d97 -r 55910ab4bfea piecrust/plugins/builtin.py --- a/piecrust/plugins/builtin.py Sat Dec 27 18:14:46 2014 -0800 +++ b/piecrust/plugins/builtin.py Sat Dec 27 18:17:30 2014 -0800 @@ -23,6 +23,7 @@ from piecrust.sources.posts import (FlatPostsSource, ShallowPostsSource, HierarchyPostsSource) from piecrust.sources.autoconfig import AutoConfigSource +from piecrust.sources.prose import ProseSource from piecrust.templating.jinjaengine import JinjaTemplateEngine @@ -58,7 +59,8 @@ FlatPostsSource, ShallowPostsSource, HierarchyPostsSource, - AutoConfigSource] + AutoConfigSource, + ProseSource] def getDataProviders(self): return [ diff -r 683baa977d97 -r 55910ab4bfea piecrust/sources/prose.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/piecrust/sources/prose.py Sat Dec 27 18:17:30 2014 -0800 @@ -0,0 +1,50 @@ +import os +import os.path +import logging +from piecrust.sources.base import ( + SimplePageSource, SimplePaginationSourceMixin) + + +logger = logging.getLogger(__name__) + + +class ProseSource(SimplePageSource, + SimplePaginationSourceMixin): + SOURCE_NAME = 'prose' + + def __init__(self, app, name, config): + super(ProseSource, self).__init__(app, name, config) + self.config_recipe = config.get('config', {}) + + def buildPageFactories(self): + factories = super(ProseSource, self).buildPageFactories() + for f in factories: + f.metadata['config'] = self._makeConfig(f.path) + logger.debug(f.__dict__) + yield f + + def findPagePath(self, metadata, mode): + rel_path, metadata = super(ProseSource, self).findPagePath(metadata, mode) + if rel_path: + metadata['config'] = self._makeConfig(self.resolveRef(rel_path)) + return rel_path, metadata + + def _makeConfig(self, path): + c = dict(self.config_recipe) + if c.get('title') == '%first_line%': + 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 +