Mercurial > piecrust2
annotate piecrust/dataproviders/blog.py @ 868:8d25f76fce98
bake: Add ability to specify pipelines to exclude during the bake.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Mon, 12 Jun 2017 22:22:19 -0700 |
| parents | d231a10d18f9 |
| children | f4608e2e80ce |
| rev | line source |
|---|---|
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import time |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import collections.abc |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 from piecrust.dataproviders.base import DataProvider |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
4 from piecrust.dataproviders.pageiterator import PageIterator |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
5 from piecrust.sources.list import ListSource |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
6 from piecrust.sources.taxonomy import Taxonomy |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 class BlogDataProvider(DataProvider, collections.abc.Mapping): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 PROVIDER_NAME = 'blog' |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 debug_render_doc = """Provides a list of blog posts and yearly/monthly |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 archives.""" |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 debug_render_dynamic = (['_debugRenderTaxonomies'] + |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 DataProvider.debug_render_dynamic) |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
17 def __init__(self, source, page): |
|
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
18 super().__init__(source, page) |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
19 self._posts = None |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 self._yearly = None |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 self._monthly = None |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 self._taxonomies = {} |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
23 self._archives_built = False |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 self._ctx_set = False |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
26 def _addSource(self, source): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
27 raise Exception("The blog data provider doesn't support " |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
28 "combining multiple sources.") |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
29 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 def posts(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
32 self._buildPosts() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
33 return self._posts |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 def years(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
37 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
38 return self._yearly |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 def months(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
42 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
43 return self._montly |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 def __getitem__(self, name): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
46 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
47 return self._taxonomies[name] |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
49 def __getattr__(self, name): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
50 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
51 try: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
52 return self._taxonomies[name] |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
53 except KeyError: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
54 raise AttributeError("No such taxonomy: %s" % name) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 def __iter__(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
57 self._buildPosts() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
58 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
59 return ['posts', 'years', 'months'] + list(self._taxonomies.keys()) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 def __len__(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
62 self._buildPosts() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
63 self._buildArchives() |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
64 return 3 + len(self._taxonomies) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 def _debugRenderTaxonomies(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
67 return list(self._app.config.get('site/taxonomies').keys()) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
68 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
69 def _buildPosts(self): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
70 if self._posts is None: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
71 it = PageIterator(self._sources[0], current_page=self._page) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
72 it._iter_event += self._onIteration |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
73 self._posts = it |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
75 def _buildArchives(self): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
76 if self._archives_built: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
77 return |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
78 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
79 yearly_index = {} |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
80 monthly_index = {} |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
81 tax_index = {} |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
83 taxonomies = [] |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
84 tax_names = list(self._app.config.get('site/taxonomies').keys()) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
85 for tn in tax_names: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
86 tax_cfg = self._app.config.get('site/taxonomies/' + tn) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
87 taxonomies.append(Taxonomy(tn, tax_cfg)) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
88 tax_index[tn] = {} |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
90 app = self._app |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
91 page = self._page |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
92 source = self._sources[0] |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
93 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
94 for item in source.getAllContents(): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
95 post = app.getPage(source, item) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
96 |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 year = post.datetime.strftime('%Y') |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
98 month = post.datetime.strftime('%B %Y') |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 posts_this_year = yearly_index.get(year) |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 if posts_this_year is None: |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 timestamp = time.mktime( |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
103 (post.datetime.year, 1, 1, 0, 0, 0, 0, 0, -1)) |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
104 posts_this_year = BlogArchiveEntry( |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
105 source, page, year, timestamp) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 yearly_index[year] = posts_this_year |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
107 posts_this_year._items.append(post.content_item) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
109 posts_this_month = monthly_index.get(month) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 if posts_this_month is None: |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 timestamp = time.mktime( |
|
854
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
112 (post.datetime.year, post.datetime.month, 1, |
|
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
113 0, 0, 0, 0, 0, -1)) |
|
08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
114 posts_this_month = BlogArchiveEntry( |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
115 source, page, month, timestamp) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
116 monthly_index[month] = posts_this_month |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
117 posts_this_month._items.append(post.content_item) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
118 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
119 for tax in taxonomies: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
120 post_term = post.config.get(tax.setting_name) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
121 if post_term is None: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
122 continue |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
123 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
124 posts_this_tax = tax_index[tax.name] |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
125 if tax.is_multiple: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
126 for val in post_term: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
127 entry = posts_this_tax.get(val) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
128 if entry is None: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
129 entry = BlogTaxonomyEntry(source, page, val) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
130 posts_this_tax[val] = entry |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
131 entry._items.append(post.content_item) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
132 else: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
133 entry = posts_this_tax.get(val) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
134 if entry is None: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
135 entry = BlogTaxonomyEntry(source, page, post_term) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
136 posts_this_tax[val] = entry |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
137 entry._items.append(post.content_item) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
139 self._yearly = list(sorted( |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
140 yearly_index.values(), |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
141 key=lambda e: e.timestamp, reverse=True)) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
142 self._monthly = list(sorted( |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
143 monthly_index.values(), |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
144 key=lambda e: e.timestamp, reverse=True)) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
145 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
146 self._taxonomies = {} |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
147 for tax_name, entries in tax_index.items(): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
148 self._taxonomies[tax_name] = list(entries.values()) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
149 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
150 self._onIteration(None) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
151 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
152 self._archives_built = True |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
153 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
154 def _onIteration(self, it): |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
155 if not self._ctx_set: |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
156 rcs = self._app.env.render_ctx_stack |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
157 if rcs.current_ctx: |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
158 rcs.current_ctx.addUsedSource(self._sources[0]) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
159 self._ctx_set = True |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
160 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
161 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
162 class BlogArchiveEntry: |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
163 debug_render = ['name', 'timestamp', 'posts'] |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
164 debug_render_invoke = ['name', 'timestamp', 'posts'] |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
165 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
166 def __init__(self, source, page, name, timestamp): |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
167 self.name = name |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
168 self.timestamp = timestamp |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
169 self._source = source |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
170 self._page = page |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
171 self._items = [] |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
172 self._iterator = None |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
173 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
174 def __str__(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
175 return self.name |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
176 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
177 def __int__(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
178 return int(self.name) |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
179 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
180 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
181 def posts(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
182 self._load() |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
183 self._iterator.reset() |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
184 return self._iterator |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
185 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
186 def _load(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
187 if self._iterator is not None: |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
188 return |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
189 |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
190 src = ListSource(self._source, self._items) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
191 self._iterator = PageIterator(src, current_page=self._page) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
192 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
193 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
194 class BlogTaxonomyEntry: |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
195 debug_render = ['name', 'post_count', 'posts'] |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
196 debug_render_invoke = ['name', 'post_count', 'posts'] |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
197 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
198 def __init__(self, source, page, term): |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
199 self.term = term |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
200 self._source = source |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
201 self._page = page |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
202 self._items = [] |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
203 self._iterator = None |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
204 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
205 def __str__(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
206 return self.term |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
207 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
208 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
209 def name(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
210 return self.term |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
211 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
212 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
213 def posts(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
214 self._load() |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
215 self._iterator.reset() |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
216 return self._iterator |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
217 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
218 @property |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
219 def post_count(self): |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
220 return len(self._items) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
221 |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
222 def _load(self): |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
223 if self._iterator is not None: |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
224 return |
|
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
225 |
|
857
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
226 src = ListSource(self._source, self._items) |
|
d231a10d18f9
refactor: Make the data providers and blog archives source functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
854
diff
changeset
|
227 self._iterator = PageIterator(src, current_page=self._page) |
|
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
228 |
