summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-26 15:37:17 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-26 15:37:17 +0000
commite281fad5c5205045829c79c2b5db46d7b5e04bd1 (patch)
treeae3b12020ca5bb7fadb6305f1eeb44468be840bb
parent8cfe7068783a3520aa3bc09f260502d002e9ac60 (diff)
downloadpyramid-e281fad5c5205045829c79c2b5db46d7b5e04bd1.tar.gz
pyramid-e281fad5c5205045829c79c2b5db46d7b5e04bd1.tar.bz2
pyramid-e281fad5c5205045829c79c2b5db46d7b5e04bd1.zip
Cache tuples (immutable), not lists; others were using this function and were baffled when they mutated the value.
-rw-r--r--repoze/bfg/tests/test_traversal.py18
-rw-r--r--repoze/bfg/traversal.py2
2 files changed, 13 insertions, 7 deletions
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 04dfd1bca..6459ed1af 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -8,33 +8,39 @@ class SplitPathTests(unittest.TestCase):
return split_path(path)
def test_path_startswith_endswith(self):
- self.assertEqual(self._callFUT('/foo/'), [u'foo'])
+ self.assertEqual(self._callFUT('/foo/'), (u'foo',))
def test_empty_elements(self):
- self.assertEqual(self._callFUT('foo///'), [u'foo'])
+ self.assertEqual(self._callFUT('foo///'), (u'foo',))
def test_onedot(self):
- self.assertEqual(self._callFUT('foo/./bar'), [u'foo', u'bar'])
+ self.assertEqual(self._callFUT('foo/./bar'), (u'foo', u'bar'))
def test_twodots(self):
- self.assertEqual(self._callFUT('foo/../bar'), [u'bar'])
+ self.assertEqual(self._callFUT('foo/../bar'), (u'bar',))
def test_element_urllquoted(self):
self.assertEqual(self._callFUT('/foo/space%20thing/bar'),
- [u'foo', u'space thing', u'bar'])
+ (u'foo', u'space thing', u'bar'))
def test_segments_are_unicode(self):
result = self._callFUT('/foo/bar')
self.assertEqual(type(result[0]), unicode)
self.assertEqual(type(result[1]), unicode)
+ def test_same_value_returned_if_cached(self):
+ result1 = self._callFUT('/foo/bar')
+ result2 = self._callFUT('/foo/bar')
+ self.assertEqual(result1, (u'foo', u'bar'))
+ self.assertEqual(result2, (u'foo', u'bar'))
+
def test_utf8(self):
import urllib
la = 'La Pe\xc3\xb1a'
encoded = urllib.quote(la)
decoded = unicode(la, 'utf-8')
path = '/'.join([encoded, encoded])
- self.assertEqual(self._callFUT(path), [decoded, decoded])
+ self.assertEqual(self._callFUT(path), (decoded, decoded))
def test_utf16(self):
import urllib
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 2d56f9302..7adef4011 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -120,7 +120,7 @@ def split_path(path):
raise TypeError('Could not decode path segment %r using the '
'UTF-8 decoding scheme' % segment)
clean.append(segment)
- return clean
+ return tuple(clean)
_marker = object()