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