Fixed MRO error that occured on document inheritance
This commit is contained in:
parent
edfda6ad5b
commit
3b4df4615a
@ -187,19 +187,20 @@ class DocumentMetaclass(type):
|
|||||||
for field in new_class._fields.values():
|
for field in new_class._fields.values():
|
||||||
field.owner_document = new_class
|
field.owner_document = new_class
|
||||||
|
|
||||||
module = attrs.pop('__module__')
|
module = attrs.get('__module__')
|
||||||
|
|
||||||
new_class.add_to_class('DoesNotExist', subclass_exception('DoesNotExist',
|
base_excs = tuple(base.DoesNotExist for base in bases
|
||||||
tuple(x.DoesNotExist
|
if hasattr(base, 'DoesNotExist')) or (DoesNotExist,)
|
||||||
for k,x in superclasses.items())
|
exc = subclass_exception('DoesNotExist', base_excs, module)
|
||||||
or (DoesNotExist,), module))
|
new_class.add_to_class('DoesNotExist', exc)
|
||||||
|
|
||||||
new_class.add_to_class('MultipleObjectsReturned', subclass_exception('MultipleObjectsReturned',
|
base_excs = tuple(base.MultipleObjectsReturned for base in bases
|
||||||
tuple(x.MultipleObjectsReturned
|
if hasattr(base, 'MultipleObjectsReturned'))
|
||||||
for k,x in superclasses.items())
|
base_excs = base_excs or (MultipleObjectsReturned,)
|
||||||
or (MultipleObjectsReturned,), module))
|
exc = subclass_exception('MultipleObjectsReturned', base_excs, module)
|
||||||
return new_class
|
new_class.add_to_class('MultipleObjectsReturned', exc)
|
||||||
|
|
||||||
|
return new_class
|
||||||
|
|
||||||
def add_to_class(self, name, value):
|
def add_to_class(self, name, value):
|
||||||
setattr(self, name, value)
|
setattr(self, name, value)
|
||||||
|
@ -127,6 +127,11 @@ class DocumentTest(unittest.TestCase):
|
|||||||
self.assertEqual(Employee._meta['collection'],
|
self.assertEqual(Employee._meta['collection'],
|
||||||
self.Person._meta['collection'])
|
self.Person._meta['collection'])
|
||||||
|
|
||||||
|
# Ensure that MRO error is not raised
|
||||||
|
class A(Document): pass
|
||||||
|
class B(A): pass
|
||||||
|
class C(B): pass
|
||||||
|
|
||||||
def test_allow_inheritance(self):
|
def test_allow_inheritance(self):
|
||||||
"""Ensure that inheritance may be disabled on simple classes and that
|
"""Ensure that inheritance may be disabled on simple classes and that
|
||||||
_cls and _types will not be used.
|
_cls and _types will not be used.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user