Mercurial > piecrust2
diff piecrust/data/provider.py @ 711:ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
* Taxonomies are now implemented one or more `TaxonomyGenerator`s.
* A `BlogArchivesGenerator` stub is there but non-functional.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 26 May 2016 19:52:47 -0700 |
parents | 703ea5d76f33 |
children | e4dcef2d5640 |
line wrap: on
line diff
--- a/piecrust/data/provider.py Thu May 26 19:46:28 2016 -0700 +++ b/piecrust/data/provider.py Thu May 26 19:52:47 2016 -0700 @@ -1,6 +1,7 @@ import time import collections.abc from piecrust.data.iterators import PageIterator +from piecrust.generation.taxonomy import Taxonomy from piecrust.sources.array import ArraySource @@ -72,27 +73,33 @@ self._taxonomies = {} self._ctx_set = False + @property + def posts(self): + return self._posts() + + @property + def years(self): + return self._buildYearlyArchive() + + @property + def months(self): + return self._buildMonthlyArchive() + def __getitem__(self, name): - if name == 'posts': - return self._posts() - elif name == 'years': - return self._buildYearlyArchive() - elif name == 'months': - return self._buildMonthlyArchive() - elif self._source.app.getTaxonomy(name) is not None: + if self._source.app.config.get('site/taxonomies/' + name) is not None: return self._buildTaxonomy(name) raise KeyError("No such item: %s" % name) def __iter__(self): keys = ['posts', 'years', 'months'] - keys += [t.name for t in self._source.app.taxonomies] + keys += list(self._source.app.config.get('site/taxonomies').keys()) return iter(keys) def __len__(self): - return 3 + len(self._source.app.taxonomies) + return 3 + len(self._source.app.config.get('site/taxonomies')) def _debugRenderTaxonomies(self): - return [t.name for t in self._source.app.taxonomies] + return list(self._source.app.config.get('site/taxonomies').keys()) def _posts(self): it = PageIterator(self._source, current_page=self._page) @@ -152,19 +159,19 @@ if tax_name in self._taxonomies: return self._taxonomies[tax_name] - tax_info = self._page.app.getTaxonomy(tax_name) - setting_name = tax_info.setting_name + tax_cfg = self._page.app.config.get('site/taxonomies/' + tax_name) + tax = Taxonomy(tax_name, tax_cfg) posts_by_tax_value = {} for post in self._source.getPages(): - tax_values = post.config.get(setting_name) + tax_values = post.config.get(tax.setting_name) if tax_values is None: continue if not isinstance(tax_values, list): tax_values = [tax_values] for val in tax_values: - posts_by_tax_value.setdefault(val, []) - posts_by_tax_value[val].append(post) + posts = posts_by_tax_value.setdefault(val, []) + posts.append(post) entries = [] for value, ds in posts_by_tax_value.items():