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