Merge pull request #2097 from bagerard/remove_deprecated_pymongo_methods

remove pymongo deprecated methods: find_and_modify & remove
This commit is contained in:
Bastien Gérard 2019-06-24 22:03:58 +02:00 committed by GitHub
commit b1002dd4f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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 from bson import Binary, DBRef, ObjectId, SON
import gridfs import gridfs
import pymongo import pymongo
from pymongo import ReturnDocument
import six import six
from six import iteritems from six import iteritems
@ -1964,10 +1965,12 @@ class SequenceField(BaseField):
sequence_name = self.get_sequence_name() sequence_name = self.get_sequence_name()
sequence_id = '%s.%s' % (sequence_name, self.name) sequence_id = '%s.%s' % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_name] collection = get_db(alias=self.db_alias)[self.collection_name]
counter = collection.find_and_modify(query={'_id': sequence_id},
update={'$inc': {'next': 1}}, counter = collection.find_one_and_update(
new=True, filter={'_id': sequence_id},
upsert=True) update={'$inc': {'next': 1}},
return_document=ReturnDocument.AFTER,
upsert=True)
return self.value_decorator(counter['next']) return self.value_decorator(counter['next'])
def set_next_value(self, value): def set_next_value(self, value):
@ -1975,10 +1978,11 @@ class SequenceField(BaseField):
sequence_name = self.get_sequence_name() sequence_name = self.get_sequence_name()
sequence_id = "%s.%s" % (sequence_name, self.name) sequence_id = "%s.%s" % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_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(
update={"$set": {"next": value}}, filter={"_id": sequence_id},
new=True, update={"$set": {"next": value}},
upsert=True) return_document=ReturnDocument.AFTER,
upsert=True)
return self.value_decorator(counter['next']) return self.value_decorator(counter['next'])
def get_next_value(self): def get_next_value(self):

View File

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

View File

@ -1857,8 +1857,8 @@ class QuerySetTest(unittest.TestCase):
self.Person.objects()[:1].delete() self.Person.objects()[:1].delete()
self.assertEqual(1, BlogPost.objects.count()) 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() p1 = self.Person(name="User Z", age=20).save()
del_result = p1.delete(w=0) del_result = p1.delete(w=0)
self.assertEqual(None, del_result) self.assertEqual(None, del_result)