JustCaptain kod-buduschego
278f89b670625c4e4b01e3ae728782f1780fa610
Перейти к файлу
Код
kod-buduschego Python 2025-20264.4. Декораторpracticesskilloktask_1.py
anc update c70a58f 8 октября 2026 г.
task_1.py
"""
TASK-J1 — Логирование обращений к сервису заказов
Контекст
В компании появилась проблема: менеджеры часто жалуются, что сервис заказов работает медленно,
но команда не понимает сколько раз реально вызывается каждый метод.
Требуется добавить логирование через декоратор.
Данные
Функция:

def get_order(order_id):
return orders.get(order_id)

⸻
"""

from time import time


def log_action(path: str | None):

    def solution(func):
        count: int = 0

        def save(info: str) -> None:
            if isinstance(path, str):
                with open(file=path, mode="a+", encoding="utf-8") as file:
                    file.write(info)

        def wrapper(*args, **kwargs):
            nonlocal count
            count += 1
            start = time()
            result = func(*args, **kwargs)
            info: str = "Функция: {} | Номер вызова: {} | Время работы: {}\n".format(
                func.__name__, count, time() - start
            )
            if path:
                save(info=info)
            else:
                print(info)
            return result

        return wrapper

    return solution


orders = {
    1001: {"amount": 1200},
    1002: {"amount": 500},
    1003: {"amount": 3200},
}


@log_action(path="log_1.log")
def get_order(order_id: int) -> dict[str, int] | None:
    return orders.get(order_id)


get_order(1003)
get_order(1003)
get_order(1003)
get_order(1003)
get_order(1003)