3
0
Fork 0

fix: make empty <select> option work better for WuttaDictEnum

pretty sure this makes sense.. guess we'll see if it causes problems
This commit is contained in:
Lance Edgar 2026-03-05 20:28:47 -06:00
parent 637bf442fa
commit 22a1c99abe
2 changed files with 21 additions and 1 deletions

View file

@ -205,17 +205,23 @@ class WuttaDictEnum(colander.String):
""" """
def __init__(self, request, enum_dct, *args, **kwargs): def __init__(self, request, enum_dct, *args, **kwargs):
self.null_value = kwargs.pop("null_value", "")
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.request = request self.request = request
self.config = self.request.wutta_config self.config = self.request.wutta_config
self.app = self.config.get_app() self.app = self.config.get_app()
self.enum_dct = enum_dct self.enum_dct = enum_dct
def serialize(self, node, appstruct):
if appstruct is colander.null:
return self.null_value
return super().serialize(node, appstruct)
def widget_maker(self, **kwargs): # pylint: disable=empty-docstring def widget_maker(self, **kwargs): # pylint: disable=empty-docstring
""" """ """ """
if "values" not in kwargs: if "values" not in kwargs:
kwargs["values"] = list(self.enum_dct.items()) kwargs["values"] = list(self.enum_dct.items())
kwargs.setdefault("null_value", self.null_value)
return widgets.SelectWidget(**kwargs) return widgets.SelectWidget(**kwargs)

View file

@ -153,6 +153,20 @@ MOCK_STATUS = {
class TestWuttaDictEnum(WebTestCase): class TestWuttaDictEnum(WebTestCase):
def test_serialize(self):
# null_value is empty string by default
typ = mod.WuttaDictEnum(self.request, MOCK_STATUS)
node = colander.SchemaNode(typ)
self.assertEqual(typ.serialize(node, 1), "1")
self.assertEqual(typ.serialize(node, colander.null), "")
# but can override if needed (?)
typ = mod.WuttaDictEnum(self.request, MOCK_STATUS, null_value="nope")
node = colander.SchemaNode(typ)
self.assertEqual(typ.serialize(node, 1), "1")
self.assertEqual(typ.serialize(node, colander.null), "nope")
def test_widget_maker(self): def test_widget_maker(self):
typ = mod.WuttaDictEnum(self.request, MOCK_STATUS) typ = mod.WuttaDictEnum(self.request, MOCK_STATUS)
widget = typ.widget_maker() widget = typ.widget_maker()