예제 #1
0
def test_array():
    inp = '<baz><foo>bar</foo><foo>bar2</foo></baz>'
    mp = [{'column': 'foo', 'path': 'foo', 'array': True}]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'foo': ['bar', 'bar2']}

    with pytest.raises(ValueError):
        del mp[0]['array']
        extract(et, mp)
예제 #2
0
def test_atts():
    inp = '<baz><foo a="b" c="d">abc</foo></baz>'
    mp = [{'column': 'foo', 'path': 'foo', 'attrs': {'a': 'b', 'c': 'd'}}]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'foo': 'abc'}

    with pytest.raises(KeyError):
        mp[0]['attrs'] = {'b': 'c'}
        et = lxml.etree.fromstring(inp)
        extract(et, mp)
예제 #3
0
def test_nested_and_array():
    inp = '<baz><foo><bak>a1</bak><bak>a2</bak></foo></baz>'
    mp = [{
        'column': 'foo',
        'path': 'foo',
        'mapping': [
            {
                'column': 'bak',
                'path': 'bak',
                'array': True
            },
        ]
    }]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'foo': {'bak': ['a1', 'a2']}}
예제 #4
0
def test_attr_and_nested():
    inp = '<baz><foo prop="abc">bar</foo></baz>'
    mp = [{
        'column':
        'bak',
        'path':
        'foo',
        'mapping': [
            {
                'column': 'nested',
                'path': None
            },
            {
                'column': 'nested2',
                'path': '#prop'
            },
        ]
    }]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'bak': {'nested': 'bar', 'nested2': 'abc'}}
예제 #5
0
def test_basic():
    inp = '<baz><foo>bar</foo></baz>'
    mp = [{'column': 'foo', 'path': 'foo'}]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'foo': 'bar'}
예제 #6
0
def test_empty():
    inp = '<baz><foo>bar</foo></baz>'
    mp = [{'column': 'bak', 'path': 'bak'}]
    et = lxml.etree.fromstring(inp)
    assert extract(et, mp) == {'bak': None}