diff piecrust/dataproviders/pageiterator.py @ 1153:a9a592f655e3

config: Add setting for enabling baking or serving posts in the future.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 19 Jan 2019 17:41:30 -0800
parents d4e0c53aa6e8
children
line wrap: on
line diff
--- a/piecrust/dataproviders/pageiterator.py	Sat Jan 19 17:40:13 2019 -0800
+++ b/piecrust/dataproviders/pageiterator.py	Sat Jan 19 17:41:30 2019 -0800
@@ -266,6 +266,16 @@
                 # the `draft` setting.
                 draft_setting = app.config['baker/no_bake_setting']
                 self._it = NoDraftsIterator(self._it, draft_setting)
+
+                if not app.config.get('baker/bake_future'):
+                    # Don't bake pages from the future.
+                    self._it = PruneFutureIterator(self._it,
+                                                   app.env.start_datetime)
+            elif app.config.get('server/is_serving'):
+                if not app.config.get('server/serve_future'):
+                    # Don't serve pages from the future.
+                    self._it = PruneFutureIterator(self._it,
+                                                   app.env.start_datetime)
         else:
             self._it = GenericSourceIterator(self._source)
 
@@ -425,6 +435,17 @@
         yield from filter(lambda i: not i.config.get(nds), self.it)
 
 
+class PruneFutureIterator:
+    def __init__(self, source, now_dt):
+        self.it = source
+        self.now_dt = now_dt
+
+    def __iter__(self):
+        now_dt = self.now_dt
+        for i in self.it:
+            if i.datetime <= now_dt:
+                yield i
+
 class PaginationDataBuilderIterator:
     def __init__(self, it):
         self.it = it