split
This commit is contained in:
parent
6802e83d83
commit
e39b1e0127
100
packages/python/yap_kernel/interactiveshell.py
Normal file
100
packages/python/yap_kernel/interactiveshell.py
Normal file
@ -0,0 +1,100 @@
|
||||
from IPython.core.interactive import ExecutionResult
|
||||
import yap
|
||||
import sys
|
||||
import syslog
|
||||
import os
|
||||
|
||||
def yap_run_cell(self, s, store_history=True, silent=False,
|
||||
shell_futures=True):
|
||||
|
||||
result = ExecutionResult()
|
||||
|
||||
if (not s) or s.isspace():
|
||||
self.last_execution_succeeded = True
|
||||
return result
|
||||
|
||||
if store_history:
|
||||
result.execution_count = self.execution_count
|
||||
|
||||
def error_before_exec(value):
|
||||
result.error_before_exec = value
|
||||
self.last_execution_succeeded = False
|
||||
return result
|
||||
|
||||
|
||||
if not self.engine:
|
||||
try:
|
||||
self.engine = yap.Engine()
|
||||
except:
|
||||
return error_before_exec( sys.exc_info()[1])
|
||||
|
||||
if not self.q:
|
||||
try:
|
||||
self.q = self.engine.query(s)
|
||||
except SyntaxError:
|
||||
return error_before_exec( sys.exc_info()[1])
|
||||
|
||||
cell = s # cell has to exist so it can be stored/logged
|
||||
|
||||
# Store raw and processed history
|
||||
# if not silent:
|
||||
# self.logger.log(cell, s)
|
||||
|
||||
try:
|
||||
f = io.StringIO()
|
||||
with redirect_stdout(f):
|
||||
goal = self.q.next()
|
||||
print('{0}'.format(f.getvalue()))
|
||||
# Execute the user code
|
||||
has_raised = False
|
||||
if goal:
|
||||
myvs = self.q.namedVarsCopy()
|
||||
if myvs:
|
||||
i = 0
|
||||
for peq in myvs:
|
||||
name = peq[0]
|
||||
bind = peq[1]
|
||||
if bind.isVar():
|
||||
var = yap.YAPAtom('$VAR')
|
||||
f = yap.YAPFunctor(var, 1)
|
||||
bind.unify(yap.YAPApplTerm(f, (name)))
|
||||
else:
|
||||
i = bind.numberVars(i, True)
|
||||
print(name.text() + " = " + bind.text())
|
||||
else:
|
||||
print("yes")
|
||||
if self.q.deterministic():
|
||||
self.closeq()
|
||||
else:
|
||||
print("No (more) answers")
|
||||
self.closeq()
|
||||
except:
|
||||
result.error_in_exec = sys.exc_info()[1]
|
||||
# self.showtraceback()
|
||||
has_raised = True
|
||||
|
||||
|
||||
self.last_execution_succeeded = not has_raised
|
||||
result.result = self.last_execution_succeeded
|
||||
|
||||
# Reset this so later displayed values do not modify the
|
||||
# ExecutionResult
|
||||
# self.displayhook.exec_result = None
|
||||
|
||||
#self.events.trigger('post_execute')
|
||||
#if not silent:
|
||||
# self.events.trigger('post_run_cell')
|
||||
|
||||
if store_history:
|
||||
# Write output to the database. Does nothing unless
|
||||
# history output logging is enabled.
|
||||
# self.history_manager.store_output(self.execution_count)
|
||||
# Each cell is a *single* input, regardless of how many lines it has
|
||||
self.execution_count += 1
|
||||
|
||||
return result
|
||||
|
||||
def closeq(self):
|
||||
if self.q:
|
||||
self.q.close()
|
||||
self.q = None
|
Reference in New Issue
Block a user