remove pymongo deprecated methods: find_and_modify & remove

This commit is contained in:
Bastien Gérard 2019-06-19 23:04:23 +02:00
parent e8dbd12f22
commit 8f57279dc7
3 changed files with 18 additions and 13 deletions

View File

@ -10,6 +10,7 @@ from operator import itemgetter
from bson import Binary, DBRef, ObjectId, SON
import gridfs
import pymongo
from pymongo import ReturnDocument
import six
from six import iteritems
@ -1964,9 +1965,11 @@ class SequenceField(BaseField):
sequence_name = self.get_sequence_name()
sequence_id = '%s.%s' % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_name]
counter = collection.find_and_modify(query={'_id': sequence_id},
counter = collection.find_one_and_update(
filter={'_id': sequence_id},
update={'$inc': {'next': 1}},
new=True,
return_document=ReturnDocument.AFTER,
upsert=True)
return self.value_decorator(counter['next'])
@ -1975,9 +1978,10 @@ class SequenceField(BaseField):
sequence_name = self.get_sequence_name()
sequence_id = "%s.%s" % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_name]
counter = collection.find_and_modify(query={"_id": sequence_id},
counter = collection.find_one_and_update(
filter={"_id": sequence_id},
update={"$set": {"next": value}},
new=True,
return_document=ReturnDocument.AFTER,
upsert=True)
return self.value_decorator(counter['next'])

View File

@ -480,9 +480,10 @@ class BaseQuerySet(object):
write_concern=write_concern,
**{'pull_all__%s' % field_name: self})
result = queryset._collection.remove(queryset._query, **write_concern)
if result:
return result.get('n')
with set_write_concern(queryset._collection, write_concern) as collection:
result = collection.delete_many(queryset._query)
if result.acknowledged:
return result.deleted_count
def update(self, upsert=False, multi=True, write_concern=None,
full_result=False, **update):

View File

@ -1857,8 +1857,8 @@ class QuerySetTest(unittest.TestCase):
self.Person.objects()[:1].delete()
self.assertEqual(1, BlogPost.objects.count())
def test_limit_with_write_concern_0(self):
def test_delete_edge_case_with_write_concern_0_return_None(self):
"""Return None when write is unacknowledged"""
p1 = self.Person(name="User Z", age=20).save()
del_result = p1.delete(w=0)
self.assertEqual(None, del_result)