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

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

18 ответов

41 просмотр

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()) Может где ошибся так как по памяти писал

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта