Mercurial > piecrust2
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