Example #1
0
 def test_interpolated_list_type(self):
     p1 = Parameters({'a': [1, 2, 3]}, SETTINGS, 'first')
     r = {'a': [1, 2, 3]}
     self.assertIs(type(p1.as_dict()['a']), ParameterList)
     p1.interpolate()
     self.assertIs(type(p1.as_dict()['a']), list)
     self.assertEqual(p1.as_dict(), r)
Example #2
0
 def test_escaped_string_in_ref_dict_overwrite(self):
     p1 = Parameters(
         {
             'a': {
                 'one': '\${not_a_ref}'
             },
             'b': {
                 'two': '\${also_not_a_ref}'
             }
         }, SETTINGS, '')
     p2 = Parameters({'c': '${a}'}, SETTINGS, '')
     p3 = Parameters({'c': '${b}'}, SETTINGS, '')
     p4 = Parameters({'c': {'one': '\${again_not_a_ref}'}}, SETTINGS, '')
     r = {
         'a': {
             'one': '${not_a_ref}'
         },
         'b': {
             'two': '${also_not_a_ref}'
         },
         'c': {
             'one': '${again_not_a_ref}',
             'two': '${also_not_a_ref}'
         }
     }
     p1.merge(p2)
     p1.merge(p3)
     p1.merge(p4)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #3
0
 def test_escaped_string_overwrites(self):
     p1 = Parameters({'test': '\${not_a_ref}'}, SETTINGS, '')
     p2 = Parameters({'test': '\${also_not_a_ref}'}, SETTINGS, '')
     r = {'test': '${also_not_a_ref}'}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #4
0
 def test_overwrite_none(self):
     p1 = Parameters({'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None})
     p2 = Parameters({'A': 'abc', 'B': [1, 2, 3], 'C': {'a': 'aaa', 'b': 'bbb'}, 'D': '${A}', 'E': '${B}', 'F': '${C}'})
     r = {'A': 'abc', 'B': [1, 2, 3], 'C': {'a': 'aaa', 'b': 'bbb'}, 'D': 'abc', 'E': [1, 2, 3], 'F': {'a': 'aaa', 'b': 'bbb'}}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #5
0
 def test_merged_interpolated_dict_type(self):
     p1 = Parameters({'a': {
         'one': 1,
         'two': 2,
         'three': 3
     }}, SETTINGS, 'first')
     p2 = Parameters({'a': {
         'four': 4,
         'five': 5,
         'six': 6
     }}, SETTINGS, 'second')
     r = {
         'a': {
             'one': 1,
             'two': 2,
             'three': 3,
             'four': 4,
             'five': 5,
             'six': 6
         }
     }
     self.assertIs(type(p1.as_dict()['a']), ParameterDict)
     self.assertIs(type(p2.as_dict()['a']), ParameterDict)
     p1.merge(p2)
     self.assertIs(type(p1.as_dict()['a']), ParameterDict)
     p1.interpolate()
     self.assertIs(type(p1.as_dict()['a']), dict)
     self.assertEqual(p1.as_dict(), r)
Example #6
0
 def test_overwrite_list(self):
     p1 = Parameters({'a': [1, 2]}, SETTINGS, '')
     p2 = Parameters({'~a': [3, 4]}, SETTINGS, '')
     r = {'a': [3, 4]}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #7
0
 def test_interpolate_list(self):
     l = [41,42,43]
     d = {'foo': 'bar'.join(REFERENCE_SENTINELS),
          'bar': l}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], l)
Example #8
0
 def test_if_expr_invquery(self):
     e = {'node1': {'a': 1, 'b': 2}, 'node2': {'a': 3, 'b': 4}}
     p = Parameters({'exp': '$[ exports:a if exports:b == 4 ]'}, SETTINGS,
                    '')
     r = {'exp': {'node2': 3}}
     p.interpolate(e)
     self.assertEqual(p.as_dict(), r)
Example #9
0
 def test_interpolate_double_escaping(self):
     v = ESCAPE_CHARACTER + 'meep'
     d = {'foo': ESCAPE_CHARACTER + ESCAPE_CHARACTER + 'bar'.join(REFERENCE_SENTINELS),
          'bar': 'meep'}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], v)
Example #10
0
 def test_complex_reference_overwriting(self):
     p1 = Parameters({'one': 'abc_123_${two}_${three}', 'two': 'XYZ', 'four': 4})
     p2 = Parameters({'one': 'QWERTY_${three}_${four}', 'three': '999'})
     r = {'one': 'QWERTY_999_4', 'two': 'XYZ', 'three': '999', 'four': 4}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #11
