summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Nouri <daniel.nouri@gmail.com>2011-02-28 16:13:47 +0100
committerDaniel Nouri <daniel.nouri@gmail.com>2011-02-28 16:13:47 +0100
commitab19ea8a5372ac83c6f7a7d75d1ecca5ed2b025e (patch)
tree4635c5c4396fe92022352a2d7314259553a40a36
parent8326c68388ecac91cdcb1dce268a61362be2e4c8 (diff)
downloadpyramid-ab19ea8a5372ac83c6f7a7d75d1ecca5ed2b025e.tar.gz
pyramid-ab19ea8a5372ac83c6f7a7d75d1ecca5ed2b025e.tar.bz2
pyramid-ab19ea8a5372ac83c6f7a7d75d1ecca5ed2b025e.zip
'pyramid.url.resource_url' no longer quotes '@' in '*elements'.
See http://groups.google.com/group/pylons-discuss/browse_thread/thread/ebb8e0196858a48
-rw-r--r--pyramid/tests/test_url.py8
-rw-r--r--pyramid/traversal.py5
2 files changed, 11 insertions, 2 deletions
diff --git a/pyramid/tests/test_url.py b/pyramid/tests/test_url.py
index 3c70e9028..e13fbbb91 100644
--- a/pyramid/tests/test_url.py
+++ b/pyramid/tests/test_url.py
@@ -49,6 +49,14 @@ class ResourceURLTests(unittest.TestCase):
self.assertEqual(result,
'http://example.com/context/La%20Pe%C3%B1a')
+ def test_at_sign_in_element_names(self):
+ request = _makeRequest()
+ self._registerContextURL(request.registry)
+ context = DummyContext()
+ result = self._callFUT(context, request, '@@myview')
+ self.assertEqual(result,
+ 'http://example.com/context/@@myview')
+
def test_element_names_url_quoted(self):
request = _makeRequest()
self._registerContextURL(request.registry)
diff --git a/pyramid/traversal.py b/pyramid/traversal.py
index 0953ef313..03137330a 100644
--- a/pyramid/traversal.py
+++ b/pyramid/traversal.py
@@ -509,6 +509,7 @@ def traversal_path(path):
return tuple(clean)
_segment_cache = {}
+path_safe = ':@&+$,'
def quote_path_segment(segment):
""" Return a quoted representation of a 'path segment' (such as
@@ -540,9 +541,9 @@ def quote_path_segment(segment):
return _segment_cache[segment]
except KeyError:
if segment.__class__ is unicode: # isinstance slighly slower (~15%)
- result = url_quote(segment.encode('utf-8'))
+ result = url_quote(segment.encode('utf-8'), path_safe)
else:
- result = url_quote(str(segment))
+ result = url_quote(str(segment), path_safe)
# we don't need a lock to mutate _segment_cache, as the below
# will generate exactly one Python bytecode (STORE_SUBSCR)
_segment_cache[segment] = result