Пример #1
0
def test_nested():
    data = {'a': {'d': 'e'}, 'b': {'f': 'g', 'h': 'i'}}
    result = {'a.d': 'e', 'b.f': 'g', 'b.h': 'i'}

    d = Dotli()
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #2
0
def test_flatten_exception_key_not_str():
    with pytest.raises(dotli.errors.KeyNotAStringError) as e:
        Dotli().flatten({'a': {1: 1}})
    assert str(
        e.value) == 'Key "1" (<class \'int\'>) is not a string! @ root.a'

    # this check can be disabled with the safe flag
    assert Dotli(safe=False).flatten({'a': {1: 1}}) == {'a.1': 1}
Пример #3
0
def test_short():
    data = {'a': 1, 'b': 2}
    result = {
        'a': 1,
        'b': 2,
    }

    d = Dotli()
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #4
0
def test_int_keys_dict():
    data = {
        'a': {
            '1': [1],
            '2': ['e1'],
        }
    }
    result = {'a.1.[0]': 1, 'a.2.[0]': 'e1'}

    d = Dotli(list_brackets=True)
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #5
0
def test_digit_in_dict():
    data = {
        'a': {
            '0': {
                'c': 2
            },
            'a': {
                'c': 4
            }
        },
    }
    result = {'a.0.c': 2, 'a.a.c': 4}

    d = Dotli(list_brackets=False)
    assert d.flatten(data) == result
    assert data == d.unflatten(result)

    data = {
        'a': {
            '0': 0,
            'a': 1
        },
    }
    result = {'a.0': 0, 'a.a': 1}

    d = Dotli(list_brackets=False)
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #6
0
def test_flatten_exception_sep_in_key():
    # list keys
    with pytest.raises(dotli.errors.SeparatorInKeyError) as e:
        Dotli(separator='1').flatten({'a': [0, 1]})
    assert str(e.value) == 'Separator "1" is in key "1"! @ root.a'

    with pytest.raises(dotli.errors.SeparatorInKeyError) as e:
        Dotli(separator='1').flatten([[[0, 1]]])
    assert str(e.value) == 'Separator "1" is in key "1"! @ root.[0].[0]'

    # dict keys
    with pytest.raises(dotli.errors.SeparatorInKeyError) as e:
        Dotli(separator='.').flatten({'a.a': {'a': 'b'}})
    assert str(e.value) == 'Separator "." is in key "a.a"! @ root'

    with pytest.raises(dotli.errors.SeparatorInKeyError) as e:
        Dotli(separator='.').flatten({'a': {'b': {'c.c': 'd'}}})
    assert str(e.value) == 'Separator "." is in key "c.c"! @ root.a.b'
Пример #7
0
def test_short():
    data = ['1', '2', '3']
    result = {'0': '1', '1': '2', '2': '3', }

    d = Dotli()
    assert d.flatten(data) == result
    assert data == d.unflatten(result)

    d = Dotli(list_brackets=True)
    result = {'[0]': '1', '[1]': '2', '[2]': '3', }
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #8
0
def test_deep_nested():
    data = {'a': {'b': {'0': 1, 'c': 2}, 'd': 'e'}}
    result = {'a.b.0': 1, 'a.b.c': 2, 'a.d': 'e'}

    d = Dotli()
    assert d.flatten(data) == result
    assert data == d.unflatten(result)

    d = Dotli(separator='-')
    result = {'a-b-0': 1, 'a-b-c': 2, 'a-d': 'e'}
    assert d.flatten(data) == result
    assert data == d.unflatten(result)
Пример #9
0
def test_incomplete_list():
    with pytest.raises(dotli.errors.IncompleteListError) as e:
        Dotli().unflatten({'a.0': 1, 'a.2': 2})

    assert str(e.value) == 'No entry for index "1" in list! @ a'
Пример #10
0
def test_fill_value():
    d = Dotli(fill_value_list=None)
    assert d.unflatten({'0': 0, '2': 0}) == [0, None, 0]
Пример #11
0
def test_nested():
    data = [['a', 'b', 'c'], ['d', 'e', 'f']]
    result = {'0.0': 'a', '0.1': 'b', '0.2': 'c', '1.0': 'd', '1.1': 'e', '1.2': 'f'}

    d = Dotli()
    assert d.flatten(data) == result
    assert data == d.unflatten(result)

    d = Dotli(list_brackets=True)
    result = {'[0].[0]': 'a', '[0].[1]': 'b', '[0].[2]': 'c', '[1].[0]': 'd', '[1].[1]': 'e', '[1].[2]': 'f'}
    assert d.flatten(data) == result
    assert data == d.unflatten(result)

    d = Dotli(list_brackets=True, separator='-')
    result = {'[0]-[0]': 'a', '[0]-[1]': 'b', '[0]-[2]': 'c', '[1]-[0]': 'd', '[1]-[1]': 'e', '[1]-[2]': 'f'}
    assert d.flatten(data) == result
    assert data == d.unflatten(result)