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