From 50bdc01b9d617b4cc531e4c11a78a1bc55864bea Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev Date: Sat, 20 Aug 2022 01:30:55 +0300 Subject: [PATCH] reduce web_parser time to 1 sec --- README.md | 2 +- app/core/bot.py | 3 --- app/core/parse_web.py | 2 +- app/main.py | 13 ++++++++++++- setup.cfg | 7 ++++--- tests/bot/test_bot.py | 13 ++++++++++--- tests/conftest.py | 14 +++++++++++++- 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8b2e88e..64fef7e 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,6 @@ killall python ## TODO - [ ] Добавить очередь сообщений -- [ ] Исправить запуск локально +- [x] Исправить запуск локально - [ ] Добавить тестов - [ ] Close connection diff --git a/app/core/bot.py b/app/core/bot.py index 5771493..0c0c581 100644 --- a/app/core/bot.py +++ b/app/core/bot.py @@ -1,5 +1,4 @@ import asyncio -from concurrent.futures.thread import ThreadPoolExecutor from aiogram import Bot, types from aiogram.contrib.middlewares.logging import LoggingMiddleware @@ -22,8 +21,6 @@ driver = configure_firefox_driver() stations_cb = CallbackData('station', 'direction') -executor = ThreadPoolExecutor(10) - def get_keyboard() -> types.InlineKeyboardMarkup: """ diff --git a/app/core/parse_web.py b/app/core/parse_web.py index 49ff684..6ca8a7a 100644 --- a/app/core/parse_web.py +++ b/app/core/parse_web.py @@ -52,7 +52,7 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str: logger.error('Driver is not configured') return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.' driver.get(url) - time.sleep(4) + time.sleep(1) elements = driver.find_elements( by='class name', value='masstransit-vehicle-snippet-view' ) diff --git a/app/main.py b/app/main.py index 495d7e6..3523f2c 100644 --- a/app/main.py +++ b/app/main.py @@ -1,9 +1,15 @@ +import asyncio +import sys from http import HTTPStatus +from pathlib import Path from aiogram import Bot, Dispatcher from aiogram.types import Update from aiogram.utils.executor import start_polling from aiohttp import web + +sys.path.append(str(Path(__file__).parent.parent)) + from app.core.bot import bot, dispatcher from app.core.logger import logger from app.core.scheduler import asyncio_schedule @@ -19,7 +25,7 @@ from app.settings import ( async def bot_startup() -> None: await bot.set_webhook(WEBHOOK_URL) - logger.info(f'Webhook set to {WEBHOOK_URL}') + logger.info(f'Webhook set to {WEBHOOK_URL}'.replace(API_TOKEN, '{BOT_API_TOKEN}')) asyncio_schedule() @@ -33,6 +39,11 @@ async def bot_shutdown() -> None: await dispatcher.storage.close() await dispatcher.storage.wait_closed() + session = await bot.get_session() + if session and not session.closed: + await session.close() + await asyncio.sleep(0.2) + logger.warning('Bye!') diff --git a/setup.cfg b/setup.cfg index 051975e..519e09b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -22,9 +22,10 @@ ignore = B008, per-file-ignores = ; too complex queries - */repositories.py: ECE001 - ./app/tests/*: TAE001, S101, S311 - tests/*/factories/*: S5720 + ./app/tests/*: TAE001, S101, S311 + tests/*/factories/*: S5720 + app/main.py: E402 + [mypy] # Mypy configuration: diff --git a/tests/bot/test_bot.py b/tests/bot/test_bot.py index 099e438..8ea64f2 100644 --- a/tests/bot/test_bot.py +++ b/tests/bot/test_bot.py @@ -1,8 +1,9 @@ import time import pytest -from aiogram import Bot, types +from aiogram import Bot, Dispatcher, types from aiogram.dispatcher.filters.builtin import Command +from aiogram.types import Update from app.core.bot import dispatcher from tests.conftest import FakeTelegram from tests.data.factories import UserFactory @@ -35,7 +36,8 @@ async def test_command1(bot: Bot) -> None: assert command -async def test_update() -> None: +async def test_update(dispatcher_fixture: Dispatcher, bot: Bot) -> None: + data = { "update_id": 957250703, "message": { @@ -60,4 +62,9 @@ async def test_update() -> None: "entities": [{"type": "bot_command", "offset": 0, "length": 7}], }, } - assert data + async with FakeTelegram(message_data=data): + update = Update(**data) + dispatcher_fixture.message_handler() + await dispatcher_fixture.process_update(update) + + assert True diff --git a/tests/conftest.py b/tests/conftest.py index 1f80bf9..8a1ae83 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ from typing import Any import aresponses import pytest -from aiogram import Bot +from aiogram import Bot, Dispatcher BOT_ID = 123456789 TOKEN = f'{BOT_ID}:AABBCCDDEEFFaabbccddeeff-1234567890' @@ -61,3 +61,15 @@ async def bot_fixture() -> Bot: if session and not session.closed: await session.close() await asyncio.sleep(0.2) + + +@pytest.fixture() +async def dispatcher_fixture(bot: Bot) -> Dispatcher: + """Dispatcher fixture.""" + + dp = Dispatcher(bot) + yield dp + session = await bot.get_session() + if session and not session.closed: + await session.close() + await asyncio.sleep(0.2)