Как заставить python monkeypatching работать?

#python #pytest #monkeypatching

Вопрос:

Я пытаюсь исправить вызываемую функцию get_datetime() .

Реальная дата время get_datetime() находится под bobs/utils/dtutils и делает:

 def get_datetime() -gt; datetime:  return datetime.now()  

это используется в другом месте под bobs/generation

где глобально в generation.py файле я делаю:

 from utils.dtutils import get_datetime NAME = f"""{KMTER}/{get_datetime().strftime('%Y-%m-%d')}/dadsdge.fs"""  

на участке обезьян я делаю:

 monkey_patch.setattr(  "bobs.generation.get_datetime",  datetime.datetime(2021, 11, 18), )  

это не работает. Меня now() все равно вернут.

Я также пытался латать bobs.utils.dtutils.get_datetime , но тоже безрезультатно. Он определенно находит его , потому что, если я составляю имя функции, о котором он говорит module does not contain bla , поэтому я не понимаю, почему я не вижу его установленным…

Комментарии:

1. Не связаны, но зачем get_datetime вообще определять? Кажется ненужным уровнем косвенности (даже если вы придерживаетесь более простого определения get_datetime = datetime.now ).

2. Могу сделать. Дайте мне знать, если вы знаете, почему исправление обезьяны не удается. Похоже, это не сработает, если я просто попытаюсь исправить строку по-обезьяньи

3. «Это используется в другом месте под bobs/generation, где глобально в поколении. файл py, который я делаю […]»: в этом случае не пропущено ли в вашем патче «поколение», например «bobs.generation.generation.get_datetime»?

4. не извиняйся, я должен был написать bobs/generation.py