##// END OF EJS Templates
Finished initial reworking and updating of setup.py and friends, including the MANIFEST.in. Everything seems...
Finished initial reworking and updating of setup.py and friends, including the MANIFEST.in. Everything seems to work fine. I have also gone through the tests in various subpackages (like kernel) and have protected imports of twisted, zope.interface and foolscap with a try/except clause. Now the tests are simply not run if these deps are missing. All tests now pass no matter what.

File last commit:

r1234:52b55407
r1244:ba669b1a
Show More
history.py
137 lines | 4.5 KiB | text/x-python | PythonLexer
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234 # encoding: utf-8
""" Manage the input and output history of the interpreter and the
frontend.
There are 2 different history objects, one that lives in the interpreter,
and one that lives in the frontend. They are synced with a diff at each
execution of a command, as the interpreter history is a real stack, its
existing entries are not mutable.
"""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
# Copyright (C) 2008 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
#-------------------------------------------------------------------------------
from copy import copy
# Local imports.
from util import InputList
##############################################################################
class History(object):
""" An object managing the input and output history.
"""
def __init__(self, input_cache=None, output_cache=None):
# Stuff that IPython adds to the namespace.
self.namespace_additions = dict(
_ = None,
__ = None,
___ = None,
)
# A list to store input commands.
if input_cache is None:
input_cache =InputList([])
self.input_cache = input_cache
# A dictionary to store trapped output.
if output_cache is None:
output_cache = {}
self.output_cache = output_cache
def get_history_item(self, index):
""" Returns the history string at index, where index is the
distance from the end (positive).
"""
if index>0 and index<len(self.input_cache):
return self.input_cache[index]
##############################################################################
class InterpreterHistory(History):
""" An object managing the input and output history at the interpreter
level.
"""
def setup_namespace(self, namespace):
""" Add the input and output caches into the interpreter's namespace
with IPython-conventional names.
Parameters
----------
namespace : dict
"""
namespace['In'] = self.input_cache
namespace['_ih'] = self.input_cache
namespace['Out'] = self.output_cache
namespace['_oh'] = self.output_cache
def update_history(self, interpreter, python):
""" Update the history objects that this object maintains and the
interpreter's namespace.
Parameters
----------
interpreter : Interpreter
python : str
The real Python code that was translated and actually executed.
"""
number = interpreter.current_cell_number
new_obj = interpreter.display_trap.obj
if new_obj is not None:
self.namespace_additions['___'] = self.namespace_additions['__']
self.namespace_additions['__'] = self.namespace_additions['_']
self.namespace_additions['_'] = new_obj
self.output_cache[number] = new_obj
interpreter.user_ns.update(self.namespace_additions)
self.input_cache.add(number, python)
def get_history_item(self, index):
""" Returns the history string at index, where index is the
distance from the end (positive).
"""
if index>0 and index<(len(self.input_cache)-1):
return self.input_cache[-index]
def get_input_cache(self):
return copy(self.input_cache)
def get_input_after(self, index):
""" Returns the list of the commands entered after index.
"""
# We need to call directly list.__getslice__, because this object
# is not a real list.
return list.__getslice__(self.input_cache, index,
len(self.input_cache))
##############################################################################
class FrontEndHistory(History):
""" An object managing the input and output history at the frontend.
It is used as a local cache to reduce network latency problems
and multiple users editing the same thing.
"""
def add_items(self, item_list):
""" Adds the given command list to the stack of executed
commands.
"""
self.input_cache.extend(item_list)