/
Pac_Lord
/
homework_decorators
Обзор
Документация
Войти
/
Pac_Lord
/
homework_decorators
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
task_2.py
74 строки
2 KB
Pac_Lord
initial commit
16 май 2026, 09:10
16 май 2026, 09:10
0a5a99e
Код
Авторство
О чём код?
import os from datetime import datetime def logger_path(path): """Параметризованный декоратор — путь к файлу передаётся в аргументе""" def __logger(old_function): def new_function(*args, **kwargs): start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') function_name = old_function.__name__ result = old_function(*args, **kwargs) args_str = ', '.join([repr(arg) for arg in args]) kwargs_str = ', '.join([f"{k}={repr(v)}" for k, v in kwargs.items()]) all_args = ', '.join(filter(None, [args_str, kwargs_str])) log_message = ( f"{start_time} - {function_name}({all_args}) -> {repr(result)}\n" ) with open(path, 'a', encoding='utf-8') as f: f.write(log_message) return result return new_function return __logger def test_2(): paths = ('log_1.log', 'log_2.log', 'log_3.log') for path in paths: if os.path.exists(path): os.remove(path) @logger_path(path) def hello_world(): return 'Hello World' @logger_path(path) def summator(a, b=0): return a + b @logger_path(path) def div(a, b): return a / b assert 'Hello World' == hello_world(), "Функция возвращает 'Hello World'" result = summator(2, 2) assert isinstance(result, int), 'Должно вернуться целое число' assert result == 4, '2 + 2 = 4' result = div(6, 2) assert result == 3, '6 / 2 = 3' summator(4.3, b=2.2) for path in paths: assert os.path.exists(path), f'файл {path} должен существовать' with open(path) as log_file: log_file_content = log_file.read() assert 'summator' in log_file_content, 'должно записаться имя функции' for item in (4.3, 2.2, 6.5): assert str(item) in log_file_content, f'{item} должен быть записан в файл' if __name__ == '__main__': test_2()