# HG changeset patch # User Ludovic Chabant # Date 1570212813 25200 # Node ID 10520472cc730afee824e2f1ba648fccdb2c5d1d # Parent c0c00dc1eac703a9b145d869fd533f3674aae08a routing: Fix breakages with routing on some versions of Python. Finally figured what happened with change 6baa94da8b16 (this is a Mercurial hash by the way if you're looking at the Git mirror). Between Python 3.6 and 3.7 there was a change where the percent sign ('%') went from being escaped by `re.escape` to _not_ being escaped. So now we need to use different regex patterns dependin on the Python version, yay. diff -r c0c00dc1eac7 -r 10520472cc73 piecrust/appconfig.py --- a/piecrust/appconfig.py Fri Oct 04 10:07:38 2019 -0700 +++ b/piecrust/appconfig.py Fri Oct 04 11:13:33 2019 -0700 @@ -1,5 +1,6 @@ import re import os.path +import sys import copy import json import urllib @@ -372,7 +373,8 @@ cache.write('pagination_suffix_format', pgn_suffix_fmt) pgn_suffix_re = re.escape(v) - pgn_suffix_re = (pgn_suffix_re.replace("\\%num\\%", "(?P\\d+)") + + escaped_token = "%num%" if sys.hexversion >= 0x3070000 else "\\%num\\%" + pgn_suffix_re = (pgn_suffix_re.replace(escaped_token, "(?P\\d+)") + '$') cache.write('pagination_suffix_re', pgn_suffix_re) return v diff -r c0c00dc1eac7 -r 10520472cc73 piecrust/routing.py --- a/piecrust/routing.py Fri Oct 04 10:07:38 2019 -0700 +++ b/piecrust/routing.py Fri Oct 04 11:13:33 2019 -0700 @@ -1,5 +1,6 @@ import re import os.path +import sys import copy import logging import urllib.parse @@ -10,8 +11,13 @@ route_re = re.compile(r'%((?P[\w\d]+):)?(?P\+)?(?P\w+)%') -route_esc_re = re.compile( - r'%((?P[\w\d]+)\\:)?(?P\\\+)?(?P\w+)%') +if sys.hexversion >= 0x3070000: + route_esc_re = re.compile( + r'%((?P[\w\d]+)\\:)?(?P\\\+)?(?P\w+)%') +else: + route_esc_re = re.compile( + r'\\%((?P[\w\d]+)\\:)?(?P\\\+)?(?P\w+)\\%') + ugly_url_cleaner = re.compile(r'\.html$')