def test_map_values(): n = OrderedMapping(a=1) n.b = 2 res = pkcollections.map_values(n, lambda v: v * 2) assert [2, 4] == res, \ 'map_values should call op in order' assert [1, 2] == pkcollections.map_values(n), \ 'map_values should return values with no op'
def value_widget(default, value, parent): d = default.decl t = d.py_type v = None if isinstance(t, enum.EnumMeta): widget = QtGui.QComboBox(parent) v = '' choices = t if default.children: choices = pkcollections.map_values( default.children, lambda x: x.value) for e in choices: n = rt_qt.i18n_text(e.display_name) widget.addItem(n, userData=e.value) if len(n) > len(v): v = n set_widget_value(d, value, widget) elif issubclass(t, bool): widget = QtGui.QCheckBox(parent) v = rt_qt.i18n_text(d.label) set_widget_value(d, value, widget) else: widget = QtGui.QLineEdit(parent) v = set_widget_value(d, value, widget) return (widget, v)
def iter_nodes(self): yield self if not self.children: return for c in pkcollections.map_values(self.children): for l in c.iter_nodes(): yield l
def iter_leaves(self): if not self.children: yield self else: for c in pkcollections.map_values(self.children): for l in c.iter_leaves(): yield l
def _propagation(values): merged = copy.deepcopy(_PROPAGATION) pkcollections.mapping_merge(merged, values) return pkcollections.map_values( merged, lambda v: int(v) if isinstance(v, bool) else v, )
def _iter_children(parent_defaults): res = collections.OrderedDict() for df in pkcollections.map_values(parent_defaults.children): d = df.decl if df.children: res[d.name] = _iter_children(df) continue f = self._fields[d.name] res[d.name] = get_widget_value(d, f['widget']) return res
def _iter_children(parent_default, p): for df in pkcollections.map_values(parent_default.children): d = df.decl qlabel = _label(d) if df.children: _heading(qlabel) res['num'] += 1 widget = None _iter_children(df, p[d.name]) else: rt_qt.set_id(qlabel, 'form_field') (widget, value) = value_widget(df, p[d.name], self._frame) self._layout.addRow(qlabel, widget) if len(value) > res['max_value']: res['max_value'] = len(value) self._fields[d.name] = { 'qlabel': qlabel, 'widget': widget, } res['num'] += 1