Commit 7d1f8558 authored by Sean Bleier's avatar Sean Bleier

Ensure that caching a float doesn't lose its precision.

parent 709125fa
...@@ -202,11 +202,14 @@ class CacheClass(BaseCache): ...@@ -202,11 +202,14 @@ class CacheClass(BaseCache):
if timeout is None: if timeout is None:
timeout = self.default_timeout timeout = self.default_timeout
try: try:
value = int(value) value = float(value)
# If you lose precision from the typecast to str, then pickle value
if int(value) != value:
raise TypeError
except (ValueError, TypeError): except (ValueError, TypeError):
result = self._set(key, pickle.dumps(value), int(timeout), client) result = self._set(key, pickle.dumps(value), int(timeout), client)
else: else:
result = self._set(key, value, int(timeout), client) result = self._set(key, int(value), int(timeout), client)
# result is a boolean # result is a boolean
return result return result
......
...@@ -336,6 +336,15 @@ class RedisCacheTests(TestCase): ...@@ -336,6 +336,15 @@ class RedisCacheTests(TestCase):
self.assertEqual(result, False) self.assertEqual(result, False)
self.assertEqual(cache.get("addkey1"), "value") self.assertEqual(cache.get("addkey1"), "value")
def test_float_caching(self):
self.cache.set('a', 1.1)
a = self.cache.get('a')
self.assertEqual(a, 1.1)
def test_string_float_caching(self):
self.cache.set('a', '1.1')
a = self.cache.get('a')
self.assertEqual(a, 1.1)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment