changeset 581:911a054f4fbd

bake: Add support for a "known" page setting that excludes it from the bake. (this is useful to set pages as "drafts")
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 30 Dec 2015 14:49:44 -0800
parents c7ac7dc2fe73
children d8d9e0424a72
files piecrust/data/iterators.py
diffstat 1 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/data/iterators.py	Wed Dec 30 14:47:23 2015 -0800
+++ b/piecrust/data/iterators.py	Wed Dec 30 14:49:44 2015 -0800
@@ -1,5 +1,5 @@
 import logging
-from piecrust.data.filters import PaginationFilter
+from piecrust.data.filters import PaginationFilter, IsFilterClause, NotClause
 from piecrust.environment import AbortedSourceUseError
 from piecrust.events import Event
 from piecrust.sources.base import PageSource
@@ -132,6 +132,20 @@
             if src_it is not None:
                 self._pages = src_it
 
+        # If we're currently baking, apply the default baker filter
+        # to exclude things like draft posts.
+        if (isinstance(source, PageSource) and
+                source.app.config.get('baker/is_baking')):
+            setting_name = source.app.config.get('baker/no_bake_setting',
+                                                 'draft')
+            accessor = self._getSettingAccessor()
+            draft_filter = PaginationFilter(accessor)
+            draft_filter.root_clause = NotClause()
+            draft_filter.root_clause.addClause(
+                    IsFilterClause(setting_name, True))
+            self._simpleNonSortedWrap(
+                    PaginationFilterIterator, draft_filter)
+
         # Apply any filter first, before we start sorting or slicing.
         if pagination_filter is not None:
             self._simpleNonSortedWrap(PaginationFilterIterator,