Loading django/utils/http.py +10 −4 Original line number Diff line number Diff line Loading @@ -167,8 +167,9 @@ def base36_to_int(s): if len(s) > 13: raise ValueError("Base36 input too large") value = int(s, 36) # ... then do a final check that the value will fit into an int. if value > sys.maxint: # ... then do a final check that the value will fit into an int to avoid # returning a long (#15067). The long type was removed in Python 3. if not six.PY3 and value > sys.maxint: raise ValueError("Base36 input too large") return value Loading @@ -178,8 +179,13 @@ def int_to_base36(i): """ digits = "0123456789abcdefghijklmnopqrstuvwxyz" factor = 0 if not 0 <= i <= sys.maxint: raise ValueError("Base36 conversion input too large or incorrect type.") if i < 0: raise ValueError("Negative base36 conversion input.") if not six.PY3: if not isinstance(i, six.integer_types): raise TypeError("Non-integer base36 conversion input.") if i > sys.maxint: raise ValueError("Base36 conversion input too large.") # Find starting factor while True: factor += 1 Loading docs/ref/utils.txt +4 −2 Original line number Diff line number Diff line Loading @@ -504,11 +504,13 @@ escaping HTML. .. function:: base36_to_int(s) Converts a base 36 string to an integer. Converts a base 36 string to an integer. On Python 2 the output is guaranteed to be an :class:`int` and not a :class:`long`. .. function:: int_to_base36(i) Converts a positive integer less than sys.maxint to a base 36 string. Converts a positive integer to a base 36 string. On Python 2 ``i`` must be smaller than :attr:`sys.maxint`. ``django.utils.safestring`` =========================== Loading docs/releases/1.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,9 @@ Miscellaneous * GeoDjango dropped support for GDAL < 1.5 * :func:`~django.utils.http.int_to_base36` properly raises a :exc:`TypeError` instead of :exc:`ValueError` for non-integer inputs. Features deprecated in 1.5 ========================== Loading tests/regressiontests/utils/http.py +14 −12 Original line number Diff line number Diff line import sys from django.utils import http from django.utils import unittest from django.utils.datastructures import MultiValueDict from django.http import HttpResponse, utils from django.test import RequestFactory from django.utils.datastructures import MultiValueDict from django.utils import http from django.utils import six from django.utils import unittest class TestUtilsHttp(unittest.TestCase): Loading Loading @@ -110,22 +111,23 @@ class TestUtilsHttp(unittest.TestCase): def test_base36(self): # reciprocity works for n in [0, 1, 1000, 1000000, sys.maxint]: for n in [0, 1, 1000, 1000000]: self.assertEqual(n, http.base36_to_int(http.int_to_base36(n))) if not six.PY3: self.assertEqual(sys.maxint, http.base36_to_int(http.int_to_base36(sys.maxint))) # bad input for n in [-1, sys.maxint+1, '1', 'foo', {1:2}, (1,2,3)]: self.assertRaises(ValueError, http.int_to_base36, n) self.assertRaises(ValueError, http.int_to_base36, -1) if not six.PY3: self.assertRaises(ValueError, http.int_to_base36, sys.maxint + 1) for n in ['1', 'foo', {1: 2}, (1, 2, 3), 3.141]: self.assertRaises(TypeError, http.int_to_base36, n) for n in ['#', ' ']: self.assertRaises(ValueError, http.base36_to_int, n) for n in [123, {1:2}, (1,2,3)]: for n in [123, {1: 2}, (1, 2, 3), 3.141]: self.assertRaises(TypeError, http.base36_to_int, n) # non-integer input self.assertRaises(TypeError, http.int_to_base36, 3.141) # more explicit output testing for n, b36 in [(0, '0'), (1, '1'), (42, '16'), (818469960, 'django')]: self.assertEqual(http.int_to_base36(n), b36) Loading Loading
django/utils/http.py +10 −4 Original line number Diff line number Diff line Loading @@ -167,8 +167,9 @@ def base36_to_int(s): if len(s) > 13: raise ValueError("Base36 input too large") value = int(s, 36) # ... then do a final check that the value will fit into an int. if value > sys.maxint: # ... then do a final check that the value will fit into an int to avoid # returning a long (#15067). The long type was removed in Python 3. if not six.PY3 and value > sys.maxint: raise ValueError("Base36 input too large") return value Loading @@ -178,8 +179,13 @@ def int_to_base36(i): """ digits = "0123456789abcdefghijklmnopqrstuvwxyz" factor = 0 if not 0 <= i <= sys.maxint: raise ValueError("Base36 conversion input too large or incorrect type.") if i < 0: raise ValueError("Negative base36 conversion input.") if not six.PY3: if not isinstance(i, six.integer_types): raise TypeError("Non-integer base36 conversion input.") if i > sys.maxint: raise ValueError("Base36 conversion input too large.") # Find starting factor while True: factor += 1 Loading
docs/ref/utils.txt +4 −2 Original line number Diff line number Diff line Loading @@ -504,11 +504,13 @@ escaping HTML. .. function:: base36_to_int(s) Converts a base 36 string to an integer. Converts a base 36 string to an integer. On Python 2 the output is guaranteed to be an :class:`int` and not a :class:`long`. .. function:: int_to_base36(i) Converts a positive integer less than sys.maxint to a base 36 string. Converts a positive integer to a base 36 string. On Python 2 ``i`` must be smaller than :attr:`sys.maxint`. ``django.utils.safestring`` =========================== Loading
docs/releases/1.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,9 @@ Miscellaneous * GeoDjango dropped support for GDAL < 1.5 * :func:`~django.utils.http.int_to_base36` properly raises a :exc:`TypeError` instead of :exc:`ValueError` for non-integer inputs. Features deprecated in 1.5 ========================== Loading
tests/regressiontests/utils/http.py +14 −12 Original line number Diff line number Diff line import sys from django.utils import http from django.utils import unittest from django.utils.datastructures import MultiValueDict from django.http import HttpResponse, utils from django.test import RequestFactory from django.utils.datastructures import MultiValueDict from django.utils import http from django.utils import six from django.utils import unittest class TestUtilsHttp(unittest.TestCase): Loading Loading @@ -110,22 +111,23 @@ class TestUtilsHttp(unittest.TestCase): def test_base36(self): # reciprocity works for n in [0, 1, 1000, 1000000, sys.maxint]: for n in [0, 1, 1000, 1000000]: self.assertEqual(n, http.base36_to_int(http.int_to_base36(n))) if not six.PY3: self.assertEqual(sys.maxint, http.base36_to_int(http.int_to_base36(sys.maxint))) # bad input for n in [-1, sys.maxint+1, '1', 'foo', {1:2}, (1,2,3)]: self.assertRaises(ValueError, http.int_to_base36, n) self.assertRaises(ValueError, http.int_to_base36, -1) if not six.PY3: self.assertRaises(ValueError, http.int_to_base36, sys.maxint + 1) for n in ['1', 'foo', {1: 2}, (1, 2, 3), 3.141]: self.assertRaises(TypeError, http.int_to_base36, n) for n in ['#', ' ']: self.assertRaises(ValueError, http.base36_to_int, n) for n in [123, {1:2}, (1,2,3)]: for n in [123, {1: 2}, (1, 2, 3), 3.141]: self.assertRaises(TypeError, http.base36_to_int, n) # non-integer input self.assertRaises(TypeError, http.int_to_base36, 3.141) # more explicit output testing for n, b36 in [(0, '0'), (1, '1'), (42, '16'), (818469960, 'django')]: self.assertEqual(http.int_to_base36(n), b36) Loading