comparison piecrust/serving.py @ 11:617191dec18e

Fixes for Windows, make `findPagePath` return a ref path.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 18 Aug 2014 16:47:44 -0700
parents 343d08ef5668
children 2f717f961996
comparison
equal deleted inserted replaced
10:cd35d356ccce 11:617191dec18e
1 import re 1 import re
2 import gzip 2 import gzip
3 import time 3 import time
4 import os
4 import os.path 5 import os.path
5 import hashlib 6 import hashlib
6 import logging 7 import logging
7 import io 8 import io
8 from werkzeug.exceptions import (NotFound, MethodNotAllowed, 9 from werkzeug.exceptions import (NotFound, MethodNotAllowed,
15 from piecrust.data.filters import (PaginationFilter, HasFilterClause, 16 from piecrust.data.filters import (PaginationFilter, HasFilterClause,
16 IsFilterClause) 17 IsFilterClause)
17 from piecrust.page import Page 18 from piecrust.page import Page
18 from piecrust.processing.base import ProcessorPipeline 19 from piecrust.processing.base import ProcessorPipeline
19 from piecrust.rendering import PageRenderingContext, render_page 20 from piecrust.rendering import PageRenderingContext, render_page
20 from piecrust.sources.base import MODE_PARSING 21 from piecrust.sources.base import PageFactory, MODE_PARSING
21 22
22 23
23 logger = logging.getLogger(__name__) 24 logger = logging.getLogger(__name__)
24 25
25 26
101 raise 102 raise
102 raise InternalServerError() 103 raise InternalServerError()
103 104
104 def _try_serve_asset(self, app, environ, request): 105 def _try_serve_asset(self, app, environ, request):
105 logger.debug("Searching for asset with path: %s" % request.path) 106 logger.debug("Searching for asset with path: %s" % request.path)
106 rel_req_path = request.path.lstrip('/') 107 rel_req_path = request.path.lstrip('/').replace('/', os.sep)
107 entry = self._record.findEntry(rel_req_path) 108 entry = self._record.findEntry(rel_req_path)
108 if entry is None: 109 if entry is None:
109 return None 110 return None
110 111
111 # Yep, we know about this URL because we processed an asset that 112 # Yep, we know about this URL because we processed an asset that
159 160
160 taxonomy = None 161 taxonomy = None
161 for route, route_metadata in routes: 162 for route, route_metadata in routes:
162 source = app.getSource(route.source_name) 163 source = app.getSource(route.source_name)
163 if route.taxonomy is None: 164 if route.taxonomy is None:
164 path, fac_metadata = source.findPagePath( 165 rel_path, fac_metadata = source.findPagePath(
165 route_metadata, MODE_PARSING) 166 route_metadata, MODE_PARSING)
166 if path is not None: 167 if rel_path is not None:
167 break 168 break
168 else: 169 else:
169 taxonomy = app.getTaxonomy(route.taxonomy) 170 taxonomy = app.getTaxonomy(route.taxonomy)
170 term_value = route_metadata.get(taxonomy.term_name) 171 term_value = route_metadata.get(taxonomy.term_name)
171 if term_value is not None: 172 if term_value is not None:
172 tax_page_ref = taxonomy.getPageRef(source.name) 173 tax_page_ref = taxonomy.getPageRef(source.name)
173 path = tax_page_ref.path 174 rel_path = tax_page_ref.rel_path
174 source = tax_page_ref.source 175 source = tax_page_ref.source
175 fac_metadata = {taxonomy.term_name: term_value} 176 fac_metadata = {taxonomy.term_name: term_value}
176 break 177 break
177 else: 178 else:
178 raise SourceNotFoundError("Can't find path for: %s " 179 raise SourceNotFoundError("Can't find path for: %s "
179 "(looked in: %s)" % 180 "(looked in: %s)" %
180 (req_path, [r.source_name for r, _ in routes])) 181 (req_path, [r.source_name for r, _ in routes]))
181 182
182 # Build the page and render it. 183 # Build the page and render it.
183 page = Page(source, fac_metadata, path) 184 fac = PageFactory(source, rel_path, fac_metadata)
185 page = fac.buildPage()
184 render_ctx = PageRenderingContext(page, req_path, page_num) 186 render_ctx = PageRenderingContext(page, req_path, page_num)
185 if taxonomy is not None: 187 if taxonomy is not None:
186 flt = PaginationFilter() 188 flt = PaginationFilter()
187 if taxonomy.is_multiple: 189 if taxonomy.is_multiple:
188 flt.addClause(HasFilterClause(taxonomy.name, term_value)) 190 flt.addClause(HasFilterClause(taxonomy.name, term_value))