diff --git a/wagtail/blocks/base.py b/wagtail/blocks/base.py index a4df2d3a19..bbf184f9d8 100644 --- a/wagtail/blocks/base.py +++ b/wagtail/blocks/base.py @@ -55,6 +55,7 @@ class BaseBlock(type): class Block(metaclass=BaseBlock): name = "" creation_counter = 0 + definition_registry = {} TEMPLATE_VAR = "value" @@ -94,6 +95,7 @@ class Block(metaclass=BaseBlock): self.creation_counter = Block.creation_counter Block.creation_counter += 1 self.definition_prefix = "blockdef-%d" % self.creation_counter + Block.definition_registry[self.definition_prefix] = self self.label = self.meta.label or "" diff --git a/wagtail/tests/test_blocks.py b/wagtail/tests/test_blocks.py index c6dfe0f0e2..c8032c9c9d 100644 --- a/wagtail/tests/test_blocks.py +++ b/wagtail/tests/test_blocks.py @@ -57,6 +57,11 @@ class TestBlock(SimpleTestCase): obj = object() self.assertIs(blocks.Block().normalize(obj), obj) + def test_block_definition_registry(self): + """Instantiating a Block should register it in the definition registry""" + block = blocks.Block() + self.assertIs(blocks.Block.definition_registry[block.definition_prefix], block) + class TestFieldBlock(WagtailTestUtils, SimpleTestCase): def test_charfield_render(self): @@ -65,6 +70,13 @@ class TestFieldBlock(WagtailTestUtils, SimpleTestCase): self.assertEqual(html, "Hello world!") + def test_block_definition_registry(self): + block = blocks.CharBlock(label="Test block") + registered_block = blocks.Block.definition_registry[block.definition_prefix] + self.assertIsInstance(registered_block, blocks.CharBlock) + self.assertEqual(registered_block.meta.label, "Test block") + self.assertIs(registered_block, block) + def test_charfield_render_with_template(self): block = blocks.CharBlock(template="tests/blocks/heading_block.html") html = block.render("Hello world!")