Композиция и организация результата - 52AnTIMateria812/Plyer GitHub Wiki
Пиком реализации инфраструктуры проекта является композиция декораторов. Нам было необходимо не только перехватывать ошибки, но и профилировать время работы системных вызовов ОС.
Pipeline через композицию
В файле logic.py мы последовательно "навешиваем" несколько декораторов:
@timer
@safe_execute
def demo_notification():
# отправка уведомления
Порядок (снизу вверх) имеет значение:
- Сначала [[safe_execute] пытается вызвать уведомление. Если функция платформы кидает ошибку, она ловится здесь.
- Затем
@timerзамеряет время выполнения всей цепочки от перехватчика до самого низкого уровня ОС и выводит в консоль (например,⏱️ Время: 0.045123 секунд).
Важность @wraps
Чтобы при обилии декораторов функция [[demo_notification] не превратилась в безликое имя [[wrapper] (одна из частых ловушек Python), мы использовали functools.wraps. Этот микромеханизм сохраняет метаданные __name__ и __doc__, позволяя логгеру [[safe_execute] выводить в консоль правильное имя функции, а не строку "Ошибка в wrapper".
Это и есть настоящая организация результата на профессиональном уровне.