Exemple #1
0
    def _createNode(self):
        if self._prototype is None:
            node = ArrayNode(self._name, self._parent);
            self._validateConcreteNode(node);

            node.setAddIfNotSet(self._addDefaults);

            for child in self._children.values():
                child._parent = node;
                node.addChild(child.getNode());
        else:
            node = PrototypedArrayNode(self._name, self._parent);

            self._validatePrototypeNode(node);

            if not self._key is None:
                node.setKeyAttribute(self._key, self._removeKeyItem);

            if self._atLeastOne:
                node.setMinNumberOfElements(1);

            if self._default:
                node.setDefaultValue(self._defaultValue);

            if not self._addDefaultChildren is False:
                node.setAddChildrenIfNoneSet(self._addDefaultChildren);
                if isinstance(self._prototype, type(self)):
                    if self._prototype._prototype is None:
                        self._prototype.addDefaultsIfNotSet();

            self._prototype._parent = node;
            node.setPrototype(self._prototype.getNode());

        node.setAllowNewKeys(self._allowNewKeys);
        node.addEquivalentValue(None, self._nullEquivalent);
        node.addEquivalentValue(True, self._trueEquivalent);
        node.addEquivalentValue(False, self._falseEquivalent);
        node.setPerformDeepMerging(self._performDeepMerging);
        node.setRequired(self._required);
        node.setIgnoreExtraKeys(self._ignoreExtraKeys);
        node.setNormalizeKeys(self._normalizeKeys);

        if not self._normalizationBuilder is None:
            node.setNormalizationClosures(self._normalizationBuilder.befores);
            node.setXmlRemappings(self._normalizationBuilder.remappings);

        if not self._mergeBuilder is None:
            node.setAllowOverwrite(self._mergeBuilder.allowOverwrite);
            node.setAllowFalse(self._mergeBuilder.allowFalse);

        if not self._validationBuilder is None:
            node.setFinalValidationClosures(self._validationBuilder.rules);

        return node;
    def _getPrototypeNodeWithDefaultChildren(self):

        node = PrototypedArrayNode('root');
        prototype = ArrayNode("", node);
        child = ScalarNode('foo');
        child.setDefaultValue('bar');
        prototype.addChild(child);
        prototype.setAddIfNotSet(True);
        node.setPrototype(prototype);

        return node;