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:
parent
637bf442fa
commit
22a1c99abe
2 changed files with 21 additions and 1 deletions
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue