Tribian, отступы в Python очень важны. Они не возмутили меня. В мою функцию тут входит повышение вероятности получения адекватного ответа на вопросы. В вашем случае полагаю, что код надо причесать, чтобы те, кто скопипастит себе этот код, могли не заниматься причесыванием отступов, а просто начать осмысливать код. Это должно повысить вероятность получения ответа.
Случай, когда функцию объявляют внутри функции, довольно специфический. Надо хорошо понимать смысл и цель этого действа. Поэтому меня смутила такая конструкция в вашем коде, и я предлагаю уточнить (лучше комментом в коде), для чего сделано именно так.
Не подумайте, что я пытаюсь вас ущемить, напротив - я на вашей стороне! :)
getaxe, вы не понимаете, как тут работают теги. Тут они выполняют не декоративную функцию, а конкретную - на тег python подписано 33 тыс. читателей. И им совсем ни к чему получать в подписку груды вопросов, лишь отдаленно, краешком касающиеся интересной им темы. Это называется тег-спам и явно запрещено правилами, п.3.1
Tribian, во-первых, желательно по всему коду использовать одинаковые отступы. А у вас async with state.proxy() после коммента на 1 пробел сдвинуто и дальше весь код тоже пляшет - где на 3 пробела, где 4, а где и на 6 сразу. Нет порядка.
Что касается второго декоратора, это как раз к вам вопрос. Отступ, как сейчас, помещает второй декоратор внутрь первого. Вне первого декоратора второй не доступен, виден только в области видимости первого.
Если так и было задумано, то - ок, но лучше об этом явно написать в комментариях к коду. Если так не задумывалось, то это ошибка.
Судя по вашему комментарию к вопросу, «так иногда позволяют писать», у вас понимания, что вы делаете, нет.
Александр, язык стоит добавлять только если разместить код на языке. Ни к чему спамить в тег этой картинкой. Прошу давать только обоснованные рекомендации.
Если нет ни кода, ни специфики, относящейся к языку, то написать о том, что используется Python, достаточно в названии или теле вопроса.