comparison piecrust/serving/server.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 33ab9badfd7a
children 4850f8c21b6e e053a27e5aae
comparison
equal deleted inserted replaced
710:e85f29b28b84 711:ab5c6a8ae90a
181 raise MultipleNotFound(msg, req_page.not_found_errors) 181 raise MultipleNotFound(msg, req_page.not_found_errors)
182 182
183 # We have a page, let's try to render it. 183 # We have a page, let's try to render it.
184 render_ctx = PageRenderingContext(qp, 184 render_ctx = PageRenderingContext(qp,
185 page_num=req_page.page_num, 185 page_num=req_page.page_num,
186 force_render=True) 186 force_render=True,
187 if qp.route.taxonomy_name is not None: 187 is_from_request=True)
188 taxonomy = app.getTaxonomy(qp.route.taxonomy_name) 188 if qp.route.is_generator_route:
189 tax_terms = qp.route.getTaxonomyTerms(qp.route_metadata) 189 qp.route.generator.prepareRenderContext(render_ctx)
190 render_ctx.setTaxonomyFilter(tax_terms, needs_slugifier=True)
191 190
192 # See if this page is known to use sources. If that's the case, 191 # See if this page is known to use sources. If that's the case,
193 # just don't use cached rendered segments for that page (but still 192 # just don't use cached rendered segments for that page (but still
194 # use them for pages that are included in it). 193 # use them for pages that are included in it).
195 uri = qp.getUri() 194 uri = qp.getUri()
196 entry = self._page_record.getEntry(uri, req_page.page_num) 195 entry = self._page_record.getEntry(uri, req_page.page_num)
197 if (qp.route.taxonomy_name is not None or entry is None or 196 if (qp.route.is_generator_route or entry is None or
198 entry.used_source_names): 197 entry.used_source_names):
199 cache_key = '%s:%s' % (uri, req_page.page_num) 198 cache_key = '%s:%s' % (uri, req_page.page_num)
200 app.env.rendered_segments_repository.invalidate(cache_key) 199 app.env.rendered_segments_repository.invalidate(cache_key)
201 200
202 # Render the page. 201 # Render the page.
203 rendered_page = render_page(render_ctx) 202 rendered_page = render_page(render_ctx)
204
205 # Check if this page is a taxonomy page that actually doesn't match
206 # anything.
207 if qp.route.taxonomy_name is not None:
208 paginator = rendered_page.data.get('pagination')
209 if (paginator and paginator.is_loaded and
210 len(paginator.items) == 0):
211 taxonomy = app.getTaxonomy(qp.route.taxonomy_name)
212 message = ("This URL matched a route for taxonomy '%s' but "
213 "no pages have been found to have it. This page "
214 "won't be generated by a bake." % taxonomy.name)
215 raise NotFound(message)
216 203
217 # Remember stuff for next time. 204 # Remember stuff for next time.
218 if entry is None: 205 if entry is None:
219 entry = ServeRecordPageEntry(req_page.req_path, req_page.page_num) 206 entry = ServeRecordPageEntry(req_page.req_path, req_page.page_num)
220 self._page_record.addEntry(entry) 207 self._page_record.addEntry(entry)