Я пытаюсь реализовать оболочку для синглов / слотов для проекта, над которым я работаю. Все с оболочкой работает за исключением того, что когда iPython выполняет завершение кода, он запускает функции, хранящиеся в оболочке, которые должны запускаться до и после выполнения метода.
Это ожидается, поскольку, насколько я понимаю, iPython выполняет завершение кода, выполняя код. Мой вопрос, есть ли способ проверить, выполняется ли код пользователем или средством завершения кода iPython?
Я пытался изучить метод get_ipython и PyDevTerminalInteractiveShell. Кажется, должен быть способ собрать это воедино, но я просто не могу это понять.
def add_hooks(func):
_pre = _Signal()
_post = _Signal()
@wraps(func)
def wrapper(*args, **kwargs):
_pre(*args, **kwargs)
return_val = func(*args, **kwargs)
_post(*args, **kwargs, func_return_val=return_val)
return return_val
wrapper.pre = _pre
wrapper.post = _post
return wrapper
Если есть способ сделать это, я мог бы просто добавить проверку времени выполнения в классе Signals.