comparison piecrust/serving/util.py @ 853:f070a4fc033c

core: Continue PieCrust3 refactor, simplify pages. The asset pipeline is still the only function pipeline at this point. * No more `QualifiedPage`, and several other pieces of code deleted. * Data providers are simpler and more focused. For instance, the page iterator doesn't try to support other types of items. * Route parameters are proper known source metadata to remove the confusion between the two. * Make the baker and pipeline more correctly manage records and record histories. * Add support for record collapsing and deleting stale outputs in the asset pipeline.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 21 May 2017 00:06:59 -0700
parents 4850f8c21b6e
children 08e02c2a2a1a
comparison
equal deleted inserted replaced
852:4850f8c21b6e 853:f070a4fc033c
3 import hashlib 3 import hashlib
4 import logging 4 import logging
5 import datetime 5 import datetime
6 from werkzeug.wrappers import Response 6 from werkzeug.wrappers import Response
7 from werkzeug.wsgi import wrap_file 7 from werkzeug.wsgi import wrap_file
8 from piecrust.page import QualifiedPage, PageNotFoundError 8 from piecrust.page import PageNotFoundError
9 from piecrust.routing import RouteNotFoundError 9 from piecrust.routing import RouteNotFoundError
10 from piecrust.uriutil import split_sub_uri 10 from piecrust.uriutil import split_sub_uri
11 11
12 12
13 logger = logging.getLogger(__name__) 13 logger = logging.getLogger(__name__)
20 return app 20 return app
21 21
22 22
23 class RequestedPage(object): 23 class RequestedPage(object):
24 def __init__(self): 24 def __init__(self):
25 self.qualified_page = None 25 self.page = None
26 self.sub_num = 1
26 self.req_path = None 27 self.req_path = None
27 self.not_found_errors = [] 28 self.not_found_errors = []
28 29
29 30
30 def find_routes(routes, uri, sub_num=1): 31 def find_routes(routes, uri, sub_num=1):
60 for route, route_params, route_sub_num in routes: 61 for route, route_params, route_sub_num in routes:
61 cur_req_path = req_path 62 cur_req_path = req_path
62 if route_sub_num > 1: 63 if route_sub_num > 1:
63 cur_req_path = req_path_no_num 64 cur_req_path = req_path_no_num
64 65
65 qp = _get_requested_page_for_route(app, route, route_params, 66 page = _get_requested_page_for_route(app, route, route_params,
66 route_sub_num) 67 route_sub_num)
67 if qp is not None: 68 if page is not None:
68 req_page.qualified_page = qp 69 req_page.page = page
70 req_page.sub_num = route_sub_num
69 req_page.req_path = cur_req_path 71 req_page.req_path = cur_req_path
70 break 72 break
71 73
72 req_page.not_found_errors.append(PageNotFoundError( 74 req_page.not_found_errors.append(PageNotFoundError(
73 "No path found for '%s' in source '%s'." % 75 "No path found for '%s' in source '%s'." %
74 (cur_req_path, route.source_name))) 76 (cur_req_path, route.source_name)))
75 77
76 return req_page 78 return req_page
77 79
78 80
79 def _get_requested_page_for_route(app, route, route_params, sub_num): 81 def _get_requested_page_for_route(app, route, route_params):
80 source = app.getSource(route.source_name) 82 source = app.getSource(route.source_name)
81 item = source.findContent(route_params) 83 item = source.findContent(route_params)
82 if item is None: 84 if item is not None:
83 return None 85 return app.getPage(item)
84 86 return None
85 # Build the page.
86 page = app.getPage(item)
87 qp = QualifiedPage(page, route, route_params, sub_num)
88 return qp
89 87
90 88
91 def load_mimetype_map(): 89 def load_mimetype_map():
92 mimetype_map = {} 90 mimetype_map = {}
93 sep_re = re.compile(r'\s+') 91 sep_re = re.compile(r'\s+')