Skip to content

Commit

Permalink
Merge pull request #30 from tbrlpld/remove-context-none-guard
Browse files Browse the repository at this point in the history
Remove context `None` guard exception
  • Loading branch information
tbrlpld authored Jan 14, 2025
2 parents bd265d4 + a7e6863 commit ee2e244
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Removed

- ...
- The `TypeError` that was raised in `render_html` when `get_context_data` returned `None` was removed. This change is Wagtail-compatible. ([#30](https://github.com/tbrlpld/laces/pull/30))

## [0.1.1] - 2024-02-10

Expand Down
3 changes: 0 additions & 3 deletions laces/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ def render_html(
`django.utils.safestring.SafeString` instance.
"""
context_data = self.get_context_data(parent_context)
if context_data is None:
raise TypeError("Expected a dict from get_context_data, got None")

template = get_template(self.template_name)
return template.render(context_data)

Expand Down
31 changes: 21 additions & 10 deletions laces/tests/test_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,30 @@ def get_context_data(

self.assertEqual(result, "Hello World")

def test_render_html_when_get_context_data_returns_None(self) -> None:
def test_render_html_when_get_context_data_returns_none(self) -> None:
"""
Test `render_html` method when `get_context_data` returns `None`.
The `render_html` method raises a `TypeError` when `None` is returned from
`get_context_method`. This behavior was present when the class was extracted
from Wagtail. It is not totally clear why this specific check is needed. By
default, the `get_context_data` method provides and empty dict. If an override
wanted to `get_context_data` return `None`, it should be expected that no
context data is available during rendering. The underlying `template.render`
method does not seem to be ok with `None` as the provided context.
Originally, the `render_html` method explicitly raised a `TypeError` when
`None` was returned from `get_context_method`.
I was not able to find out why this check was put in place. The usage of
components in Wagtail does not reveal any issues when the raising of the
exception is removed. Also, the following template rendering (with
`django.template.base.Template.render`) works just fine with the context being
`None`.
It seems therefore safe to assume that this was a left-over without much current
need.
This test is in place to prove that a component can behave as expected when the
`get_context_data` method returns `None`.
"""

# -----------------------------------------------------------------------------
class ExampleComponent(Component):
template_name = self.example_template_name

def get_context_data(
self,
parent_context: "Optional[RenderContext]" = None,
Expand All @@ -175,9 +184,11 @@ def get_context_data(
return None

# -----------------------------------------------------------------------------
self.set_example_template_content("Hello")

result = ExampleComponent().render_html()

with self.assertRaises(TypeError):
ExampleComponent().render_html()
self.assertEqual(result, "Hello")

def test_media_defined_through_nested_class(self) -> None:
"""
Expand Down

0 comments on commit ee2e244

Please sign in to comment.