comparison piecrust/data/pagedata.py @ 852:4850f8c21b6e

core: Start of the big refactor for PieCrust 3.0. * Everything is a `ContentSource`, including assets directories. * Most content sources are subclasses of the base file-system source. * A source is processed by a "pipeline", and there are 2 built-in pipelines, one for assets and one for pages. The asset pipeline is vaguely functional, but the page pipeline is completely broken right now. * Rewrite the baking process as just running appropriate pipelines on each content item. This should allow for better parallelization.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 17 May 2017 00:11:48 -0700
parents e35407c60e00
children 08e02c2a2a1a
comparison
equal deleted inserted replaced
851:2c7e57d80bba 852:4850f8c21b6e
73 except LazyPageConfigLoaderHasNoValue: 73 except LazyPageConfigLoaderHasNoValue:
74 raise 74 raise
75 except Exception as ex: 75 except Exception as ex:
76 logger.exception(ex) 76 logger.exception(ex)
77 raise Exception( 77 raise Exception(
78 "Error while loading attribute '%s' for: %s" % 78 "Error while loading attribute '%s' for: %s" %
79 (name, self._page.rel_path)) from ex 79 (name, self._page.rel_path)) from ex
80 80
81 # Forget this loader now that it served its purpose. 81 # Forget this loader now that it served its purpose.
82 try: 82 try:
83 del self._loaders[name] 83 del self._loaders[name]
84 except KeyError: 84 except KeyError:
93 except LazyPageConfigLoaderHasNoValue: 93 except LazyPageConfigLoaderHasNoValue:
94 raise 94 raise
95 except Exception as ex: 95 except Exception as ex:
96 logger.exception(ex) 96 logger.exception(ex)
97 raise Exception( 97 raise Exception(
98 "Error while loading attribute '%s' for: %s" % 98 "Error while loading attribute '%s' for: %s" %
99 (name, self._page.rel_path)) from ex 99 (name, self._page.rel_path)) from ex
100 # We always keep the wildcard loader in the loaders list. 100 # We always keep the wildcard loader in the loaders list.
101 return self._values[name] 101 return self._values[name]
102 102
103 raise LazyPageConfigLoaderHasNoValue("No such value: %s" % name) 103 raise LazyPageConfigLoaderHasNoValue("No such value: %s" % name)
104 104
114 def _mapLoader(self, attr_name, loader, override_existing=False): 114 def _mapLoader(self, attr_name, loader, override_existing=False):
115 assert loader is not None 115 assert loader is not None
116 116
117 if not override_existing and attr_name in self._loaders: 117 if not override_existing and attr_name in self._loaders:
118 raise Exception( 118 raise Exception(
119 "A loader has already been mapped for: %s" % attr_name) 119 "A loader has already been mapped for: %s" % attr_name)
120 self._loaders[attr_name] = loader 120 self._loaders[attr_name] = loader
121 121
122 def _mapValue(self, attr_name, value, override_existing=False): 122 def _mapValue(self, attr_name, value, override_existing=False):
123 loader = lambda _, __: value 123 self._mapLoader(
124 self._mapLoader(attr_name, loader, override_existing=override_existing) 124 attr_name,
125 lambda _, __: value,
126 override_existing=override_existing)
125 127
126 def _ensureLoaded(self): 128 def _ensureLoaded(self):
127 if self._is_loaded: 129 if self._is_loaded:
128 return 130 return
129 131
131 try: 133 try:
132 self._load() 134 self._load()
133 except Exception as ex: 135 except Exception as ex:
134 logger.exception(ex) 136 logger.exception(ex)
135 raise Exception( 137 raise Exception(
136 "Error while loading data for: %s" % 138 "Error while loading data for: %s" %
137 self._page.rel_path) from ex 139 self._page.rel_path) from ex
138 140
139 def _load(self): 141 def _load(self):
140 pass 142 pass
141 143
142 def _debugRenderKeys(self): 144 def _debugRenderKeys(self):
150 152
151 class PageData(LazyPageConfigData): 153 class PageData(LazyPageConfigData):
152 """ Template data for a page. 154 """ Template data for a page.
153 """ 155 """
154 def __init__(self, page, ctx): 156 def __init__(self, page, ctx):
155 super(PageData, self).__init__(page) 157 super().__init__(page)
156 self._ctx = ctx 158 self._ctx = ctx
157 159
158 def _load(self): 160 def _load(self):
159 page = self._page 161 page = self._page
160 dt = page.datetime 162 dt = page.datetime