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):
if timeout is None:
timeout = self.default_timeout
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):
result = self._set(key, pickle.dumps(value), int(timeout), client)
else:
result = self._set(key, value, int(timeout), client)
result = self._set(key, int(value), int(timeout), client)
# result is a boolean
return result
......
......@@ -336,6 +336,15 @@ class RedisCacheTests(TestCase):
self.assertEqual(result, False)
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__':
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