diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-26 15:37:17 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-26 15:37:17 +0000 |
| commit | e281fad5c5205045829c79c2b5db46d7b5e04bd1 (patch) | |
| tree | ae3b12020ca5bb7fadb6305f1eeb44468be840bb | |
| parent | 8cfe7068783a3520aa3bc09f260502d002e9ac60 (diff) | |
| download | pyramid-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.py | 18 | ||||
| -rw-r--r-- | repoze/bfg/traversal.py | 2 |
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() |
