Mercurial > piecrust2
view piecrust/sources/generator.py @ 1188:a7c43131d871
bake: Fix file write flushing problem with Python 3.8+
Writing the cache files fails in Python 3.8 because it looks like flushing
behaviour has changed. We need to explicitly flush. And even then, in very
rare occurrences, it looks like it can still run into racing conditions,
so we do a very hacky and ugly "retry" loop when fetching cached data :(
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 15 Jun 2021 22:36:23 -0700 |
parents | d1095774bfcf |
children |
line wrap: on
line source
import io import time from werkzeug.utils import cached_property from piecrust.configuration import ConfigurationError from piecrust.sources.base import ContentSource, GeneratedContentException class GeneratorSourceBase(ContentSource): def __init__(self, app, name, config): super().__init__(app, name, config) source_name = config.get('source') if source_name is None: raise ConfigurationError( "Taxonomy source '%s' requires an inner source." % name) self._inner_source_name = source_name self._raw_item = '' self._raw_item_time = time.time() @cached_property def inner_source(self): return self.app.getSource(self._inner_source_name) def getContents(self, group): # Our content is procedurally generated from other content sources, # so we really don't support listing anything here -- it would be # typically quite costly. raise GeneratedContentException() def openItem(self, item, mode='r', **kwargs): return io.StringIO(self._raw_item) def getItemMtime(self, item): return self._raw_item_time