Mercurial > piecrust2
changeset 33:62c7a97c8340
Get the un-paginated URL of a page early and pass that around.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 19 Aug 2014 15:36:28 -0700 |
parents | 43091c9837bf |
children | bdb103c57168 |
files | piecrust/data/assetor.py piecrust/data/builder.py piecrust/uriutil.py tests/test_data_assetor.py tests/test_uriutil.py |
diffstat | 5 files changed, 46 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/piecrust/data/assetor.py Tue Aug 19 14:30:19 2014 -0700 +++ b/piecrust/data/assetor.py Tue Aug 19 15:36:28 2014 -0700 @@ -1,4 +1,3 @@ -import re import os import os.path import logging @@ -16,15 +15,11 @@ base_url_format = app.env.base_asset_url_format rel_assets_path = rel_assets_path.replace('\\', '/') - # Remove any extension or pagination suffix from the URL, since - # we'll be copying assets into the 1st sub-page's folder. + # Remove any extension since we'll be copying assets into the 1st + # sub-page's folder. pretty = app.config.get('site/pretty_urls') if not pretty: uri, _ = os.path.splitext(uri) - pgn_suffix_re = app.config.get('__cache/pagination_suffix_re') - m = re.search(pgn_suffix_re, uri) - if m: - uri = uri[:m.start():] base_url = multi_replace( base_url_format,
--- a/piecrust/data/builder.py Tue Aug 19 14:30:19 2014 -0700 +++ b/piecrust/data/builder.py Tue Aug 19 15:36:28 2014 -0700 @@ -5,7 +5,7 @@ from piecrust.data.debug import build_debug_info from piecrust.data.linker import Linker from piecrust.data.paginator import Paginator -from piecrust.uriutil import get_slug +from piecrust.uriutil import get_slug, get_first_sub_uri logger = logging.getLogger(__name__) @@ -27,12 +27,13 @@ def build_page_data(ctx): page = ctx.page app = page.app + first_uri = get_first_sub_uri(app, ctx.uri) pc_data = PieCrustData() pgn_source = ctx.pagination_source or get_default_pagination_source(page) - paginator = Paginator(page, pgn_source, ctx.uri, ctx.page_num, + paginator = Paginator(page, pgn_source, first_uri, ctx.page_num, ctx.pagination_filter) - assetor = Assetor(page, ctx.uri) + assetor = Assetor(page, first_uri) linker = Linker(page) data = { 'piecrust': pc_data,
--- a/piecrust/uriutil.py Tue Aug 19 14:30:19 2014 -0700 +++ b/piecrust/uriutil.py Tue Aug 19 15:36:28 2014 -0700 @@ -1,4 +1,5 @@ import re +import os.path import string import logging import functools @@ -78,3 +79,19 @@ uri = uri[len(site_root):] return uri.lstrip('/') + +def get_first_sub_uri(app, uri): + pretty_urls = app.config.get('site/pretty_urls') + if not pretty_urls: + uri, ext = os.path.splitext(uri) + + pgn_suffix_re = app.config.get('__cache/pagination_suffix_re') + m = re.search(pgn_suffix_re, uri) + if m: + uri = uri[:m.start()] + + if not pretty_urls: + uri += ext + + return uri +
--- a/tests/test_data_assetor.py Tue Aug 19 14:30:19 2014 -0700 +++ b/tests/test_data_assetor.py Tue Aug 19 15:36:28 2014 -0700 @@ -58,19 +58,16 @@ @pytest.mark.parametrize('url_format, pretty_urls, uri, expected', [ ('%uri%', True, '/foo', '/foo/'), - ('%uri%', True, '/foo/2', '/foo/'), ('%uri%', True, '/foo.ext', '/foo.ext/'), - ('%uri%', True, '/foo.ext/2', '/foo.ext/'), ('%uri%', False, '/foo.html', '/foo/'), - ('%uri%', False, '/foo/2.html', '/foo/'), + ('%uri%', False, '/foo.ext', '/foo/'), ]) def test_build_base_url(url_format, pretty_urls, uri, expected): app = MagicMock() app.env = MagicMock() app.env.base_asset_url_format = url_format app.config = { - 'site/pretty_urls': pretty_urls, - '__cache/pagination_suffix_re': '/(?P<num>\\d+)$'} + 'site/pretty_urls': pretty_urls} assets_path = 'foo/bar-assets' actual = build_base_url(app, uri, assets_path) assert actual == expected
--- a/tests/test_uriutil.py Tue Aug 19 14:30:19 2014 -0700 +++ b/tests/test_uriutil.py Tue Aug 19 15:36:28 2014 -0700 @@ -1,5 +1,6 @@ +import mock import pytest -from piecrust.uriutil import UriInfo, parse_uri +from piecrust.uriutil import UriInfo, parse_uri, get_first_sub_uri @pytest.mark.parametrize('routes, uri, expected', [ @@ -24,3 +25,22 @@ actual = parse_uri(routes, uri) assert actual == expected + +@pytest.mark.parametrize('uri, expected, pretty_urls', [ + ('foo/bar', 'foo/bar', True), + ('foo/bar/2', 'foo/bar', True), + ('foo/bar.ext', 'foo/bar.ext', True), + ('foo/bar.ext/2', 'foo/bar.ext', True), + ('foo/bar.html', 'foo/bar.html', False), + ('foo/bar/2.html', 'foo/bar.html', False), + ('foo/bar.ext', 'foo/bar.ext', False), + ('foo/bar/2.ext', 'foo/bar.ext', False) + ]) +def test_get_first_sub_uri(uri, expected, pretty_urls): + app = mock.MagicMock() + app.config = { + 'site/pretty_urls': pretty_urls, + '__cache/pagination_suffix_re': '/(\\d+)$'} + actual = get_first_sub_uri(app, uri) + assert actual == expected +