##// END OF EJS Templates
Simplify logic (semantics unchanged) in builtins trap.
Simplify logic (semantics unchanged) in builtins trap.

File last commit:

r5390:c82649ea
r5491:93a912f6
Show More
asyncfrontendbase.py
82 lines | 2.7 KiB | text/x-python | PythonLexer
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 """
Base front end class for all async frontends.
"""
__docformat__ = "restructuredtext en"
Fernando Perez
Fixes so the test suite runs when Twisted is not available....
r2133 # Tell nose to skip this module
__test__ = {}
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 #-------------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2008-2011 The IPython Development Team
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------
Fernando Perez
Fixes so the test suite runs when Twisted is not available....
r2133 # Third-party
from twisted.python.failure import Failure
from zope.interface import implements, classProvides
# From IPython
Brian Granger
Fixing misc testing related things.
r1960 from IPython.external import guid
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355
Fernando Perez
Fixes so the test suite runs when Twisted is not available....
r2133 from IPython.frontend.frontendbase import (FrontEndBase, IFrontEnd,
IFrontEndFactory)
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 from IPython.kernel.core.history import FrontEndHistory
Brian Granger
Fixed another bug related to missing dependencies in tests.
r1558 from IPython.kernel.engineservice import IEngineCore
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355
Fernando Perez
Fixes so the test suite runs when Twisted is not available....
r2133 #-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355
class AsyncFrontEndBase(FrontEndBase):
"""
Overrides FrontEndBase to wrap execute in a deferred result.
All callbacks are made as callbacks on the deferred result.
"""
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 implements(IFrontEnd)
classProvides(IFrontEndFactory)
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 def __init__(self, engine=None, history=None):
assert(engine==None or IEngineCore.providedBy(engine))
self.engine = IEngineCore(engine)
if history is None:
self.history = FrontEndHistory(input_cache=[''])
else:
self.history = history
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 def execute(self, block, blockID=None):
"""Execute the block and return the deferred result.
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 Parameters:
block : {str, AST}
blockID : any
Bernardo B. Marques
remove all trailling spaces
r4872 Caller may provide an ID to identify this block.
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 result['blockID'] := blockID
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 Result:
Deferred result of self.interpreter.execute
"""
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 if(not self.is_complete(block)):
return Failure(Exception("Block is not compilable"))
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 if(blockID == None):
Bernardo B. Marques
remove all trailling spaces
r4872 blockID = guid.generate()
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 d = self.engine.execute(block)
d.addCallback(self._add_history, block=block)
d.addCallbacks(self._add_block_id_for_result,
errback=self._add_block_id_for_failure,
callbackArgs=(blockID,),
errbackArgs=(blockID,))
d.addBoth(self.update_cell_prompt, blockID=blockID)
Bernardo B. Marques
remove all trailling spaces
r4872 d.addCallbacks(self.render_result,
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 errback=self.render_error)
Bernardo B. Marques
remove all trailling spaces
r4872
Gael Varoquaux
Split the frontend base class in different files and add a base class...
r1355 return d