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