Merge pull request #1944 from erdenezul/deprecation_warning_pymongo37

Use insert_one instead of deprecated one #1899
This commit is contained in:
erdenezul 2018-11-13 19:40:22 +08:00 committed by GitHub
commit 78a9420f26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 6 deletions

View File

@ -5,7 +5,9 @@ Changelog
Development Development
=========== ===========
- (Fill this out as you fix issues and develop your features). - (Fill this out as you fix issues and develop your features).
======= - Remove deprecated `save()` method and used `insert_one()` #1899
=================
Changes in 0.16.0 Changes in 0.16.0
================= =================
- Various improvements to the doc - Various improvements to the doc

View File

@ -12,7 +12,9 @@ from mongoengine.base import (BaseDict, BaseDocument, BaseList,
TopLevelDocumentMetaclass, get_document) TopLevelDocumentMetaclass, get_document)
from mongoengine.common import _import_class from mongoengine.common import _import_class
from mongoengine.connection import DEFAULT_CONNECTION_NAME, get_db from mongoengine.connection import DEFAULT_CONNECTION_NAME, get_db
from mongoengine.context_managers import switch_collection, switch_db from mongoengine.context_managers import (set_write_concern,
switch_collection,
switch_db)
from mongoengine.errors import (InvalidDocumentError, InvalidQueryError, from mongoengine.errors import (InvalidDocumentError, InvalidQueryError,
SaveConditionError) SaveConditionError)
from mongoengine.python_support import IS_PYMONGO_3 from mongoengine.python_support import IS_PYMONGO_3
@ -426,11 +428,18 @@ class Document(six.with_metaclass(TopLevelDocumentMetaclass, BaseDocument)):
Helper method, should only be used inside save(). Helper method, should only be used inside save().
""" """
collection = self._get_collection() collection = self._get_collection()
with set_write_concern(collection, write_concern) as wc_collection:
if force_insert: if force_insert:
return collection.insert(doc, **write_concern) return wc_collection.insert_one(doc).inserted_id
# insert_one will provoke UniqueError alongside save does not
# therefore, it need to catch and call replace_one.
if '_id' in doc:
raw_object = wc_collection.find_one_and_replace(
{'_id': doc['_id']}, doc)
if raw_object:
return doc['_id']
object_id = collection.save(doc, **write_concern) object_id = wc_collection.insert_one(doc).inserted_id
# In PyMongo 3.0, the save() call calls internally the _update() call # In PyMongo 3.0, the save() call calls internally the _update() call
# but they forget to return the _id value passed back, therefore getting it back here # but they forget to return the _id value passed back, therefore getting it back here