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