0
 def test_interpolate_single(self):
     v = 42
     d = {'foo': 'bar'.join(REFERENCE_SENTINELS),
          'bar': v}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], v)
Example #12
0
 def test_interpolate_list(self):
     l = [41,42,43]
     d = {'foo': 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS),
          'bar': l}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], l)
Example #13
0
 def test_interpolate_infrecursion(self):
     v = 42
     d = {'foo': 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS),
          'bar': 'foo'.join(PARAMETER_INTERPOLATION_SENTINELS)}
     p = Parameters(d)
     with self.assertRaises(InfiniteRecursionError):
         p.interpolate()
Example #14
0
 def test_interpolate_single(self):
     v = 42
     d = {'foo': 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS),
          'bar': v}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], v)
Example #15
0
 def test_list_merging_for_multiple_nodes(self):
     p1 = Parameters({'alpha': {'one': [1, 2]}}, SETTINGS, '')
     p2 = Parameters({'beta': {'two': '${alpha:one}'}}, SETTINGS, '')
     p3 = Parameters({'beta': {'two': [3]}}, SETTINGS, '')
     n1 = Parameters({'name': 'node1'}, SETTINGS, '')
     r1 = {
         'alpha': {
             'one': [1, 2]
         },
         'beta': {
             'two': [1, 2]
         },
         'name': 'node1'
     }
     r2 = {
         'alpha': {
             'one': [1, 2]
         },
         'beta': {
             'two': [1, 2, 3]
         },
         'name': 'node2'
     }
     n1.merge(p1)
     n1.merge(p2)
     n1.interpolate()
     n2 = Parameters({'name': 'node2'}, SETTINGS, '')
     n2.merge(p1)
     n2.merge(p2)
     n2.merge(p3)
     n2.interpolate()
     self.assertEqual(n1.as_dict(), r1)
     self.assertEqual(n2.as_dict(), r2)
Example #16
0
 def test_merge_referenced_dicts(self):
     p1 = Parameters({'one': {'a': 1, 'b': 2}, 'two': {'c': 3, 'd': 4}, 'three': '${one}'})
     p2 = Parameters({'three': '${two}'})
     r = {'one': {'a': 1, 'b': 2}, 'two': {'c': 3, 'd': 4}, 'three': {'a': 1, 'b': 2, 'c': 3, 'd': 4}}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #17
0
 def test_escaped_string_in_ref_dict_1(self):
     # test with escaped string in first dict to be merged
     p1 = Parameters(
         {
             'a': {
                 'one': '${a_ref}'
             },
             'b': {
                 'two': '\${not_a_ref}'
             },
             'c': '${b}',
             'a_ref': 123
         }, SETTINGS, '')
     p2 = Parameters({'c': '${a}'}, SETTINGS, '')
     r = {
         'a': {
             'one': 123
         },
         'b': {
             'two': '${not_a_ref}'
         },
         'c': {
             'one': 123,
             'two': '${not_a_ref}'
         },
         'a_ref': 123
     }
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #18
0
 def test_interpolate_infrecursion(self):
     v = 42
     d = {'foo': 'bar'.join(REFERENCE_SENTINELS),
          'bar': 'foo'.join(REFERENCE_SENTINELS)}
     p = Parameters(d)
     with self.assertRaises(InfiniteRecursionError):
         p.interpolate()
Example #19
0
 def test_overwrite_dict(self):
     p1 = Parameters({'a': {'one': 1, 'two': 2}}, SETTINGS, '')
     p2 = Parameters({'~a': {'three': 3, 'four': 4}}, SETTINGS, '')
     r = {'a': {'three': 3, 'four': 4}}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #20
0
 def test_merge_none_over_dict_allow(self):
     settings = Settings({'allow_none_override': True})
     p1 = Parameters(dict(key=SIMPLE), settings, '')
     p2 = Parameters(dict(key=None), settings, '')
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict()['key'], None)
Example #21
0
 def test_merge_referenced_lists(self):
     p1 = Parameters({'one': [ 1, 2, 3 ], 'two': [ 4, 5, 6 ], 'three': '${one}'})
     p2 = Parameters({'three': '${two}'})
     r = {'one': [ 1, 2, 3 ], 'two': [ 4, 5, 6], 'three': [ 1, 2, 3, 4, 5, 6 ]}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #22
