コード例 #1
0
ファイル: invest_mint.py プロジェクト: hraffiest/poptimizer
def _find_table_n(html: str) -> int:
    soup = bs4.BeautifulSoup(html, "lxml")
    tables = soup.find_all("table")
    for num, table in enumerate(tables):
        if "Цена на закрытии" in table.text:
            return num
    raise description.ParserError("Таблица не найдена.")
コード例 #2
0
async def test_loader_get_html_error(mocker):
    """Регрессионный тест при ошибке загрузки данных из интернета."""
    mocker.patch.object(invest_mint.parser, "get_html", side_effect=description.ParserError())

    loader = invest_mint.InvestMintGateway()
    df = await loader("BELU")

    assert df is None
コード例 #3
0
def _get_table_from_html(html: str, table_num: int) -> str:
    """Выбирает таблицу по номеру из html-страницы."""
    soup = bs4.BeautifulSoup(html, "lxml")
    try:
        table = soup.find_all("table")[table_num]
    except IndexError:
        raise description.ParserError(f"На странице нет таблицы {table_num}")
    return f"<html>{table}</html>"
コード例 #4
0
async def test_loader_web_error(mocker):
    """Регрессионный тест при ошибке загрузки данных из интернета."""
    mocker.patch.object(parser, "get_df_from_url", side_effect=description.ParserError())

    loader = close_reestry.CloseGateway()
    df = await loader("TATN")

    assert df is None
コード例 #5
0
async def test_loader_get_df_from_html_error(mocker):
    """Регрессионный тест при парсинге данных."""
    mocker.patch.object(invest_mint.parser, "get_html", return_value="")
    mocker.patch.object(invest_mint.parser, "get_df_from_html", side_effect=description.ParserError())

    loader = invest_mint.InvestMintGateway()
    df = await loader("BELU")

    assert df is None
コード例 #6
0
async def test_loader_web_error(mocker):
    """Регрессионный тест при ошибке загрузки данных из интернета."""
    mocker.patch.object(parser,
                        "get_df_from_url",
                        side_effect=description.ParserError())

    loader = street_insider.StreetInsider()
    df = await loader.__call__("BELU")

    assert df is None
コード例 #7
0
def _validate_header(columns: pd.Index, cols_desc: Descriptions) -> None:
    """Проверяет, что заголовки соответствуют описанию."""
    for desc in cols_desc:
        header = columns[desc.num]
        if not isinstance(header, tuple):
            header = [header]
        raw_name = desc.raw_name
        if all(part in name for part, name in zip(raw_name, header)):
            continue
        raise description.ParserError(
            f"Неверный заголовок: {desc.raw_name} не входит в {header}")
コード例 #8
0
async def get_html(
    url: str,
    session: aiohttp.ClientSession = connections.HTTP_SESSION,
) -> str:
    """Загружает html-код страницы."""
    async with session.get(url) as respond:
        try:
            respond.raise_for_status()
        except aiohttp.ClientResponseError:
            raise description.ParserError(f"Данные {url} не загружены")
        return await respond.text()
コード例 #9
0
async def get_html(
    url: str,
    session: aiohttp.ClientSession = connections.HTTP_SESSION,
) -> str:
    """Загружает html-код страницы."""
    ssl_context = ssl.create_default_context(cafile=certifi.where())

    async with session.get(url, ssl_context=ssl_context) as respond:
        try:
            respond.raise_for_status()
        except aiohttp.ClientResponseError:
            raise description.ParserError(f"Данные {url} не загружены")
        return await respond.text()