示例#1
0
def split_to_segments(csv_text: str, yaml_doc):
    csv_rows = read_csv(csv_text)
    segment_definitions = InstructionSet(yaml_doc).by_segment
    for pdef in segment_definitions:
        start, end = pdef.select_applicable_boundaries(csv_rows)
        csv_segment = pop_rows(csv_rows, start, end)
        yield csv_segment, pdef
    yield csv_rows, InstructionSet(yaml_doc).default
def test_parsers():
    doc2 = """Объем ВВП, млрд.рублей / Gross domestic product, bln rubles
    1999	4823	901	1102	1373	1447
    2000	7306	1527	1697	2038	2044"""
    csv_rows = read_csv(doc2)
    tables = list(split_to_tables(csv_rows))
    t1 = u(r1(tables[0]))
    datapoints = [x for x in t1.yield_values()]

    assert datapoints[0] == {
        'freq': 'a',
        'label': ('GDP', 'bln_rub'),
        'time_index': pd.Timestamp('1999-12-31'),
        'value': 4823
    }
    assert datapoints[1] == {
        'freq': 'q',
        'label': ('GDP', 'bln_rub'),
        'time_index': pd.Timestamp('1999-03-31'),
        'value': 901
    }
    assert datapoints[2] == {
        'freq': 'q',
        'label': ('GDP', 'bln_rub'),
        'time_index': pd.Timestamp('1999-06-30'),
        'value': 1102
    }
    assert datapoints[3] == {
        'freq': 'q',
        'label': ('GDP', 'bln_rub'),
        'time_index': pd.Timestamp('1999-09-30'),
        'value': 1373
    }
    assert datapoints[4] == {
        'freq': 'q',
        'label': ('GDP', 'bln_rub'),
        'time_index': pd.Timestamp('1999-12-31'),
        'value': 1447
    }
示例#3
0
 def make(csv_text: str):
     rows = read_csv(csv_text)
     return list(split_to_tables(rows))
示例#4
0
        'млн.кв.м общей площади': 'mln_m2',
        '% к соответствующему периоду предыдущего года': 'yoy'
    })

    tables = make(doc)
    for x in [u, r1, r2]:
        tables = map(x, tables)
    tables = list(tables)
    assign_trailing_units(tables, required1)
    assert includes_required(tables, required1)
    for t in tables:
        t.set_reader()
    values = list(yield_values(tables))

    #test 2
    csv_rows = read_csv(doc)
    tables2 = render(csv_rows,
                     unit_dict={
                         'млрд.рублей': 'bln_rub',
                         'млн.кв.м общей площади': 'mln_m2',
                         '% к соответствующему периоду предыдущего года': 'yoy'
                     },
                     headers_dict={
                         'GDP': ['Валовый внутренний продукт', 'Объем ВВП'],
                         'DWELL':
                         ['Ввод в действие жилых домов организациями']
                     },
                     required={
                         'GDP': ['bln_rub', 'yoy'],
                         'DWELL': ['mln_m2']
                     },
示例#5
0
pdef = Instruction(
    boundaries=[
        dict(start='1.6. Инвестиции в основной капитал',
             end='1.6.1. Инвестиции в основной капитал организаций'),
        dict(start='1.7. Инвестиции в основной капитал',
             end='1.7.1. Инвестиции в основной капитал организаций')
    ],
    commands=[
        dict(var='INVESTMENT',
             header=['Инвестиции в основной капитал'],
             unit=['bln_rub', 'yoy', 'rog'])
    ],
)

# actions
tables = render(read_csv(csv_text), units, pdef.headers_dict, pdef.required,
                pdef.reader)

# checks


def test_check_parsing_result():
    assert len(tables) == 3
    assert [t.unit for t in tables] == ['bln_rub', 'yoy', 'rog']
    assert [t.name for t in tables] == ['INVESTMENT'] * 3


if __name__ == "__main__":
    import pytest
    pytest.main([__file__])
в % к соответствующему периоду предыдущего года / percent of corresponding period of previous year
1999	105,3	93,8	99,2	105,0	117,4	92,2	93,8	95,1	94,7	99,2	102,9	102,1	101,9	111,1	114,8	112,1	122,6
"""

required1 = {'GDP': ['bln_rub', 'yoy'], 'DWELL': ['mln_m2']}
r1 = var_parser(name='GDP',
                headers=['Валовый внутренний продукт', 'Объем ВВП'])
r2 = var_parser(name='DWELL',
                headers=['Ввод в действие жилых домов организациями'])
u = unit_parser({
    'млрд.рублей': 'bln_rub',
    'млн.кв.м общей площади': 'mln_m2',
    '% к соответствующему периоду предыдущего года': 'yoy'
})

csv_rows = read_csv(doc)
tables = list(split_to_tables(csv_rows))
for x in [u, r1, r2]:
    tables = map(x, tables)
tables = list(tables)
assign_trailing_units(tables, required1)
for t in tables:
    t.set_reader()
values = [x for t in tables for x in t.yield_values()]

tables2 = render(csv_rows,
                 unit_dict={
                     'млрд.рублей': 'bln_rub',
                     'млн.кв.м общей площади': 'mln_m2',
                     '% к соответствующему периоду предыдущего года': 'yoy'
                 },