replaced find_and_modify by PyMongo3 equivalents
This commit is contained in:
parent
3db896c4e2
commit
0a65006bb4
@ -13,6 +13,7 @@ from bson import json_util
|
|||||||
import pymongo
|
import pymongo
|
||||||
import pymongo.errors
|
import pymongo.errors
|
||||||
from pymongo.common import validate_read_preference
|
from pymongo.common import validate_read_preference
|
||||||
|
from pymongo.collection import ReturnDocument
|
||||||
|
|
||||||
from mongoengine import signals
|
from mongoengine import signals
|
||||||
from mongoengine.connection import get_db
|
from mongoengine.connection import get_db
|
||||||
@ -547,7 +548,7 @@ class BaseQuerySet(object):
|
|||||||
|
|
||||||
:param upsert: insert if document doesn't exist (default ``False``)
|
:param upsert: insert if document doesn't exist (default ``False``)
|
||||||
:param full_response: return the entire response object from the
|
:param full_response: return the entire response object from the
|
||||||
server (default ``False``)
|
server (default ``False``, not available for PyMongo 3+)
|
||||||
:param remove: remove rather than updating (default ``False``)
|
:param remove: remove rather than updating (default ``False``)
|
||||||
:param new: return updated rather than original document
|
:param new: return updated rather than original document
|
||||||
(default ``False``)
|
(default ``False``)
|
||||||
@ -565,13 +566,31 @@ class BaseQuerySet(object):
|
|||||||
|
|
||||||
queryset = self.clone()
|
queryset = self.clone()
|
||||||
query = queryset._query
|
query = queryset._query
|
||||||
update = transform.update(queryset._document, **update)
|
if not remove and IS_PYMONGO_3:
|
||||||
|
update = transform.update(queryset._document, **update)
|
||||||
sort = queryset._ordering
|
sort = queryset._ordering
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = queryset._collection.find_and_modify(
|
if IS_PYMONGO_3:
|
||||||
query, update, upsert=upsert, sort=sort, remove=remove, new=new,
|
if full_response:
|
||||||
full_response=full_response, **self._cursor_args)
|
msg = ("With PyMongo 3+, it is not possible anymore to get the full response.")
|
||||||
|
warnings.warn(msg, DeprecationWarning)
|
||||||
|
if remove:
|
||||||
|
result = queryset._collection.find_one_and_delete(
|
||||||
|
query, sort=sort, **self._cursor_args)
|
||||||
|
else:
|
||||||
|
if new:
|
||||||
|
return_doc = ReturnDocument.AFTER
|
||||||
|
else:
|
||||||
|
return_doc = ReturnDocument.BEFORE
|
||||||
|
result = queryset._collection.find_one_and_update(
|
||||||
|
query, update, upsert=upsert, sort=sort, return_document=return_doc,
|
||||||
|
**self._cursor_args)
|
||||||
|
|
||||||
|
else:
|
||||||
|
result = queryset._collection.find_and_modify(
|
||||||
|
query, update, upsert=upsert, sort=sort, remove=remove, new=new,
|
||||||
|
full_response=full_response, **self._cursor_args)
|
||||||
except pymongo.errors.DuplicateKeyError, err:
|
except pymongo.errors.DuplicateKeyError, err:
|
||||||
raise NotUniqueError(u"Update failed (%s)" % err)
|
raise NotUniqueError(u"Update failed (%s)" % err)
|
||||||
except pymongo.errors.OperationFailure, err:
|
except pymongo.errors.OperationFailure, err:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user