comparison piecrust/data/builder.py @ 420:f1b759c188b0

internal: Optimize page data building. Instead of loading the page to get its configuration, use a lazy-loader.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 20 Jun 2015 23:27:04 -0700
parents 9caaf78a17db
children 32c7c2d219d2
comparison
equal deleted inserted replaced
419:6801ad5aa1d4 420:f1b759c188b0
4 import logging 4 import logging
5 from werkzeug.utils import cached_property 5 from werkzeug.utils import cached_property
6 from piecrust import APP_VERSION 6 from piecrust import APP_VERSION
7 from piecrust.configuration import merge_dicts 7 from piecrust.configuration import merge_dicts
8 from piecrust.data.assetor import Assetor 8 from piecrust.data.assetor import Assetor
9 from piecrust.data.base import LazyPageConfigData
9 from piecrust.data.debug import build_debug_info 10 from piecrust.data.debug import build_debug_info
10 from piecrust.data.linker import PageLinkerData 11 from piecrust.data.linker import PageLinkerData
11 from piecrust.data.paginator import Paginator 12 from piecrust.data.paginator import Paginator
12 from piecrust.uriutil import split_sub_uri 13 from piecrust.uriutil import split_sub_uri
13 14
35 app = ctx.app 36 app = ctx.app
36 page = ctx.page 37 page = ctx.page
37 first_uri, _ = split_sub_uri(app, ctx.uri) 38 first_uri, _ = split_sub_uri(app, ctx.uri)
38 39
39 pc_data = PieCrustData() 40 pc_data = PieCrustData()
41 config_data = LazyPageConfigData(page)
40 pgn_source = ctx.pagination_source or get_default_pagination_source(page) 42 pgn_source = ctx.pagination_source or get_default_pagination_source(page)
41 paginator = Paginator(page, pgn_source, 43 paginator = Paginator(page, pgn_source,
42 page_num=ctx.page_num, 44 page_num=ctx.page_num,
43 pgn_filter=ctx.pagination_filter) 45 pgn_filter=ctx.pagination_filter)
44 assetor = Assetor(page, first_uri) 46 assetor = Assetor(page, first_uri)
45 linker = PageLinkerData(page.source, page.rel_path) 47 linker = PageLinkerData(page.source, page.rel_path)
46 data = { 48 data = {
47 'piecrust': pc_data, 49 'piecrust': pc_data,
48 'page': {}, 50 'page': config_data,
49 'assets': assetor, 51 'assets': assetor,
50 'pagination': paginator, 52 'pagination': paginator,
51 'family': linker 53 'family': linker
52 } 54 }
53 page_data = data['page'] 55
54 page_data.update(copy.deepcopy(page.source_metadata)) 56 for k, v in page.source_metadata.items():
55 page_data.update(page.config.getDeepcopy(app.debug)) 57 config_data.mapValue(k, copy.deepcopy(v))
56 page_data['url'] = ctx.uri 58 config_data.mapValue('url', ctx.uri, override_existing=True)
57 page_data['timestamp'] = time.mktime(page.datetime.timetuple()) 59 config_data.mapValue('timestamp', time.mktime(page.datetime.timetuple()),
60 override_existing=True)
58 date_format = app.config.get('site/date_format') 61 date_format = app.config.get('site/date_format')
59 if date_format: 62 if date_format:
60 page_data['date'] = page.datetime.strftime(date_format) 63 config_data.mapValue('date', page.datetime.strftime(date_format),
64 override_existing=True)
61 65
62 #TODO: handle slugified taxonomy terms. 66 #TODO: handle slugified taxonomy terms.
63 67
64 site_data = build_site_data(page) 68 site_data = build_site_data(page)
65 merge_dicts(data, site_data) 69 merge_dicts(data, site_data)