Calysto / metakernel

Jupyter/IPython Kernel Tools

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

replwrap _expect_prompt broken: line undefined

dekuenstle opened this issue · comments

Hi,
the line variable in the replwrap.REPLWrapper._expect_prompt method is not defined in the latest version of metakernel.
This results in NameError exceptions, e.g. using oct2py.

Cheers
David

Some more detail:
Metakernel 0.24.3, Oct2Py 5.0.4, Python 3.8

Minimal example:

from oct2py import octave
import numpy as np

octave.addpath(octave.genpath('/path/to/library'))
x = np.arange(19)
octave.libraryfunction(x)

Stacktrace:

~/.local/lib/python3.8/site-packages/oct2py/core.py in feval(self, func_path, *func_args, **kwargs)
    356                         height=kwargs.get('plot_height'),
    357                         resolution=kwargs.get('plot_res'))
--> 358         self._engine.plot_settings = settings
    359 
    360         dname = osp.dirname(func_path)

~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in plot_settings(self, settings)
    217                 cmds.append("graphics_toolkit('%s');" % self._default_toolkit)
    218 
--> 219         self.eval('\n'.join(cmds))
    220 
    221     def eval(self, code, timeout=None, silent=False):

~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in eval(self, code, timeout, silent)
    244                 self.error_handler(e)
    245             else:
--> 246                 raise e
    247 
    248     def make_figures(self, plot_dir=None):

~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in eval(self, code, timeout, silent)
    229             self.logger.debug(code)
    230         try:
--> 231             resp = self.repl.run_command(code.rstrip(),
    232                                          timeout=timeout,
    233                                          stream_handler=stream_handler,

~/.local/lib/python3.8/site-packages/metakernel/replwrap.py in run_command(self, command, timeout, stream_handler, line_handler, stdin_handler)
    242         for line in cmdlines[1:]:
    243             if not self.prompt_emit_cmd:
--> 244                 self._expect_prompt(timeout=timeout)
    245                 res.append(self.child.before)
    246             self.sendline(line)

~/.local/lib/python3.8/site-packages/metakernel/replwrap.py in _expect_prompt(self, timeout)
    145                     raise ValueError('Stdin Requested but not stdin handler available')
    146 
--> 147                 resp = self._stdin_handler(line + self.child.after)
    148                 self.sendline(resp)
    149             # got a newline

NameError: name 'line' is not defined

The original code was:

line = stdin_handler(self.child.after)
self.sendline(line)

I think that's what it should be changed back to. Mind trying it and submitting a PR?