Beispiel #1
0
 def expand(self):
     """Flesh out undefined items with defaults, if any, from the spec."""
     if not self.dense:
         dense = OrderedDictWithDefaults()
         # Populate dict with default values from the spec
         stack = [[dense, self.spec]]
         while stack:
             defs, spec = stack.pop()
             for key, val in spec.items():
                 if isinstance(val, dict):
                     if key not in defs:
                         defs[key] = OrderedDictWithDefaults()
                     stack.append((defs[key], spec[key]))
                 else:
                     try:
                         defs[key] = spec[key][1]
                     except IndexError:
                         if spec[key][0].endswith('_LIST'):
                             defs[key] = []
                         else:
                             defs[key] = None
         # override defaults with sparse values
         m_override(dense, self.sparse)
         un_many(dense)
         self.dense = dense
Beispiel #2
0
 def expand(self):
     """Flesh out undefined items with defaults, if any, from the spec."""
     if not self.dense:
         dense = OrderedDictWithDefaults()
         # Populate dict with default values from the spec
         stack = [[dense, self.spec]]
         while stack:
             defs, spec = stack.pop()
             for node in spec:
                 if not node.is_leaf():
                     if node.name not in defs:
                         defs[node.name] = OrderedDictWithDefaults()
                     stack.append((defs[node.name], node))
                 else:
                     if node.default is ConfigNode.UNSET:
                         if node.vdr and node.vdr.endswith('_LIST'):
                             defs[node.name] = []
                         else:
                             defs[node.name] = None
                     else:
                         defs[node.name] = node.default
         # override defaults with sparse values
         m_override(dense, self.sparse)
         un_many(dense)
         self.dense = dense
Beispiel #3
0
 def expand(self):
     """Flesh out undefined items with defaults, if any, from the spec."""
     if not self.dense:
         dense = OrderedDictWithDefaults()
         # Populate dict with default values from the spec
         stack = [[dense, self.spec]]
         while stack:
             defs, spec = stack.pop()
             for key, val in spec.items():
                 if isinstance(val, dict):
                     if key not in defs:
                         defs[key] = OrderedDictWithDefaults()
                     stack.append((defs[key], spec[key]))
                 else:
                     try:
                         defs[key] = spec[key][1]
                     except IndexError:
                         if spec[key][0].endswith('_LIST'):
                             defs[key] = []
                         else:
                             defs[key] = None
         # override defaults with sparse values
         m_override(dense, self.sparse)
         un_many(dense)
         self.dense = dense
Beispiel #4
0
    def test_un_many(self):
        target = OrderedDictWithDefaults()
        target["name"] = OrderedDictWithDefaults()
        target["name"]["index"] = 0
        target['__MANY__'] = OrderedDictWithDefaults()
        target['__MANY__']['name2'] = OrderedDictWithDefaults()
        target['__MANY__']['subdict'] = OrderedDictWithDefaults()
        target['__MANY__']['key'] = []
        target['__MANY__']['text'] = "Ad infinitum"

        un_many(None)  # harmless, no error/exception

        un_many(target)

        self.assertFalse('__MANY__' in list(target))
Beispiel #5
0
    def test_un_many_keyerror_no_default(self):
        """
        Only way that this may happen is if dict is updated elsewhere.

        And in this case, when there is no defaults_, the API raises the
        current KeyError.
        """
        class MyODWD(OrderedDictWithDefaults):
            def __delitem__(self, _):
                raise KeyError()

        target = MyODWD()
        target["name"] = "Anything"
        target['__MANY__'] = MyODWD()
        target['__MANY__']['name2'] = MyODWD()
        target['__MANY__']['subdict'] = MyODWD()
        target['__MANY__']['key'] = []
        target['__MANY__']['text'] = "Ad infinitum"

        un_many(None)  # harmless, no error/exception

        with self.assertRaises(KeyError):
            un_many(target)
Beispiel #6
0
    def test_un_many_keyerror(self):
        """
        Only way that this may happen is if dict is updated elsewhere.
        """
        class MyODWD(OrderedDictWithDefaults):
            def __delitem__(self, _):
                raise KeyError()

        target = MyODWD()
        target["name"] = "Anything"
        target.defaults_ = dict()
        target.defaults_["name"] = True
        target.defaults_["__MANY__"] = True
        target['__MANY__'] = MyODWD()
        target['__MANY__']['name2'] = MyODWD()
        target['__MANY__']['subdict'] = MyODWD()
        target['__MANY__']['key'] = []
        target['__MANY__']['text'] = "Ad infinitum"

        un_many(None)  # harmless, no error/exception
        un_many(target)

        self.assertTrue('__MANY__' in target, target)