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