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: 
    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()