comparison piecrust/dataproviders/blog.py @ 1088:c5f1936e9e89

data: Fix recently introduced bug with blog data provider.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Feb 2018 23:46:37 -0800
parents d464c1b1d686
children
comparison
equal deleted inserted replaced
1087:20f779b5591b 1088:c5f1936e9e89
1 import time 1 import time
2 import collections.abc
2 from piecrust.dataproviders.base import DataProvider 3 from piecrust.dataproviders.base import DataProvider
3 from piecrust.dataproviders.pageiterator import PageIterator 4 from piecrust.dataproviders.pageiterator import PageIterator
4 from piecrust.sources.list import ListSource 5 from piecrust.sources.list import ListSource
5 from piecrust.sources.taxonomy import Taxonomy 6 from piecrust.sources.taxonomy import Taxonomy
6 7
7 8
8 class BlogDataProvider(DataProvider): 9 class BlogDataProvider(DataProvider, collections.abc.Mapping):
9 PROVIDER_NAME = 'blog' 10 PROVIDER_NAME = 'blog'
10 11
11 debug_render_doc = """Provides a list of blog posts and yearly/monthly 12 debug_render_doc = """Provides a list of blog posts and yearly/monthly
12 archives.""" 13 archives."""
13 debug_render_dynamic = (['_debugRenderTaxonomies'] + 14 debug_render_dynamic = (['_debugRenderTaxonomies'] +
40 return self._yearly 41 return self._yearly
41 42
42 @property 43 @property
43 def months(self): 44 def months(self):
44 self._buildArchives() 45 self._buildArchives()
45 return self._montly 46 return self._monthly
46 47
47 @property 48 @property
48 def taxonomies(self): 49 def taxonomies(self):
49 return list(self._app.config.get('site/taxonomies').keys()) 50 return list(self._app.config.get('site/taxonomies').keys())
50 51
51 def __getitem__(self, name): 52 def __getitem__(self, name):
53 if name in ['posts', 'years', 'months', 'taxonomies']:
54 return getattr(self, name)
55
52 self._buildArchives() 56 self._buildArchives()
53 return self._taxonomies[name] 57 return self._taxonomies[name]
54 58
55 def __getattr__(self, name): 59 def __getattr__(self, name):
56 self._buildArchives() 60 self._buildArchives()
57 try: 61 try:
58 return self._taxonomies[name] 62 return self._taxonomies[name]
59 except KeyError: 63 except KeyError:
60 raise AttributeError("No such taxonomy: %s" % name) 64 raise AttributeError("No such taxonomy: %s" % name)
65
66 def __len__(self):
67 return 4 + len(self.taxonomies)
68
69 def __iter__(self):
70 yield 'posts'
71 yield 'years'
72 yield 'months'
73 yield 'taxonomies'
74 yield from self.taxonomies
61 75
62 def _debugRenderTaxonomies(self): 76 def _debugRenderTaxonomies(self):
63 return self.taxonomies 77 return self.taxonomies
64 78
65 def _buildPosts(self): 79 def _buildPosts(self):