def constuct(self): values = self._values for name, ci in self.type: assert ci.attribute is not None attr = ci.attribute if ci.ismulti(): if ci.issection(): v = [] for s in values[attr]: if s is not None: st = s.getSectionDefinition() try: s = st.datatype(s) except ValueError, e: raise ZConfig.DataConversionError( e, s, (-1, -1, None)) v.append(s) elif ci.name == '+': v = values[attr] for key, val in v.items(): v[key] = [vi.convert(ci.datatype) for vi in val] else: v = [vi.convert(ci.datatype) for vi in values[attr]] elif ci.issection(): if values[attr] is not None: st = values[attr].getSectionDefinition() try: v = st.datatype(values[attr]) except ValueError, e: raise ZConfig.DataConversionError( e, values[attr], (-1, -1, None))
def constuct(self): values = self._values for name, ci in self.type: assert ci.attribute is not None attr = ci.attribute if ci.ismulti(): if ci.issection(): v = [] for s in values[attr]: if s is not None: st = s.getSectionDefinition() try: s = st.datatype(s) except ValueError as e: raise_with_same_tb( ZConfig.DataConversionError( e, s, (-1, -1, None))) v.append(s) elif ci.name == '+': v = values[attr] for key, val in v.items(): v[key] = [vi.convert(ci.datatype) for vi in val] else: v = [vi.convert(ci.datatype) for vi in values[attr]] elif ci.issection(): if values[attr] is not None: st = values[attr].getSectionDefinition() try: v = st.datatype(values[attr]) except ValueError as e: raise_with_same_tb( ZConfig.DataConversionError( e, values[attr], (-1, -1, None))) else: v = None elif name == '+': v = values[attr] if not v: for key, val in ci.getdefault().items(): v[key] = val.convert(ci.datatype) else: for key, val in v.items(): v[key] = val.convert(ci.datatype) else: v = values[attr] if v is not None: v = v.convert(ci.datatype) values[attr] = v if ci.handler is not None: self.handlers.append((ci.handler, v)) return self.createValue()
def addValue(self, key, value, position): try: realkey = self.type.keytype(key) except ValueError as e: raise_with_same_tb(ZConfig.DataConversionError(e, key, position)) if realkey in self.optionbag: return ZConfig.matcher.BaseMatcher.addValue(self, key, value, position)
def addValue(self, key, value, position): try: realkey = self.type.keytype(key) except ValueError, e: raise ZConfig.DataConversionError(e, key, position)
def convert(self, datatype): try: return datatype(self.value) except ValueError as e: raise ZConfig.DataConversionError(e, self.value, self.position)
def addValue(self, key, value, position): try: realkey = self.type.keytype(key) except ValueError as e: raise ZConfig.DataConversionError(e, key, position) arbkey_info = None for i in range(len(self.type)): k, ci = self.type[i] if k == realkey: break if ci.name == "+" and not ci.issection(): arbkey_info = k, ci else: if arbkey_info is None: raise ZConfig.ConfigurationError( repr(key) + " is not a known key name") k, ci = arbkey_info if ci.issection(): # pragma: no cover if ci.name: extra = " in %s sections" % repr(self.type.name) else: extra = "" raise ZConfig.ConfigurationError("%s is not a valid key name%s" % (repr(key), extra)) ismulti = ci.ismulti() attr = ci.attribute assert attr is not None v = self._values[attr] if v is None: if k == '+': v = {} # pragma: no cover elif ismulti: v = [] # pragma: no cover self._values[attr] = v elif not ismulti: if k != '+': raise ZConfig.ConfigurationError( repr(key) + " does not support multiple values") elif len(v) == ci.maxOccurs: # pragma: no cover # This code may be impossible to hit. Previously it would # have raised a NameError because it used an unbound # local. raise ZConfig.ConfigurationError("too many values for " + repr(ci)) value = ValueInfo(value, position) if k == '+': if ismulti: if realkey in v: v[realkey].append(value) else: v[realkey] = [value] else: if realkey in v: # pragma: no cover raise ZConfig.ConfigurationError("too many values for " + repr(key)) v[realkey] = value elif ismulti: v.append(value) else: self._values[attr] = value