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):