From 037a0251c865bb0dc1ba49a436bff2d1bce7b6eb Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Thu, 21 Sep 2023 16:39:44 -0400 Subject: [PATCH] Fix #76 -- Ensure SealableModel(seal) respects MRO. --- seal/models.py | 2 ++ tests/test_models.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/seal/models.py b/seal/models.py index 0724806..13d83e9 100644 --- a/seal/models.py +++ b/seal/models.py @@ -61,6 +61,8 @@ class SealableModel(models.Model): """ def __init_subclass__(cls, seal=None, **kwargs): + if seal is None: + seal = getattr(cls, "_seal_managers", seal) cls._seal_managers = seal return super().__init_subclass__(**kwargs) diff --git a/tests/test_models.py b/tests/test_models.py index 7f1b9c2..bb42da2 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -196,10 +196,17 @@ class SealedManagers(SealableModel): ) class MixinInitSubclass: - def __init_subclass__(cls, foo, **kwargs): + def __init_subclass__(cls, foo=None, **kwargs): + cls.foo = foo super().__init_subclass__(**kwargs) - class SealedModel(SealableModel, MixinInitSubclass, foo="bar", seal=True): + class SealedBaseModel(MixinInitSubclass, SealableModel, foo="bar", seal=True): + class Meta: + abstract = True + + self.assertEqual(SealedBaseModel.foo, "bar") + + class SealedModel(SealedBaseModel): manager = SealableManager(seal=False) as_manager = SealableQuerySet.as_manager(seal=False)