К
Коробка с питоном
@boxwithpython541 подп.
1.2Kпросмотров
1 сентября 2024 г.
Score: 1.3K
Сегодня расскажу про модуль, который поможет остановить время в ваших тестах и не только - FreezeGun Сначала история из жизни. Недавно мне принесли скрипт, который скрапил некоторую информацию с онлаин-каталога на текущий момент. Задачей было заставить его скрапить данные до определенного момента. В нём было очень много вызовов datetime.now() (пагинация по датам, ага), перепиливать все это мне не очень хотелось, а результат хотели вчера. Поэтому я такой хоп: from freezegun import freeze_time with freeze_time("01-08-24"): result = call_api() И всё работает! Но вы так не делайте, конечно, это самый настоящий подпор костылём, мне вообще повезло, что оно заработало. Или делайте если надо, разрешаю. В основном этот пакет используют для тестов и как было понятно с примера выше - он позволяет "заморозить" время на определенном моменте. Проверить истечение подписки, корректность фильтров, расчёт на определенное время - этот пакет позволит сделать всё это всего в пару строк кода! Есть возможность использовать декоратор вместо контекстного менеджера: @freeze_time("2012-01-14") def test(): assert datetime.datetime.now() == datetime.datetime(2012, 1, 14) А если оба варианта вам не нравятся, и хочется более гибкого управления - можно руками задавать когда время остановится и возобновится: freezer = freeze_time("2012-01-14 12:00:01") freezer.start() assert datetime.datetime.now() == datetime.datetime(2012, 1, 14, 12, 0, 1) freezer.stop() С асинком, кстати, тоже работает. Библиотека довольно фичастая, так что за примерами использования можно проследовать в тесты. #библиотека
1.2K
просмотров
1608
символов
Нет
эмодзи
Нет
медиа

Другие посты @boxwithpython

Все посты канала →