Mercurial > piecrust2
changeset 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 | 74c0c7483986 |
children | aad9b5a0a809 |
files | piecrust/__init__.py piecrust/appconfigdefaults.py piecrust/dataproviders/pageiterator.py piecrust/environment.py |
diffstat | 4 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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,
--- 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
--- 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')