autocall.py
70 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2205 | # encoding: utf-8 | ||
""" | ||||
Autocall capabilities for IPython.core. | ||||
Authors: | ||||
* Brian Granger | ||||
* Fernando Perez | ||||
Thomas Kluyver
|
r3721 | * Thomas Kluyver | ||
Brian Granger
|
r2205 | |||
Notes | ||||
----- | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r2205 | # | ||
# 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. | ||||
""" | ||||
Thomas Kluyver
|
r3721 | _ip = None | ||
Thomas Kluyver
|
r3722 | rewrite = True | ||
Thomas Kluyver
|
r3721 | def __init__(self, ip=None): | ||
self._ip = ip | ||||
Brian Granger
|
r2205 | |||
Thomas Kluyver
|
r3721 | def set_ip(self, ip): | ||
Matthias Bussonnier
|
r27639 | """Will be used to set _ip point to current ipython instance b/f call | ||
Matthias Bussonnier
|
r26491 | |||
Brian Granger
|
r2205 | Override this method if you don't want this to happen. | ||
Matthias Bussonnier
|
r26491 | |||
Brian Granger
|
r2205 | """ | ||
self._ip = ip | ||||
Thomas Kluyver
|
r3721 | |||
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.""" | ||||
Thomas Kluyver
|
r3722 | rewrite = False | ||
Thomas Kluyver
|
r3721 | |||
def __call__(self): | ||||
self._ip.ask_exit() | ||||
Thomas Kluyver
|
r3724 | |||
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() | ||||