##// END OF EJS Templates
Fix %run
Fix %run

File last commit:

r5807:3ba61c59
r6929:cfd2d6a6
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
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
Thomas Spura
Delete all references to old IPython.external.guid...
r5807 import uuid
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):
Thomas Spura
Delete all references to old IPython.external.guid...
r5807 blockID = uuid.uuid4()
Bernardo B. Marques
remove all trailling spaces
r4872
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