169 похожих чатов

А как в 3.0 постпроцесс миддлварь сделать?)

18 ответов

24 просмотра

finally будет постпроцесс, до трая - препроцесс https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/manager/manager_middleware.py#L39

var c chan-warski Автор вопроса

спасибо!

Можно ещё: result = await handler(event, data) do_postrpocess_things() return result Но тут уже если хендлер упадёт то постпроцесс понятно не исполнится.

По логике ведь finally блок исполнится перед тем, как выполнится return хендлера, а это значит, что оно выполнится перед хендлером, или я туплю сейчас на ночь?

с файнали вообще весело https://stackoverflow.com/questions/19805654/python-try-finally-block-returns

Finally всегда выполняется последним

То есть вернётся хендлер, и при этом в конце выполнится finally?

А вот это я ща проверю

Ну так именно поэтому у меня возник вопрос

def func(): try: return 1 finally: print("aaa") result = func() print(result) Вывод: aaa 1 т.е. возвращается 1, но aaa принтуется ПОСЛЕ ретурна

var c chan-warski Автор вопроса

как я понимаю теперь для каждого типа апдейта нужно свой класс/декоратор миддлваря делать?

Нет, это просто аннотация типа там

А как ты проверил, что из этого быстрее выполнилось? Ведь принт резулта у тебя уже после выполнения функции

не обязательно. Можно регистрировать на update, можно на сами типы апдейтов. Вот например прямо перенесённая с двойки мидлварь https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/context/intent_filter.py#L54 Вот здесь например если для всех типов ивентов апдейта одинаковая логика нужна https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/manager/manager_middleware.py#L29 П.С detect_content_type в таких случаях будет ненужен после https://github.com/aiogram/aiogram/pull/669/files

Вот две миддлвари, всё ОК: Manager Before Manager Try Intent Before Intent Try INFO:aiogram.dispatcher:Update id=876018697 is handled. Duration 233 ms by bot id=1748149860 Intent Finally Manager Finally

Да мы уже разобрали всё

var c chan-warski Автор вопроса

последний глупый вопрос, если я хочу два ивента обработать в функциональном миддлваре, то мне инстансы чекать?

@dp.message.outer_middleware(MessageCallbackMiddleware()) @dp.callback_query.outer_middleware(MessageCallbackMiddleware()) Может где ошибся так как по памяти писал

Похожие вопросы

Обсуждают сегодня

Кстати, а я вот тут подумал. Допустим, у нас имеется цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Я...
The Bird of Hermes
23
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
анрей С какой целью зашёл?
КТ315
42
я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
17
Кто нибудь из участников чата пишет на ассемблере под GNU/Linux?
Spiker01
24
Всем привет ребят! Мб кто-то сталкивался? adminСomponents .get("searchСomponents", use: searchComponents) .openAPI( summary: ...
Admin Adminov
2
Насколько моя реализация Exercise 1 плохая? data MessageType = Info | Warning | Error Int deriving (Show, Eq) type TimeStamp = Int data LogMessage = LogMessage ...
= ?
10
Кстати вопрос. Проанализировав свои проекты я понял, что в наиболее ценных из них Асм использовался для организации real-time процессов (внутри DOS). А какие есть способы сего...
Alexander Morozov
18
Я не очень много работал с потоками, тут возник вопрос - если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?
The Bird of Hermes
25
Карта сайта