From 9a4aef03587c3e9c3643cacd2aad3a139e81887a Mon Sep 17 00:00:00 2001 From: DavidBord Date: Wed, 29 Oct 2014 13:36:42 +0200 Subject: [PATCH] fix-#789: abstract shouldn't be inherited in EmbeddedDocument --- docs/changelog.rst | 1 + mongoengine/base/metaclasses.py | 3 ++- tests/document/inheritance.py | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index f17a61c2..155348c7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- abstract shouldn't be inherited in EmbeddedDocument # 789 - Allow specifying the '_cls' as a field for indexes #397 - Stop ensure_indexes running on a secondaries unless connection is through mongos #746 - Not overriding default values when loading a subset of fields #399 diff --git a/mongoengine/base/metaclasses.py b/mongoengine/base/metaclasses.py index e8014553..48da84f4 100644 --- a/mongoengine/base/metaclasses.py +++ b/mongoengine/base/metaclasses.py @@ -46,8 +46,9 @@ class DocumentMetaclass(type): elif hasattr(base, '_meta'): meta.merge(base._meta) attrs['_meta'] = meta + attrs['_meta']['abstract'] = False # 789: EmbeddedDocument shouldn't inherit abstract - if '_meta' in attrs and attrs['_meta'].get('allow_inheritance', ALLOW_INHERITANCE): + if attrs['_meta'].get('allow_inheritance', ALLOW_INHERITANCE): StringField = _import_class('StringField') attrs['_cls'] = StringField() diff --git a/tests/document/inheritance.py b/tests/document/inheritance.py index 566d3699..e8347054 100644 --- a/tests/document/inheritance.py +++ b/tests/document/inheritance.py @@ -397,6 +397,16 @@ class InheritanceTest(unittest.TestCase): meta = {'abstract': True} self.assertRaises(ValueError, create_bad_abstract) + def test_abstract_embedded_documents(self): + # 789: EmbeddedDocument shouldn't inherit abstract + class A(EmbeddedDocument): + meta = {"abstract": True} + + class B(A): + pass + + self.assertFalse(B._meta["abstract"]) + def test_inherited_collections(self): """Ensure that subclassed documents don't override parents' collections