Made SerializeMixin check lockfile attr at import time.

This commit is contained in:
Adam Johnson 2021-05-21 10:36:37 +01:00 committed by Mariusz Felisiak
parent d8c17aa10c
commit 2e4711c611
2 changed files with 26 additions and 2 deletions

View File

@ -1624,12 +1624,15 @@ class SerializeMixin:
""" """
lockfile = None lockfile = None
@classmethod def __init_subclass__(cls, /, **kwargs):
def setUpClass(cls): super().__init_subclass__(**kwargs)
if cls.lockfile is None: if cls.lockfile is None:
raise ValueError( raise ValueError(
"{}.lockfile isn't set. Set it to a unique value " "{}.lockfile isn't set. Set it to a unique value "
"in the base class.".format(cls.__name__)) "in the base class.".format(cls.__name__))
@classmethod
def setUpClass(cls):
cls._lockfile = open(cls.lockfile) cls._lockfile = open(cls.lockfile)
locks.lock(cls._lockfile, locks.LOCK_EX) locks.lock(cls._lockfile, locks.LOCK_EX)
super().setUpClass() super().setUpClass()

View File

@ -0,0 +1,21 @@
from django.test import SimpleTestCase
from django.test.testcases import SerializeMixin
class TestSerializeMixin(SimpleTestCase):
def test_init_without_lockfile(self):
msg = (
"ExampleTests.lockfile isn't set. Set it to a unique value in the "
"base class."
)
with self.assertRaisesMessage(ValueError, msg):
class ExampleTests(SerializeMixin, SimpleTestCase):
pass
class TestSerializeMixinUse(SerializeMixin, SimpleTestCase):
lockfile = __file__
def test_usage(self):
# Running this test ensures that the lock/unlock functions have passed.
pass