mirror of
https://github.com/Balshgit/mosgortrans.git
synced 2025-12-16 21:50:39 +03:00
run in executor
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import asyncio
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
|
||||
from aiogram import Bot, types
|
||||
from aiogram.contrib.middlewares.logging import LoggingMiddleware
|
||||
from aiogram.dispatcher import Dispatcher
|
||||
from aiogram.dispatcher.webhook import SendMessage
|
||||
from aiogram.utils.callback_data import CallbackData
|
||||
|
||||
from core.parse_web import configure_firefox_driver, download_gecko_driver, parse_site
|
||||
from settings import API_TOKEN
|
||||
|
||||
@@ -15,6 +17,8 @@ dispatcher.middleware.setup(LoggingMiddleware())
|
||||
download_gecko_driver()
|
||||
driver = configure_firefox_driver()
|
||||
|
||||
executor = ThreadPoolExecutor(5)
|
||||
|
||||
stations_cb = CallbackData('station', 'direction')
|
||||
|
||||
|
||||
@@ -40,12 +44,20 @@ async def home_office(
|
||||
query: types.CallbackQuery, callback_data: dict[str, str]
|
||||
) -> SendMessage:
|
||||
|
||||
text = parse_site(
|
||||
driver=driver,
|
||||
url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
|
||||
'?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21',
|
||||
message='Остановка Б. Академическая ул, д. 15',
|
||||
)
|
||||
url = ('https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
|
||||
'?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21'
|
||||
)
|
||||
message = 'Остановка Б. Академическая ул, д. 15'
|
||||
|
||||
loop = asyncio.get_running_loop()
|
||||
text = await loop.run_in_executor(executor, parse_site, driver, url, message)
|
||||
|
||||
# text = parse_site(
|
||||
# driver=driver,
|
||||
# url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
|
||||
# '?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21',
|
||||
# message='Остановка Б. Академическая ул, д. 15',
|
||||
# )
|
||||
|
||||
return SendMessage(query.message.chat.id, text, reply_markup=get_keyboard())
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ def configure_firefox_driver(private_window: bool = False) -> WebDriver:
|
||||
return firefox_driver
|
||||
|
||||
|
||||
async def parse_site(driver: WebDriver, url: str, message: str) -> str:
|
||||
def parse_site(driver: WebDriver, url: str, message: str) -> str:
|
||||
driver.get(url)
|
||||
time.sleep(4)
|
||||
elements = driver.find_elements(
|
||||
|
||||
18
app/tests/factories.py
Normal file
18
app/tests/factories.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import factory
|
||||
from faker import Faker
|
||||
|
||||
from tests.models import User
|
||||
|
||||
faker = Faker('ru_RU')
|
||||
|
||||
|
||||
class UserFactory(factory.Factory):
|
||||
id = factory.Sequence(lambda n: 1000 + n)
|
||||
is_bot = False
|
||||
first_name = factory.Faker('first_name')
|
||||
last_name = factory.Faker('last_name')
|
||||
username = faker.profile(fields=['username'])['username']
|
||||
language_code = 'ru'
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
@@ -1,6 +1,20 @@
|
||||
""""
|
||||
Dict data set for Telegram message types
|
||||
"""
|
||||
from typing import NamedTuple, Any
|
||||
|
||||
|
||||
class User(NamedTuple):
|
||||
id: int
|
||||
is_bot: bool
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str | None
|
||||
language_code: str
|
||||
|
||||
def as_dict(self) -> dict[str, Any]:
|
||||
return self._asdict()
|
||||
|
||||
|
||||
USER = {
|
||||
"id": 12345678,
|
||||
@@ -1,7 +1,7 @@
|
||||
import pytest
|
||||
from aiogram import Bot, types
|
||||
from app.tests.conftest import FakeTelegram
|
||||
from app.tests.dataset import USER
|
||||
from tests.factories import UserFactory
|
||||
|
||||
pytestmark = [
|
||||
pytest.mark.asyncio,
|
||||
@@ -9,9 +9,10 @@ pytestmark = [
|
||||
|
||||
|
||||
async def test_parse_site(bot: Bot) -> None:
|
||||
user = types.User(**USER)
|
||||
tg_user = UserFactory().as_dict()
|
||||
user = types.User(**tg_user)
|
||||
|
||||
async with FakeTelegram(message_data=USER):
|
||||
async with FakeTelegram(message_data=tg_user):
|
||||
result = await bot.me
|
||||
|
||||
assert result == user
|
||||
|
||||
Reference in New Issue
Block a user