##// END OF EJS Templates
Use unicode_to_str from py3compat
Use unicode_to_str from py3compat

File last commit:

r4872:34c10438
r5313:fb3b7762
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 #-------------------------------------------------------------------------------
# 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
#-------------------------------------------------------------------------------
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