0
 def test_interpolate_multiple(self):
     v = '42'
     d = {'foo': 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS) + 'meep'.join(PARAMETER_INTERPOLATION_SENTINELS),
          'bar': v[0],
          'meep': v[1]}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], v)
Example #23
0
 def test_merge_scalar_over_list_allow(self):
     l = ['foo', 1, 2]
     settings = Settings({'allow_scalar_over_list': True})
     p1 = Parameters(dict(key=l[:2]), settings, '')
     p2 = Parameters(dict(key=l[2]), settings, '')
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict()['key'], l[2])
Example #24
0
 def test_interpolate_multiple(self):
     v = '42'
     d = {'foo': 'bar'.join(REFERENCE_SENTINELS) + 'meep'.join(REFERENCE_SENTINELS),
          'bar': v[0],
          'meep': v[1]}
     p = Parameters(d)
     p.interpolate()
     self.assertEqual(p.as_dict()['foo'], v)
Example #25
0
 def test_merge_list_into_scalar_allow(self):
     settings = Settings({'allow_list_over_scalar': True})
     l = ['foo', 1, 2]
     p1 = Parameters(dict(key=l[0]), settings, '')
     p2 = Parameters(dict(key=l[1:]), settings, '')
     p1.merge(p2)
     p1.interpolate()
     self.assertListEqual(p1.as_dict()['key'], l)
Example #26
0
 def test_merge_scalar_over_dict_allow(self):
     d = {'one': 1, 'two': 2}
     settings = Settings({'allow_scalar_over_dict': True})
     p1 = Parameters({'a': d}, settings, '')
     p2 = Parameters({'a': 1}, settings, '')
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), {'a': 1})
Example #27
0
 def test_merging_inv_queries(self):
     e = {'node1': {'a': 1}, 'node2': {'a': 1}, 'node3': {'a': 2}}
     p1 = Parameters({'exp': '$[ if exports:a == 1 ]'}, SETTINGS, '')
     p2 = Parameters({'exp': '$[ if exports:a == 2 ]'}, SETTINGS, '')
     r = {'exp': ['node1', 'node2', 'node3']}
     p1.merge(p2)
     p1.interpolate(e)
     self.assertEqual(p1.as_dict(), r)
Example #28
0
 def test_nested_reference_with_overwriting(self):
     p1 = Parameters({'one': {'a': 1, 'b': 2, 'z': 'a'},
                      'two': '${one:${one:z}}' })
     p2 = Parameters({'one': {'z': 'b'} })
     r = {'one': {'a': 1, 'b':2, 'z': 'b'}, 'two': 2}
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict(), r)
Example #29
0
 def test_if_expr_exports_with_refs(self):
     e = {'node1': {'a': 1, 'b': 2}, 'node2': {'a': 3, 'b': 4}}
     p = Parameters({
         'exp': '$[ exports:a if exports:b == self:test_value ]',
         'test_value': 2
     })
     r = {'exp': {'node1': 1}, 'test_value': 2}
     p.interpolate(e)
     self.assertEqual(p.as_dict(), r)
Example #30
0
 def test_interpolate_infrecursion(self):
     v = 42
     d = {
         'foo': 'bar'.join(SETTINGS.reference_sentinels),
         'bar': 'foo'.join(SETTINGS.reference_sentinels)
     }
     p = Parameters(d, SETTINGS, '')
     with self.assertRaises(InfiniteRecursionError):
         p.interpolate()
Example #31
0
 def test_merge_none_over_dict(self):
     p1 = Parameters(dict(key=SIMPLE), SETTINGS, '')
     p2 = Parameters(dict(key=None), SETTINGS, '')
     with self.assertRaises(TypeMergeError) as e:
         p1.merge(p2)
         p1.interpolate()
     self.assertEqual(
         e.exception.message,
         "-> \n   Cannot merge scalar over dictionary, at key, in ; ")
Example #32
0
def _merge(a, b):
    '''
    merge the contents of dictionary ``b`` into dictionary ``a``, using reclass'
    sensible form of deep-dictionary merging and interpolation.
    '''
    m = Parameters(a)
    m.merge(b)
    m.interpolate()
    return m.as_dict()
Example #33
0
 def test_stray_occurrence_overwrites_during_interpolation(self):
     p1 = Parameters({'r' : mock.sentinel.ref, 'b': '${r}'})
     p2 = Parameters({'b' : mock.sentinel.goal})
     p1.merge(p2)
     p1.interpolate()
     self.assertEqual(p1.as_dict()['b'], mock.sentinel.goal)