# HG changeset patch # User Ludovic Chabant # Date 1547948490 28800 # Node ID a9a592f655e37d351d2c60190455ee4a94ece721 # Parent 74c0c7483986834ae05db30d498c25777dd9fa8f config: Add setting for enabling baking or serving posts in the future. diff -r 74c0c7483986 -r a9a592f655e3 piecrust/__init__.py --- a/piecrust/__init__.py Sat Jan 19 17:40:13 2019 -0800 +++ b/piecrust/__init__.py Sat Jan 19 17:41:30 2019 -0800 @@ -19,7 +19,7 @@ PIECRUST_URL = 'https://bolt80.com/piecrust/' -CACHE_VERSION = 33 +CACHE_VERSION = 34 try: from piecrust.__version__ import APP_VERSION diff -r 74c0c7483986 -r a9a592f655e3 piecrust/appconfigdefaults.py --- a/piecrust/appconfigdefaults.py Sat Jan 19 17:40:13 2019 -0800 +++ b/piecrust/appconfigdefaults.py Sat Jan 19 17:41:30 2019 -0800 @@ -32,10 +32,12 @@ }), 'baker': collections.OrderedDict({ 'no_bake_setting': 'draft', + 'bake_future': False, 'workers': None, 'batch_size': None }), 'server': collections.OrderedDict({ + 'serve_future': True, 'enable_gzip': True, 'cache_time': 28800, 'enable_debug_info': True, diff -r 74c0c7483986 -r a9a592f655e3 piecrust/dataproviders/pageiterator.py --- 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 diff -r 74c0c7483986 -r a9a592f655e3 piecrust/environment.py --- a/piecrust/environment.py Sat Jan 19 17:40:13 2019 -0800 +++ b/piecrust/environment.py Sat Jan 19 17:41:30 2019 -0800 @@ -1,5 +1,6 @@ import time import logging +import datetime import contextlib @@ -79,6 +80,7 @@ self.app = None self.start_time = None + self.start_datetime = None self.was_cache_cleaned = False self.page_repository = MemCache() self.rendered_segments_repository = MemCache() @@ -94,6 +96,7 @@ def initialize(self, app): self.app = app self.start_time = time.perf_counter() + self.start_datetime = datetime.datetime.now() self.rendered_segments_repository.fs_cache = \ app.cache.getCache('renders')