# encoding: utf-8 | |
""" | |
Autocall capabilities for IPython.core. | |
Authors: | |
* Brian Granger | |
* Fernando Perez | |
* Thomas Kluyver | |
Notes | |
----- | |
""" | |
#----------------------------------------------------------------------------- | |
# Copyright (C) 2008-2011 The IPython Development Team | |
# | |
# Distributed under the terms of the BSD License. The full license is in | |
# the file COPYING, distributed as part of this software. | |
#----------------------------------------------------------------------------- | |
#----------------------------------------------------------------------------- | |
# Imports | |
#----------------------------------------------------------------------------- | |
#----------------------------------------------------------------------------- | |
# Code | |
#----------------------------------------------------------------------------- | |
class IPyAutocall(object): | |
""" Instances of this class are always autocalled | |
This happens regardless of 'autocall' variable state. Use this to | |
develop macro-like mechanisms. | |
""" | |
_ip = None | |
rewrite = True | |
def __init__(self, ip=None): | |
self._ip = ip | |
def set_ip(self, ip): | |
"""Will be used to set _ip point to current ipython instance b/f call | |
Override this method if you don't want this to happen. | |
""" | |
self._ip = ip | |
class ExitAutocall(IPyAutocall): | |
"""An autocallable object which will be added to the user namespace so that | |
exit, exit(), quit or quit() are all valid ways to close the shell.""" | |
rewrite = False | |
def __call__(self): | |
self._ip.ask_exit() | |
class ZMQExitAutocall(ExitAutocall): | |
"""Exit IPython. Autocallable, so it needn't be explicitly called. | |
Parameters | |
---------- | |
keep_kernel : bool | |
If True, leave the kernel alive. Otherwise, tell the kernel to exit too | |
(default). | |
""" | |
def __call__(self, keep_kernel=False): | |
self._ip.keepkernel_on_exit = keep_kernel | |
self._ip.ask_exit() | |