comparison piecrust/data/builder.py @ 854:08e02c2a2a1a

core: Keep refactoring, this time to prepare for generator sources. - Make a few APIs simpler. - Content pipelines create their own jobs, so that generator sources can keep aborting in `getContents`, but rely on their pipeline to generate pages for baking.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 04 Jun 2017 23:34:28 -0700
parents f070a4fc033c
children d9059257743c
comparison
equal deleted inserted replaced
853:f070a4fc033c 854:08e02c2a2a1a
1 import logging 1 import logging
2 from piecrust.data.assetor import Assetor 2 from piecrust.data.assetor import Assetor
3 from piecrust.data.base import MergedMapping 3 from piecrust.data.base import MergedMapping
4 # from piecrust.data.linker import PageLinkerData 4 from piecrust.data.linker import Linker
5 from piecrust.data.pagedata import PageData 5 from piecrust.data.pagedata import PageData
6 from piecrust.data.paginator import Paginator 6 from piecrust.data.paginator import Paginator
7 from piecrust.data.piecrustdata import PieCrustData 7 from piecrust.data.piecrustdata import PieCrustData
8 from piecrust.data.providersdata import DataProvidersData 8 from piecrust.data.providersdata import DataProvidersData
9 from piecrust.routing import RouteFunction 9 from piecrust.routing import RouteFunction
30 pc_data = PieCrustData() 30 pc_data = PieCrustData()
31 config_data = PageData(page, ctx) 31 config_data = PageData(page, ctx)
32 paginator = Paginator(pgn_source, page, sub_num, 32 paginator = Paginator(pgn_source, page, sub_num,
33 pgn_filter=ctx.pagination_filter) 33 pgn_filter=ctx.pagination_filter)
34 assetor = Assetor(page) 34 assetor = Assetor(page)
35 # linker = PageLinkerData(page.source, page.rel_path) 35 linker = Linker(page)
36 data = { 36 data = {
37 'piecrust': pc_data, 37 'piecrust': pc_data,
38 'page': config_data, 38 'page': config_data,
39 'assets': assetor, 39 'assets': assetor,
40 'pagination': paginator, 40 'pagination': paginator,
41 # 'family': linker 41 'family': linker
42 } 42 }
43 43
44 for route in app.routes: 44 for route in app.routes:
45 name = route.func_name 45 name = route.func_name
46 if not name: 46 if not name:
47 continue 47 continue
48 48
49 func = data.get(name) 49 func = data.get(name)
50 if func is None: 50 if func is None:
51 data[name] = RouteFunction(route) 51 data[name] = RouteFunction(route)
52 elif isinstance(func, RouteFunction):
53 if not func._isCompatibleRoute(route):
54 raise Exception(
55 "Route function '%s' can't target both route '%s' and "
56 "route '%s' as the 2 patterns are incompatible." %
57 (name, func._route.uri_pattern, route.uri_pattern))
52 else: 58 else:
53 raise Exception("Route function '%s' collides with an " 59 raise Exception("Route function '%s' collides with an "
54 "existing function or template data." % 60 "existing function or template data." %
55 name) 61 name)
56 62