Added __hash__, __ne__ with test.
This commit is contained in:
		| @@ -489,6 +489,17 @@ class BaseDocument(object): | |||||||
|                 return True |                 return True | ||||||
|         return False |         return False | ||||||
|  |  | ||||||
|  |     def __ne__(self, other): | ||||||
|  |         return not self.__eq__(other) | ||||||
|  |  | ||||||
|  |     def __hash__(self): | ||||||
|  |         """ For list, dic key  """ | ||||||
|  |         if self.pk is None: | ||||||
|  |             # For new object | ||||||
|  |             return super(BaseDocument,self).__hash__() | ||||||
|  |         else: | ||||||
|  |             return hash(self.pk) | ||||||
|  |  | ||||||
| if sys.version_info < (2, 5): | if sys.version_info < (2, 5): | ||||||
|     # Prior to Python 2.5, Exception was an old-style class |     # Prior to Python 2.5, Exception was an old-style class | ||||||
|     def subclass_exception(name, parents, unused): |     def subclass_exception(name, parents, unused): | ||||||
|   | |||||||
| @@ -627,6 +627,54 @@ class DocumentTest(unittest.TestCase): | |||||||
|     def tearDown(self): |     def tearDown(self): | ||||||
|         self.Person.drop_collection() |         self.Person.drop_collection() | ||||||
|  |  | ||||||
|  |     def test_document_hash(self): | ||||||
|  |         """Test document in list, dict, set | ||||||
|  |         """ | ||||||
|  |         class User(Document): | ||||||
|  |             pass | ||||||
|  |  | ||||||
|  |         class BlogPost(Document): | ||||||
|  |             pass | ||||||
|  |          | ||||||
|  |         # Clear old datas | ||||||
|  |         User.drop_collection() | ||||||
|  |         BlogPost.drop_collection() | ||||||
|  |  | ||||||
|  |         u1 = User.objects.create() | ||||||
|  |         u2 = User.objects.create() | ||||||
|  |         u3 = User.objects.create() | ||||||
|  |         u4 = User() # New object | ||||||
|  |  | ||||||
|  |         b1 = BlogPost.objects.create() | ||||||
|  |         b2 = BlogPost.objects.create() | ||||||
|  |  | ||||||
|  |         # in List | ||||||
|  |         all_user_list = list(User.objects.all()) | ||||||
|  |  | ||||||
|  |         self.assertTrue(u1 in all_user_list) | ||||||
|  |         self.assertTrue(u2 in all_user_list) | ||||||
|  |         self.assertTrue(u3 in all_user_list) | ||||||
|  |         self.assertFalse(u4 in all_user_list) # New object | ||||||
|  |         self.assertFalse(b1 in all_user_list) # Other object | ||||||
|  |         self.assertFalse(b2 in all_user_list) # Other object | ||||||
|  |  | ||||||
|  |         # in Dict | ||||||
|  |         all_user_dic = {} | ||||||
|  |         for u in User.objects.all(): | ||||||
|  |             all_user_dic[u] = "OK" | ||||||
|  |  | ||||||
|  |         self.assertEqual(all_user_dic.get(u1, False), "OK" ) | ||||||
|  |         self.assertEqual(all_user_dic.get(u2, False), "OK" ) | ||||||
|  |         self.assertEqual(all_user_dic.get(u3, False), "OK" ) | ||||||
|  |         self.assertEqual(all_user_dic.get(u4, False), False ) # New object | ||||||
|  |         self.assertEqual(all_user_dic.get(b1, False), False ) # Other object | ||||||
|  |         self.assertEqual(all_user_dic.get(b2, False), False ) # Other object | ||||||
|  |  | ||||||
|  |         # in Set | ||||||
|  |         all_user_set = set(User.objects.all()) | ||||||
|  |          | ||||||
|  |         self.assertTrue(u1 in all_user_set ) | ||||||
|  |          | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user