3
0
Fork 0

fix: skip custom rendering for missing grid columns

This commit is contained in:
Lance Edgar 2026-03-09 22:07:29 -05:00
parent 19cf6cf03a
commit ceec4714fa
2 changed files with 35 additions and 11 deletions

View file

@ -2515,6 +2515,8 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
# customize value rendering where applicable # customize value rendering where applicable
for key, renderer in self.renderers.items(): for key, renderer in self.renderers.items():
# nb. no need to render if column not included
if key in self.columns:
value = record.get(key, None) value = record.get(key, None)
record[key] = renderer(original_record, key, value) record[key] = renderer(original_record, key, value)

View file

@ -1985,11 +1985,13 @@ class TestGrid(WebTestCase):
# typical data is a list # typical data is a list
mydata = [ mydata = [
{"foo": "bar"}, {"foo": "bar", "baz": "zoo"},
] ]
grid = self.make_grid(columns=["foo"], data=mydata) grid = self.make_grid(columns=["foo", "baz"], data=mydata)
context = grid.get_vue_context() context = grid.get_vue_context()
self.assertEqual(context, {"data": [{"foo": "bar"}], "row_classes": {}}) self.assertEqual(
context, {"data": [{"foo": "bar", "baz": "zoo"}], "row_classes": {}}
)
# non-declared columns are discarded # non-declared columns are discarded
mydata = [ mydata = [
@ -2001,27 +2003,47 @@ class TestGrid(WebTestCase):
# if grid has actions, that list may be supplemented # if grid has actions, that list may be supplemented
mydata = [ mydata = [
{"foo": "bar"}, {"foo": "bar", "baz": "zoo"},
] ]
grid = self.make_grid(columns=["foo"], data=mydata) grid = self.make_grid(columns=["foo", "baz"], data=mydata)
grid.actions.append(mod.GridAction(self.request, "view", url="/blarg")) grid.actions.append(mod.GridAction(self.request, "view", url="/blarg"))
context = grid.get_vue_context() context = grid.get_vue_context()
self.assertIsNot(context["data"], mydata) self.assertIsNot(context["data"], mydata)
self.assertEqual( self.assertEqual(
context, context,
{"data": [{"foo": "bar", "_action_url_view": "/blarg"}], "row_classes": {}}, {
"data": [{"foo": "bar", "baz": "zoo", "_action_url_view": "/blarg"}],
"row_classes": {},
},
) )
# can override value rendering # can override value rendering
grid.set_renderer("foo", lambda record, key, value: "blah blah") renderer = MagicMock(return_value="blah blah")
grid.set_renderer("foo", renderer)
context = grid.get_vue_context() context = grid.get_vue_context()
self.assertEqual( self.assertEqual(
context, context,
{ {
"data": [{"foo": "blah blah", "_action_url_view": "/blarg"}], "data": [
{"foo": "blah blah", "baz": "zoo", "_action_url_view": "/blarg"}
],
"row_classes": {}, "row_classes": {},
}, },
) )
renderer.assert_called_once_with({"foo": "bar", "baz": "zoo"}, "foo", "bar")
# custom rendering skipped if column not included
grid.remove("foo")
renderer.reset_mock()
context = grid.get_vue_context()
self.assertEqual(
context,
{
"data": [{"baz": "zoo", "_action_url_view": "/blarg"}],
"row_classes": {},
},
)
renderer.assert_not_called()
# can set row class # can set row class
grid.row_class = "whatever" grid.row_class = "whatever"
@ -2029,7 +2051,7 @@ class TestGrid(WebTestCase):
self.assertEqual( self.assertEqual(
context, context,
{ {
"data": [{"foo": "blah blah", "_action_url_view": "/blarg"}], "data": [{"baz": "zoo", "_action_url_view": "/blarg"}],
"row_classes": {"0": "whatever"}, "row_classes": {"0": "whatever"},
}, },
) )