Example #1
0
    def test_expand_identities(self):
        root = {0:'x'}
        l1 = [{1:'a'}, {1:'b'}, {1:'c'}]
        l2 = [{2:'a'}, {2:'b'}, {2:'c'}]
        l1cp = copy.deepcopy(l1)
        d = {'root': root, 'l1':l1, 'l2':l2}

        try:
            next(namespaces.expand_fuzzyspec_partial(d, ('root', 'l1', 'l2')))
        except StopIteration as e:
            specs = e.value
        else:
            raise RuntimeError()


        self.assertEqual(len(specs), 3*3)

        for i, spec in enumerate(specs):
            res = namespaces.resolve(d, spec)
            namespaces.push_nslevel(res, 'container', {'i':i})


        for  i, spec in enumerate(specs):
            res = namespaces.resolve(d, (*spec, 'container'))
            self.assertEqual(res['i'], i)
            self.assertEqual(res[1], l1cp[i//3][1])
            self.assertEqual(res[2], l2[i%3][2])

            self.assertEqual(res[0], 'x')
Example #2
0
 def process_fuzzyspec(self, fuzzy, ns, parents=None):
     if not parents:
         parents = []
     gen = namespaces.expand_fuzzyspec_partial(fuzzy, ns)
     while True:
         try:
             key, currspec, currns = next(gen)
         except StopIteration as e:
             return e.value
         else:
             self.resolve_key(key, currns, parents=[*parents, currspec])
Example #3
0
 def test_nested_expand(self):
     d = self.d
     d['c'][0]['l3'] = [{'x':1},{'x':2}]
     d['c'][1]['l3'] = [{'x':1},]
     ns = ChainMap(d)
     fuzzy = ('c', 'l3')
     gen = namespaces.expand_fuzzyspec_partial(ns, fuzzy)
     with self.assertRaises(StopIteration) as ec:
         next(gen)
     self.assertEqual(ec.exception.value,
      [(('c', 0), ('l3', 0)), (('c', 0), ('l3', 1)), (('c', 1), ('l3', 0))]
     )
Example #4
0
 def process_fuzzyspec(self, fuzzy, ns, parents=None):
     if parents is None:
         parents = []
     gen = namespaces.expand_fuzzyspec_partial(ns, fuzzy)
     while True:
         try:
             key, currspec, currns = next(gen)
         except StopIteration as e:
             return e.value
         except TypeError as e:
             raise ConfigError("Error when processing namespace "
             "specification %s: %s" % (fuzzy, e))
         else:
             self.resolve_key(key, currns, parents=[*parents, currspec])
Example #5
0
    def test_expand(self):
        fuzzy = ('a', 'c')
        ns = ChainMap(self.d)
        gen = namespaces.expand_fuzzyspec_partial(ns, fuzzy)
        #self.assertFalse(list(gen))
        while True:
            try:
                next(gen)
            except StopIteration as e:
                self.assertEqual(e.value, [('a', ('c', 0)), ('a', ('c', 1))])
                break
            else:
                self.fail()

        fuzzy = ('a', 'x', 'c')
        ns = ChainMap(self.d)
        gen = namespaces.expand_fuzzyspec_partial(ns, fuzzy)
        #self.assertFalse(list(gen))
        var, spec, cns = next(gen)
        cns[var] = 'not ok'
        with self.assertRaises(TypeError):
            next(gen)

        fuzzy = ('a', 'xx', 'c')
        ns = ChainMap(self.d)
        gen = namespaces.expand_fuzzyspec_partial(ns, fuzzy)
        #self.assertFalse(list(gen))
        var, spec, cns = next(gen)
        cns[var] = [{'ok': True}, {'ok':'yes'}, {'ok':1}]
        with self.assertRaises(StopIteration) as ec:
            next(gen)
        specs = ec.exception.value
        self.assertEqual(set(specs),
             set(itertools.product('a', [('xx', 0), ('xx', 1,), ('xx', 2)],
                                         [('c', 0), ('c', 1)]))
        )