From 737cbf5f6096b6ee397ed8d3e38f36f3406e7d2e Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Thu, 8 Mar 2012 12:39:25 +0000 Subject: [PATCH] Updated docs and added fix for _types and positional operator Bumped version to 0.6.2 --- docs/changelog.rst | 11 ++++++++++- docs/guide/connecting.rst | 5 +++++ mongoengine/queryset.py | 18 ++++++++++++++++-- python-mongoengine.spec | 2 +- tests/queryset.py | 6 +++--- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 73748849..e4c61321 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -2,7 +2,16 @@ Changelog ========= -Changes in 0.6.x +Changes in 0.6.2 +================ +- Updated documentation for ReplicaSet connections +- Hack round _types issue with SERVER-5247 - querying other arrays may also cause problems. + +Changes in 0.6.1 +================ +- Fix for replicaSet connections + +Changes in 0.6 ================ - Added FutureWarning to inherited classes not declaring 'allow_inheritance' as the default will change in 0.7 diff --git a/docs/guide/connecting.rst b/docs/guide/connecting.rst index 50eb2703..bc45dbfe 100644 --- a/docs/guide/connecting.rst +++ b/docs/guide/connecting.rst @@ -26,7 +26,12 @@ name - just supply the uri as the :attr:`host` to connect('project1', host='mongodb://localhost/database_name') +ReplicaSets +=========== +MongoEngine now supports :func:`~pymongo.replica_set_connection.ReplicaSetConnection` +to use them please use a URI style connection and provide the `replicaSet` name in the +connection kwargs. Multiple Databases ================== diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 85a5152a..6d1c9c13 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -1371,8 +1371,15 @@ class QuerySet(object): write_options = {} update = QuerySet._transform_update(self._document, **update) + query = self._query + + # SERVER-5247 hack + remove_types = "_types" in query and ".$." in unicode(update) + if remove_types: + del query["_types"] + try: - ret = self._collection.update(self._query, update, multi=multi, + ret = self._collection.update(query, update, multi=multi, upsert=upsert, safe=safe_update, **write_options) if ret is not None and 'n' in ret: @@ -1400,10 +1407,17 @@ class QuerySet(object): if not write_options: write_options = {} update = QuerySet._transform_update(self._document, **update) + query = self._query + + # SERVER-5247 hack + remove_types = "_types" in query and ".$." in unicode(update) + if remove_types: + del query["_types"] + try: # Explicitly provide 'multi=False' to newer versions of PyMongo # as the default may change to 'True' - ret = self._collection.update(self._query, update, multi=False, + ret = self._collection.update(query, update, multi=False, upsert=upsert, safe=safe_update, **write_options) diff --git a/python-mongoengine.spec b/python-mongoengine.spec index 8ce3ff60..106243a4 100644 --- a/python-mongoengine.spec +++ b/python-mongoengine.spec @@ -5,7 +5,7 @@ %define srcname mongoengine Name: python-%{srcname} -Version: 0.6.1 +Version: 0.6.2 Release: 1%{?dist} Summary: A Python Document-Object Mapper for working with MongoDB diff --git a/tests/queryset.py b/tests/queryset.py index 97048953..ee3ab935 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -329,11 +329,11 @@ class QuerySetTest(unittest.TestCase): BlogPost(title="ABC", comments=[c1, c2]).save() - BlogPost.objects(comments__by="joe").update(inc__comments__S__votes=1) + BlogPost.objects(comments__by="jane").update(inc__comments__S__votes=1) post = BlogPost.objects.first() - self.assertEquals(post.comments[0].by, 'joe') - self.assertEquals(post.comments[0].votes, 4) + self.assertEquals(post.comments[1].by, 'jane') + self.assertEquals(post.comments[1].votes, 8) # Currently the $ operator only applies to the first matched item in # the query