1# encoding: utf-8 2""" 3Autocall capabilities for IPython.core. 4 5Authors: 6 7* Brian Granger 8* Fernando Perez 9* Thomas Kluyver 10 11Notes 12----- 13""" 14 15#----------------------------------------------------------------------------- 16# Copyright (C) 2008-2011 The IPython Development Team 17# 18# Distributed under the terms of the BSD License. The full license is in 19# the file COPYING, distributed as part of this software. 20#----------------------------------------------------------------------------- 21 22#----------------------------------------------------------------------------- 23# Imports 24#----------------------------------------------------------------------------- 25 26 27#----------------------------------------------------------------------------- 28# Code 29#----------------------------------------------------------------------------- 30 31class IPyAutocall(object): 32 """ Instances of this class are always autocalled 33 34 This happens regardless of 'autocall' variable state. Use this to 35 develop macro-like mechanisms. 36 """ 37 _ip = None 38 rewrite = True 39 def __init__(self, ip=None): 40 self._ip = ip 41 42 def set_ip(self, ip): 43 """ Will be used to set _ip point to current ipython instance b/f call 44 45 Override this method if you don't want this to happen. 46 47 """ 48 self._ip = ip 49 50 51class ExitAutocall(IPyAutocall): 52 """An autocallable object which will be added to the user namespace so that 53 exit, exit(), quit or quit() are all valid ways to close the shell.""" 54 rewrite = False 55 56 def __call__(self): 57 self._ip.ask_exit() 58 59class ZMQExitAutocall(ExitAutocall): 60 """Exit IPython. Autocallable, so it needn't be explicitly called. 61 62 Parameters 63 ---------- 64 keep_kernel : bool 65 If True, leave the kernel alive. Otherwise, tell the kernel to exit too 66 (default). 67 """ 68 def __call__(self, keep_kernel=False): 69 self._ip.keepkernel_on_exit = keep_kernel 70 self._ip.ask_exit() 71