comparison piecrust/sources/base.py @ 114:371a6c879ab9

When possible, try and batch-load pages so we only lock once.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 19 Oct 2014 00:33:28 -0700
parents b3ce11b2cf36
children 8d16ca75075f
comparison
equal deleted inserted replaced
113:de257cc40ce1 114:371a6c879ab9
22 22
23 logger = logging.getLogger(__name__) 23 logger = logging.getLogger(__name__)
24 24
25 25
26 page_ref_pattern = re.compile(r'(?P<src>[\w]+)\:(?P<path>.*?)(;|$)') 26 page_ref_pattern = re.compile(r'(?P<src>[\w]+)\:(?P<path>.*?)(;|$)')
27
28
29 def build_pages(app, factories):
30 with app.env.page_repository.startBatchGet():
31 for f in factories:
32 yield f.buildPage()
27 33
28 34
29 class PageNotFoundError(Exception): 35 class PageNotFoundError(Exception):
30 pass 36 pass
31 37
204 @property 210 @property
205 def root_dir(self): 211 def root_dir(self):
206 if self.is_theme_source: 212 if self.is_theme_source:
207 return self.app.theme_dir 213 return self.app.theme_dir
208 return self.app.root_dir 214 return self.app.root_dir
215
216 def getPages(self):
217 return build_pages(self.app, self.getPageFactories())
209 218
210 def getPageFactories(self): 219 def getPageFactories(self):
211 if self._factories is None: 220 if self._factories is None:
212 self._factories = list(self.buildPageFactories()) 221 self._factories = list(self.buildPageFactories())
213 return self._factories 222 return self._factories
381 self.source = source 390 self.source = source
382 self.it = None # This is to permit recursive traversal of the 391 self.it = None # This is to permit recursive traversal of the
383 # iterator chain. It acts as the end. 392 # iterator chain. It acts as the end.
384 393
385 def __iter__(self): 394 def __iter__(self):
386 for factory in self.source.getPageFactories(): 395 return self.source.getPages()
387 yield factory.buildPage()
388 396
389 397
390 class DateSortIterator(object): 398 class DateSortIterator(object):
391 def __init__(self, it, reverse=True): 399 def __init__(self, it, reverse=True):
392 self.it = it 400 self.it = it