def dividends_conomy(ticker: str):
    """Возвращает Series с дивидендами упорядоченными по возрастанию даты закрытия реестра

    Parameters
    ----------
    ticker
        Тикер

    Returns
    -------
    pandas.Series
        Строки - даты закрытия реестра упорядоченные по возрастанию
        Значения - дивиденды
    """
    table = parser.HTMLTableParser(get_html(ticker), TABLE_INDEX)
    columns = [DATE_COLUMN]
    if is_common(ticker):
        columns.append(COMMON_COLUMN)
    else:
        columns.append(PREFERRED_COLUMN)
    df = table.make_df(columns, HEADER_SIZE)
    df.dropna(inplace=True)
    df.columns = [DATE, ticker]
    df.set_index(DATE, inplace=True)
    df.sort_index(inplace=True)
    return df[ticker]
def test_make_df_validate():
    table = parser.HTMLTableParser(HTML, 1)
    columns = [
        parser.DataColumn(i, {0: RESULT1[0][i]}, parser.div_parser)
        for i in range(5)
    ]
    df = pd.DataFrame(DF_DATA[1:])
    assert df.equals(table.make_df(columns, 1))
def dividends_smart_lab():
    """
    Возвращает ожидаемые дивиденды с сайта https://smart-lab.ru/

    Returns
    -------
    pandas.DataFrame
        Строки - тикеры
        столбцы - даты закрытия и дивиденды
    """
    html = dohod_ru.get_html(URL)
    table = parser.HTMLTableParser(html, TABLE_INDEX)
    columns = [TICKER_COLUMN, DATE_COLUMN, DIVIDENDS_COLUMN]
    df = table.make_df(columns, HEADER_SIZE, FOOTER_SIZE)
    df.columns = [TICKER, DATE, DIVIDENDS]
    return df.set_index(DATE)
Beispiel #4
0
def dividends_dohod(ticker: str) -> pd.Series:
    """Возвращает Series с дивидендами упорядоченными по возрастанию даты закрытия реестра

    Parameters
    ----------
    ticker
        Тикер

    Returns
    -------
    pandas.Series
        Строки - даты закрытия реестра упорядоченные по возрастанию
        Значения - дивиденды
    """
    url = make_url(ticker)
    html = get_html(url)
    table = parser.HTMLTableParser(html, TABLE_INDEX)
    columns = [DATE_COLUMN, DIVIDENDS_COLUMN]
    df = table.make_df(columns, HEADER_SIZE)
    df.columns = [DATE, ticker]
    df.set_index(DATE, inplace=True)
    df.sort_index(inplace=True)
    return df[ticker]
def test_make_df_with_parsed_data():
    table = parser.HTMLTableParser(HTML, 1)
    columns = [parser.DataColumn(i, {}, parser.div_parser) for i in range(5)]
    df = pd.DataFrame(DF_DATA)
    assert df.equals(table.make_df(columns))
def test_make_df():
    table = parser.HTMLTableParser(HTML, 1)
    columns = [parser.DataColumn(i, {}, lambda x: x) for i in range(5)]
    df = pd.DataFrame(RESULT1)
    assert df.equals(table.make_df(columns))
def test_fast_second_parse():
    table = parser.HTMLTableParser(HTML, 1)
    assert table.parsed_table == RESULT1
    assert table.parsed_table == RESULT1
def test_no_table():
    with pytest.raises(IndexError) as error:
        parser.HTMLTableParser(HTML, 2)
        assert error.value == 'На странице нет таблицы 2'
def test_parse_no_tbody():
    table = parser.HTMLTableParser(HTML, 1)
    assert table.parsed_table == RESULT1
def test_make_df_fail_validate():
    table = parser.HTMLTableParser(HTML, 1)
    columns = [parser.DataColumn(1, {0: '2.2', 1: 'test'}, lambda x: x)]
    with pytest.raises(ValueError) as error:
        table.make_df(columns)
        assert error.value == 'Значение в таблице "5.55 (сов)" - должно быть "test"'
def test_make_df_drop():
    table = parser.HTMLTableParser(HTML, 1)
    columns = [parser.DataColumn(i, {}, parser.div_parser) for i in range(5)]
    df = pd.DataFrame(DF_DATA[1:2])
    assert df.equals(table.make_df(columns, 1, 1))