Skip to content

Commit c96998e

Browse files
committed
Validate cache_for (and deprecated ttl) PYTHON-518
1 parent 95c9731 commit c96998e

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

pymongo/collection.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,10 @@ def create_index(self, key_or_list, cache_for=300, **kwargs):
804804
warnings.warn("ttl is deprecated. Please use cache_for instead.",
805805
DeprecationWarning, stacklevel=2)
806806

807+
# The types supported by datetime.timedelta. 2to3 removes long.
808+
if not isinstance(cache_for, (int, long, float)):
809+
raise TypeError("cache_for must be an integer or float.")
810+
807811
keys = helpers._index_list(key_or_list)
808812
index_doc = helpers._index_document(keys)
809813

test/test_collection.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ def test_create_index(self):
103103

104104
self.assertRaises(TypeError, db.test.create_index, 5)
105105
self.assertRaises(TypeError, db.test.create_index, {"hello": 1})
106+
self.assertRaises(TypeError,
107+
db.test.ensure_index, {"hello": 1}, cache_for='foo')
108+
self.assertRaises(TypeError,
109+
db.test.ensure_index, {"hello": 1}, ttl='foo')
106110
self.assertRaises(ValueError, db.test.create_index, [])
107111

108112
db.test.drop_indexes()
@@ -148,6 +152,10 @@ def test_ensure_index(self):
148152
db = self.db
149153

150154
self.assertRaises(TypeError, db.test.ensure_index, {"hello": 1})
155+
self.assertRaises(TypeError,
156+
db.test.ensure_index, {"hello": 1}, cache_for='foo')
157+
self.assertRaises(TypeError,
158+
db.test.ensure_index, {"hello": 1}, ttl='foo')
151159

152160
db.test.drop_indexes()
153161
self.assertEqual("hello_1", db.test.create_index("hello"))

0 commit comments

Comments
 (0)