Mercurial > piecrust2
comparison piecrust/sources/mixins.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 | 32c7c2d219d2 |
children | 4850f8c21b6e |
comparison
equal
deleted
inserted
replaced
710:e85f29b28b84 | 711:ab5c6a8ae90a |
---|---|
21 | 21 |
22 def __iter__(self): | 22 def __iter__(self): |
23 return self.source.getPages() | 23 return self.source.getPages() |
24 | 24 |
25 | 25 |
26 class SourceFactoryWithoutTaxonomiesIterator(object): | 26 class SourceFactoryWithoutGeneratorsIterator(object): |
27 def __init__(self, source): | 27 def __init__(self, source): |
28 self.source = source | 28 self.source = source |
29 self._taxonomy_pages = None | 29 self._generator_pages = None |
30 # See comment above. | 30 # See comment above. |
31 self.it = None | 31 self.it = None |
32 | 32 |
33 def __iter__(self): | 33 def __iter__(self): |
34 self._cacheTaxonomyPages() | 34 self._cacheGeneratorPages() |
35 for p in self.source.getPages(): | 35 for p in self.source.getPages(): |
36 if p.rel_path in self._taxonomy_pages: | 36 if p.rel_path in self._generator_pages: |
37 continue | 37 continue |
38 yield p | 38 yield p |
39 | 39 |
40 def _cacheTaxonomyPages(self): | 40 def _cacheGeneratorPages(self): |
41 if self._taxonomy_pages is not None: | 41 if self._generator_pages is not None: |
42 return | 42 return |
43 | 43 |
44 app = self.source.app | 44 app = self.source.app |
45 self._taxonomy_pages = set() | 45 self._generator_pages = set() |
46 for src in app.sources: | 46 for src in app.sources: |
47 for tax in app.taxonomies: | 47 for gen in app.generators: |
48 ref_spec = src.getTaxonomyPageRef(tax.name) | 48 for sn, rp in gen.page_ref.possible_split_ref_specs: |
49 page_ref = PageRef(app, ref_spec) | |
50 for sn, rp in page_ref.possible_split_ref_specs: | |
51 if sn == self.source.name: | 49 if sn == self.source.name: |
52 self._taxonomy_pages.add(rp) | 50 self._generator_pages.add(rp) |
53 | 51 |
54 | 52 |
55 class DateSortIterator(object): | 53 class DateSortIterator(object): |
56 def __init__(self, it, reverse=True): | 54 def __init__(self, it, reverse=True): |
57 self.it = it | 55 self.it = it |
80 """ | 78 """ |
81 def getItemsPerPage(self): | 79 def getItemsPerPage(self): |
82 return self.config['items_per_page'] | 80 return self.config['items_per_page'] |
83 | 81 |
84 def getSourceIterator(self): | 82 def getSourceIterator(self): |
85 if self.config.get('iteration_includes_taxonomies', False): | 83 if self.config.get('iteration_includes_generator_pages', False): |
86 return SourceFactoryIterator(self) | 84 return SourceFactoryIterator(self) |
87 return SourceFactoryWithoutTaxonomiesIterator(self) | 85 return SourceFactoryWithoutGeneratorsIterator(self) |
88 | 86 |
89 def getSorterIterator(self, it): | 87 def getSorterIterator(self, it): |
90 return DateSortIterator(it) | 88 return DateSortIterator(it) |
91 | 89 |
92 def getTailIterator(self, it): | 90 def getTailIterator(self, it): |