Add DeprecationWarning for EmbeddedDocument.save & .reload - those will be removed soon

This commit is contained in:
Bastien Gérard 2019-02-18 22:03:03 +01:00
parent db47604865
commit 57a38282a9
3 changed files with 28 additions and 3 deletions

View File

@ -8,6 +8,7 @@ Development
- Fix .only() working improperly after using .count() of the same instance of QuerySet - Fix .only() working improperly after using .count() of the same instance of QuerySet
- POTENTIAL BREAKING CHANGE: All result fields are now passed, including internal fields (_cls, _id) when using `QuerySet.as_pymongo` #1976 - POTENTIAL BREAKING CHANGE: All result fields are now passed, including internal fields (_cls, _id) when using `QuerySet.as_pymongo` #1976
- Fix InvalidStringData error when using modify on a BinaryField #1127 - Fix InvalidStringData error when using modify on a BinaryField #1127
- DEPRECATION: `EmbeddedDocument.save` & `.reload` are marked as deprecated and will be removed in a next version of mongoengine #1552
================= =================
Changes in 0.16.3 Changes in 0.16.3

View File

@ -90,9 +90,15 @@ class EmbeddedDocument(six.with_metaclass(DocumentMetaclass, BaseDocument)):
return data return data
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
warnings.warn("EmbeddedDocument.save is deprecated and will be removed in a next version of mongoengine."
"Use the parent document's .save() or ._instance.save()",
DeprecationWarning, stacklevel=2)
self._instance.save(*args, **kwargs) self._instance.save(*args, **kwargs)
def reload(self, *args, **kwargs): def reload(self, *args, **kwargs):
warnings.warn("EmbeddedDocument.reload is deprecated and will be removed in a next version of mongoengine."
"Use the parent document's .reload() or ._instance.reload()",
DeprecationWarning, stacklevel=2)
self._instance.reload(*args, **kwargs) self._instance.reload(*args, **kwargs)

View File

@ -7,6 +7,8 @@ import uuid
import weakref import weakref
from datetime import datetime from datetime import datetime
import warnings
from bson import DBRef, ObjectId from bson import DBRef, ObjectId
from pymongo.errors import DuplicateKeyError from pymongo.errors import DuplicateKeyError
@ -1482,7 +1484,7 @@ class InstanceTest(MongoDBTestCase):
Message.drop_collection() Message.drop_collection()
# All objects share the same id, but each in a different collection # All objects share the same id, but each in a different collection
user = User(id=1, name='user-name')#.save() user = User(id=1, name='user-name') # .save()
message = Message(id=1, author=user).save() message = Message(id=1, author=user).save()
message.author.name = 'tutu' message.author.name = 'tutu'
@ -2000,7 +2002,6 @@ class InstanceTest(MongoDBTestCase):
child_record.delete() child_record.delete()
self.assertEqual(Record.objects(name='parent').get().children, []) self.assertEqual(Record.objects(name='parent').get().children, [])
def test_reverse_delete_rule_with_custom_id_field(self): def test_reverse_delete_rule_with_custom_id_field(self):
"""Ensure that a referenced document with custom primary key """Ensure that a referenced document with custom primary key
is also deleted upon deletion. is also deleted upon deletion.
@ -3086,6 +3087,24 @@ class InstanceTest(MongoDBTestCase):
"UNDEFINED", "UNDEFINED",
system.nodes["node"].parameters["param"].macros["test"].value) system.nodes["node"].parameters["param"].macros["test"].value)
def test_embedded_document_save_reload_warning(self):
"""Relates to #1570"""
class Embedded(EmbeddedDocument):
pass
class Doc(Document):
emb = EmbeddedDocumentField(Embedded)
doc = Doc(emb=Embedded()).save()
doc.emb.save() # Make sure its still working
with warnings.catch_warnings():
warnings.simplefilter("error", DeprecationWarning)
with self.assertRaises(DeprecationWarning):
doc.emb.save()
with self.assertRaises(DeprecationWarning):
doc.emb.reload()
def test_embedded_document_equality(self): def test_embedded_document_equality(self):
class Test(Document): class Test(Document):
field = StringField(required=True) field = StringField(required=True)
@ -3381,7 +3400,6 @@ class InstanceTest(MongoDBTestCase):
class User(Document): class User(Document):
company = ReferenceField(Company) company = ReferenceField(Company)
# Ensure index creation exception aren't swallowed (#1688) # Ensure index creation exception aren't swallowed (#1688)
with self.assertRaises(DuplicateKeyError): with self.assertRaises(DuplicateKeyError):
User.objects().select_related() User.objects().select_related()