added new test like defined in issue #712 and changed ObjectIdField to_python() method to use a try except similar to other Field classes
This commit is contained in:
		| @@ -410,8 +410,11 @@ class ObjectIdField(BaseField): | ||||
|     """ | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         try: | ||||
|             if not isinstance(value, ObjectId): | ||||
|                 value = ObjectId(value) | ||||
|         except: | ||||
|             pass | ||||
|         return value | ||||
|  | ||||
|     def to_mongo(self, value): | ||||
|   | ||||
| @@ -4578,6 +4578,13 @@ class QuerySetTest(unittest.TestCase): | ||||
|         self.assertEquals(Animal.objects(folded_ears=True).count(), 1) | ||||
|         self.assertEquals(Animal.objects(whiskers_length=5.1).count(), 1) | ||||
|  | ||||
|     def test_loop_via_invalid_id_does_not_crash(self): | ||||
|         class Person(Document): | ||||
|             name = StringField() | ||||
|         Person.objects.delete() | ||||
|         Person._get_collection().update({"name": "a"}, {"$set": {"_id": ""}}, upsert=True) | ||||
|         for p in Person.objects(): | ||||
|             self.assertEqual(p.name, 'a') | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user