示例#1
0
    def test_select(self, select_dummy_field):
        setattr(select_dummy_field, "name", "f")

        assert (
            Select()(select_dummy_field) ==
            '<select id="" name="f"><option selected value="foo">lfoo</option>'
            '<option value="bar">lbar</option></select>')

        assert (Select(multiple=True)(select_dummy_field) ==
                '<select id="" multiple name="f"><option selected value="foo">'
                'lfoo</option><option value="bar">lbar</option></select>')
示例#2
0
class IndicoEnumSelectField(SelectFieldBase):
    """Select field backed by a :class:`TitledEnum`"""

    widget = Select()

    def __init__(self, label=None, validators=None, enum=None, sorted=False, only=None, skip=None, none=None,
                 titles=None, **kwargs):
        super(IndicoEnumSelectField, self).__init__(label, validators, **kwargs)
        self.enum = enum
        self.sorted = sorted
        self.only = only
        self.skip = skip or set()
        self.none = none
        self.titles = titles

    def iter_choices(self):
        items = (x for x in self.enum if x not in self.skip and (self.only is None or x in self.only))
        if self.sorted:
            items = sorted(items, key=attrgetter('title'))
        if self.none is not None:
            yield ('', self.none, self.data is None)
        for item in items:
            title = item.title if self.titles is None else self.titles[item]
            yield (item.name, title, item == self.data)

    def process_formdata(self, valuelist):
        if valuelist:
            if not valuelist[0] and self.none is not None:
                self.data = None
            else:
                try:
                    self.data = self.enum[valuelist[0]]
                except KeyError:
                    raise ValueError(self.gettext('Not a valid choice'))