Example #1
0
 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))
Example #2
0
    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()
Example #3
0
    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)
Example #4
0
 def addValue(self, key, value, position):
     try:
         realkey = self.type.keytype(key)
     except ValueError, e:
         raise ZConfig.DataConversionError(e, key, position)
Example #5
0
 def convert(self, datatype):
     try:
         return datatype(self.value)
     except ValueError as e:
         raise ZConfig.DataConversionError(e, self.value, self.position)
Example #6
0
    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