Size: a a a

2020 April 19

G

Gabben in aiogram [ru]
Tishka17
Так, я снова туплю.
TypeError: on_post_process_update() takes 3 positional arguments but 4 were given


Какие параметры он должен ловить?
ты сказал post
источник

T

Tishka17 in aiogram [ru]
.а слепой сам
источник

T

Tishka17 in aiogram [ru]
сорри
источник

T

Tishka17 in aiogram [ru]
Vlad🍁
Как раз из data и формируется список параметров
чет не выходит
future: <Task finished coro=<Dispatcher._process_polling_updates() done, defined at .../venv/lib/python3.7/site-packages/aiogram/dispatcher/dispatcher.py:324> exception=TypeError("welcome() missing 1 required positional argument: 'repo'")>

в мидлваре сделал data["repo"] = Repo()
источник

G

Gabben in aiogram [ru]
Tishka17
чет не выходит
future: <Task finished coro=<Dispatcher._process_polling_updates() done, defined at .../venv/lib/python3.7/site-packages/aiogram/dispatcher/dispatcher.py:324> exception=TypeError("welcome() missing 1 required positional argument: 'repo'")>

в мидлваре сделал data["repo"] = Repo()
а ты в какой мидлваре кладешь?
источник

T

Tishka17 in aiogram [ru]
эм
источник

T

Tishka17 in aiogram [ru]
on_pre_process_update
источник

T

Tishka17 in aiogram [ru]
или в чем вопрос?
источник

G

Gabben in aiogram [ru]
да, это я и хотел узнать
источник

T

Tishka17 in aiogram [ru]
class DbMiddleware(BaseMiddleware):
   def __init__(self, engine):
       super().__init__()
       self.engine = engine

   async def on_pre_process_update(self, update: types.Update, data: dict):
       data["db"] = await self.engine.acquire()
       data["repo"] = Repo(data["db"])

   async def on_post_process_update(self, update: types.Update, result, data: dict):
       del data["repo"]
       db = data.get("db")
       if db:
           await db.close()
источник

T

Tishka17 in aiogram [ru]
async def welcome(msg: Message, repo: Repo):


вот такой хэндлер
источник

G

Gabben in aiogram [ru]
хм, ну это вопрос уровня @JRootJunior
источник

T

Tishka17 in aiogram [ru]
class DbMiddleware(BaseMiddleware):
   def __init__(self, engine):
       super().__init__()
       self.engine = engine

   async def on_pre_process_update(self, update: types.Update, data: dict):
       db = await self.engine.acquire()
       data["repo"] = Repo(db)

   async def on_post_process_update(self, update: types.Update, result, data: dict):
       repo = data["repo"]
       await  repo.conn.close()

поменял так, ничего не изменилось
источник

V

Vlad🍁 in aiogram [ru]
мидлвари работают со всеми типами событий из телеграма

есть несколько точек, куда мидлварью можно вклиниваться:
- pre_process: выполняется каждый раз перед началом фильтрации
- process: выполняется каждый раз после прохождения фильтра перед запуском хендлера
- post_process: выполняется каждый раз после обработки всего

итого, например, каждое сообщение проходит цепочку:
- pre_process update
- process update
- pre_process message
- filters
- process message
- handler
- post_process message
- post_process update


если ни один хендлер для сообщения не был запущен, выполняется следующая цепочка:
- pre_process update
- process update
- pre_process message
- filters
- post_process message
- post_process update



Мидлварь обязательно должна быть унаследована от BaseMiddleware

все методы для точек взаимодействия должны иметь названия:
on_<point>_<event_type>, то есть on_pre_process_message, on_post_process_update
более низкоуровневый вариант метод - trigger, он является главной точкой вызова мидлвари, по умолчанию он как раз и разруливает все события на методы класса мидлвари

полный список методов мидлвари можно посмотреть у LoggingMiddleware
источник

V

Vlad🍁 in aiogram [ru]
Мб в process_message надо?
источник

G

Gabben in aiogram [ru]
мб и надо, только это странное поведение
источник

T

Tishka17 in aiogram [ru]
Vlad🍁
Мб в process_message надо?
мне не мессадж надо, а любо тип
источник

V

Vlad🍁 in aiogram [ru]
Тогда тут только вызов Алекса
источник

T

Tishka17 in aiogram [ru]
Я все ещё не нашел код, который формирует аргументы для хэндлера
источник

G

Gabben in aiogram [ru]
Tishka17
Я все ещё не нашел код, который формирует аргументы для хэндлера
источник