#------------------------------------------------------------------------------
# Copyright (c) 2014, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
from atom.api import Dict, Event, Typed, ForwardTyped, set_default
from enaml.core.declarative import d_
from .control import Control, ProxyControl
class ProxyIPythonConsole(ProxyControl):
""" The abstract definition of a proxy IPythonConsole object.
"""
#: A reference to the IPythonConsole declaration.
declaration = ForwardTyped(lambda: IPythonConsole)
def get_var(self, name, default):
raise NotImplementedError
def update_ns(self, ns):
raise NotImplementedError
[docs]
class IPythonConsole(Control):
""" A widget which hosts an embedded IPython console.
"""
#: The initial namespace to apply to the console. Runtime changes
#: to this value will be ignored. Use 'update_ns' to add variables
#: to the console at runtime.
initial_ns = d_(Dict())
#: An event fired when the user invokes a console exit command.
exit_requested = d_(Event(), writable=False)
#: The ipython console expands freely by default.
hug_width = set_default('ignore')
hug_height = set_default('ignore')
#: A reference to the ProxyIPythonConsole object.
proxy = Typed(ProxyIPythonConsole)
[docs]
def get_var(self, name, default=None):
""" Get a variable from the console namespace.
Parameters
----------
name : basestring
The name of the variable to retrieve.
default : object, optional
The value to return if the variable does not exist. The
default is None.
Returns
-------
result : object
The variable in the namespace, or the provided default.
"""
if self.proxy_is_active:
return self.proxy.get_var(name, default)
return default
[docs]
def update_ns(self, **kwargs):
""" Update the variables in the console namespace.
Parameters
----------
**kwargs
The variables to update in the console namespace.
"""
if self.proxy_is_active:
self.proxy.update_ns(kwargs)