Mercurial > piecrust2
comparison piecrust/app.py @ 853:f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
The asset pipeline is still the only function pipeline at this point.
* No more `QualifiedPage`, and several other pieces of code deleted.
* Data providers are simpler and more focused. For instance, the page iterator
doesn't try to support other types of items.
* Route parameters are proper known source metadata to remove the confusion
between the two.
* Make the baker and pipeline more correctly manage records and record
histories.
* Add support for record collapsing and deleting stale outputs in the asset
pipeline.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 21 May 2017 00:06:59 -0700 |
parents | 4850f8c21b6e |
children | 08e02c2a2a1a |
comparison
equal
deleted
inserted
replaced
852:4850f8c21b6e | 853:f070a4fc033c |
---|---|
32 if cache: | 32 if cache: |
33 self.cache = ExtensibleCache(self.cache_dir) | 33 self.cache = ExtensibleCache(self.cache_dir) |
34 else: | 34 else: |
35 self.cache = NullExtensibleCache() | 35 self.cache = NullExtensibleCache() |
36 | 36 |
37 if env is None: | |
38 env = StandardEnvironment() | |
37 self.env = env | 39 self.env = env |
38 if self.env is None: | 40 env.initialize(self) |
39 self.env = StandardEnvironment() | 41 |
40 self.env.initialize(self) | 42 stats = env.stats |
41 self.env.stats.registerTimer('SiteConfigLoad') | 43 stats.registerTimer('SiteConfigLoad') |
42 self.env.stats.registerTimer('PageLoad') | 44 stats.registerTimer('PageLoad') |
43 self.env.stats.registerTimer("PageDataBuild") | 45 stats.registerTimer("PageDataBuild") |
44 self.env.stats.registerTimer("BuildRenderData") | 46 stats.registerTimer("BuildRenderData") |
45 self.env.stats.registerTimer("PageRender") | 47 stats.registerTimer("PageRender") |
46 self.env.stats.registerTimer("PageRenderSegments") | 48 stats.registerTimer("PageRenderSegments") |
47 self.env.stats.registerTimer("PageRenderLayout") | 49 stats.registerTimer("PageRenderLayout") |
48 self.env.stats.registerTimer("PageSerialize") | 50 stats.registerTimer("PageSerialize") |
49 | 51 |
50 @cached_property | 52 @cached_property |
51 def config(self): | 53 def config(self): |
52 logger.debug("Creating site configuration...") | 54 logger.debug("Creating site configuration...") |
53 start_time = time.perf_counter() | 55 start_time = time.perf_counter() |
191 | 193 |
192 def getSource(self, source_name): | 194 def getSource(self, source_name): |
193 for source in self.sources: | 195 for source in self.sources: |
194 if source.name == source_name: | 196 if source.name == source_name: |
195 return source | 197 return source |
196 return None | 198 |
197 | 199 from piecrust.sources.base import SourceNotFoundError |
198 def getSourceRoutes(self, source_name): | 200 raise SourceNotFoundError(source_name) |
201 | |
202 def getSourceRoute(self, source_name): | |
199 for route in self.routes: | 203 for route in self.routes: |
200 if route.source_name == source_name: | 204 if route.source_name == source_name: |
201 yield route | |
202 | |
203 def getSourceRoute(self, source_name, route_params): | |
204 for route in self.getSourceRoutes(source_name): | |
205 if (route_params is None or | |
206 route.matchesParameters(route_params)): | |
207 return route | 205 return route |
208 return None | 206 |
207 from piecrust.routing import RouteNotFoundError | |
208 raise RouteNotFoundError(source_name) | |
209 | 209 |
210 def getPublisher(self, target_name): | 210 def getPublisher(self, target_name): |
211 for pub in self.publishers: | 211 for pub in self.publishers: |
212 if pub.target == target_name: | 212 if pub.target == target_name: |
213 return pub | 213 return pub |
214 return None | 214 return None |
215 | 215 |
216 def getPage(self, content_item): | 216 def getPage(self, source, content_item): |
217 cache_key = content_item.spec | 217 cache_key = content_item.spec |
218 return self.env.page_repository.get( | 218 return self.env.page_repository.get( |
219 cache_key, | 219 cache_key, |
220 lambda: Page(content_item)) | 220 lambda: Page(source, content_item)) |
221 | 221 |
222 def _get_dir(self, default_rel_dir): | 222 def _get_dir(self, default_rel_dir): |
223 abs_dir = os.path.join(self.root_dir, default_rel_dir) | 223 abs_dir = os.path.join(self.root_dir, default_rel_dir) |
224 if os.path.isdir(abs_dir): | 224 if os.path.isdir(abs_dir): |
225 return abs_dir | 225 return abs_dir |