From 67dceeb9bab5c3ad26d878d002df094f05b06f48 Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Thu, 22 Jun 2023 15:19:55 +0200 Subject: [PATCH 1/9] add print remote --- spyder_kernels/console/kernel.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index d1a585a3..5c2a1100 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -90,6 +90,7 @@ def __init__(self, *args, **kwargs): 'request_pdb_stop': self.shell.request_pdb_stop, 'raise_interrupt_signal': self.shell.raise_interrupt_signal, 'get_fault_text': self.get_fault_text, + 'print_remote': self.print_remote, } for call_id in handlers: self.frontend_comm.register_call_handler( @@ -967,3 +968,14 @@ def post_handler_hook(self): self.shell.register_debugger_sigint() # Reset tracing function so that pdb.set_trace works sys.settrace(None) + + def print_remote(self, text, file_name=None): + """Remote print""" + file = None + if file_name == "stdout": + file = sys.stdout + elif file_name == "stderr": + file = sys.stderr + print(text, file=file) + if file: + file.flush() From 84a4774a4a61f42703c64f8fa9360d04fb93347a Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Mon, 26 Jun 2023 05:53:26 +0200 Subject: [PATCH 2/9] pending comms --- spyder_kernels/comms/frontendcomm.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spyder_kernels/comms/frontendcomm.py b/spyder_kernels/comms/frontendcomm.py index 1e7e86f4..9eaf2ee1 100644 --- a/spyder_kernels/comms/frontendcomm.py +++ b/spyder_kernels/comms/frontendcomm.py @@ -130,9 +130,11 @@ def _check_comm_reply(self): """ Send comm message to frontend to check if the iopub channel is ready """ - if len(self._pending_comms) == 0: + # Make sure the length doesn't change during iteration + pending_comms = list(self._pending_comms.values()) + if len(pending_comms) == 0: return - for comm in self._pending_comms.values(): + for comm in pending_comms: self._notify_comm_ready(comm) self.kernel.io_loop.call_later(1, self._check_comm_reply) From 13c977a85158e7c5ea038a9ff0679e498615f5fc Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Wed, 5 Jul 2023 23:36:37 +0200 Subject: [PATCH 3/9] changes --- spyder_kernels/console/kernel.py | 117 +++++++++++++------------- spyder_kernels/console/shell.py | 14 --- spyder_kernels/console/start.py | 77 ----------------- spyder_kernels/customize/spyderpdb.py | 14 +-- spyder_kernels/utils/mpl.py | 7 -- 5 files changed, 68 insertions(+), 161 deletions(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index 5c2a1100..af51e98b 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -32,7 +32,7 @@ from spyder_kernels.comms.frontendcomm import FrontendComm from spyder_kernels.utils.iofuncs import iofunctions from spyder_kernels.utils.mpl import ( - MPL_BACKENDS_FROM_SPYDER, MPL_BACKENDS_TO_SPYDER, INLINE_FIGURE_FORMATS) + MPL_BACKENDS_FROM_SPYDER, MPL_BACKENDS_TO_SPYDER) from spyder_kernels.utils.nsview import ( get_remote_data, make_remote_view, get_size) from spyder_kernels.console.shell import SpyderShell @@ -90,7 +90,7 @@ def __init__(self, *args, **kwargs): 'request_pdb_stop': self.shell.request_pdb_stop, 'raise_interrupt_signal': self.shell.raise_interrupt_signal, 'get_fault_text': self.get_fault_text, - 'print_remote': self.print_remote, + 'set_matplotlib_conf': self.set_matplotlib_conf, } for call_id in handlers: self.frontend_comm.register_call_handler( @@ -557,25 +557,38 @@ def get_mpl_interactive_backend(self): # magic but not through our Preferences. return -1 - def set_matplotlib_backend(self, backend, pylab=False): - """Set matplotlib backend given a Spyder backend option.""" - mpl_backend = MPL_BACKENDS_FROM_SPYDER[str(backend)] - self._set_mpl_backend(mpl_backend, pylab=pylab) + def set_matplotlib_conf(self, conf): + """Set matplotlib configuration""" + pylab_autoload_n = 'pylab/autoload' + pylab_backend_n = 'pylab/backend' + figure_format_n = 'pylab/inline/figure_format' + resolution_n = 'pylab/inline/resolution' + width_n = 'pylab/inline/width' + height_n = 'pylab/inline/height' + bbox_inches_n = 'pylab/inline/bbox_inches' + inline_backend = 0 + + if pylab_autoload_n in conf or pylab_backend_n in conf: + self._set_mpl_backend( + MPL_BACKENDS_FROM_SPYDER[str( + conf.get(pylab_backend_n, inline_backend))], + pylab=conf.get(pylab_backend_n, False) + ) + if figure_format_n in conf: + self._set_config_option( + 'InlineBackend.figure_format', + conf[figure_format_n] + ) + if resolution_n in conf: + self._set_mpl_inline_rc_config('figure.dpi', conf[resolution_n]) + if width_n in conf and height_n in conf: + self._set_mpl_inline_rc_config( + 'figure.figsize', + (conf[width_n], conf[height_n]) + ) + if bbox_inches_n in conf: + self.set_mpl_inline_bbox_inches(conf[bbox_inches_n]) - def set_mpl_inline_figure_format(self, figure_format): - """Set the inline figure format to use with matplotlib.""" - mpl_figure_format = INLINE_FIGURE_FORMATS[figure_format] - self._set_config_option( - 'InlineBackend.figure_format', mpl_figure_format) - - def set_mpl_inline_resolution(self, resolution): - """Set inline figure resolution.""" - self._set_mpl_inline_rc_config('figure.dpi', resolution) - - def set_mpl_inline_figure_size(self, width, height): - """Set inline figure size.""" - value = (width, height) - self._set_mpl_inline_rc_config('figure.figsize', value) def set_mpl_inline_bbox_inches(self, bbox_inches): """ @@ -646,27 +659,27 @@ def close_all_mpl_figures(self): except: pass - def is_special_kernel_valid(self): + def is_special_kernel_valid(self, special): """ Check if optional dependencies are available for special consoles. """ - try: - if os.environ.get('SPY_AUTOLOAD_PYLAB_O') == 'True': - import matplotlib - elif os.environ.get('SPY_SYMPY_O') == 'True': - import sympy - elif os.environ.get('SPY_RUN_CYTHON') == 'True': - import cython - except Exception: - # Use Exception instead of ImportError here because modules can - # fail to be imported due to a lot of issues. - if os.environ.get('SPY_AUTOLOAD_PYLAB_O') == 'True': - return u'matplotlib' - elif os.environ.get('SPY_SYMPY_O') == 'True': - return u'sympy' - elif os.environ.get('SPY_RUN_CYTHON') == 'True': - return u'cython' - return None + if special is None: + return + elif special == "pylab": + try: + import matplotlib + except Exception: + return "matplotlib" + elif special == "sympy": + try: + import sympy + except Exception: + return "sympy" + elif special == "cython": + try: + import cython + except Exception: + return "cython" def update_syspath(self, path_dict, new_path_dict): """ @@ -896,15 +909,14 @@ def show_mpl_backend_errors(self): def set_sympy_forecolor(self, background_color='dark'): """Set SymPy forecolor depending on console background.""" - if os.environ.get('SPY_SYMPY_O') == 'True': - try: - from sympy import init_printing - if background_color == 'dark': - init_printing(forecolor='White', ip=self.shell) - elif background_color == 'light': - init_printing(forecolor='Black', ip=self.shell) - except Exception: - pass + try: + from sympy import init_printing + if background_color == 'dark': + init_printing(forecolor='White', ip=self.shell) + elif background_color == 'light': + init_printing(forecolor='Black', ip=self.shell) + except Exception: + pass # --- Others def _load_autoreload_magic(self): @@ -968,14 +980,3 @@ def post_handler_hook(self): self.shell.register_debugger_sigint() # Reset tracing function so that pdb.set_trace works sys.settrace(None) - - def print_remote(self, text, file_name=None): - """Remote print""" - file = None - if file_name == "stdout": - file = sys.stdout - elif file_name == "stderr": - file = sys.stderr - print(text, file=file) - if file: - file.flush() diff --git a/spyder_kernels/console/shell.py b/spyder_kernels/console/shell.py index c859f985..6dbbd759 100644 --- a/spyder_kernels/console/shell.py +++ b/spyder_kernels/console/shell.py @@ -143,13 +143,6 @@ def add_pdb_session(self, pdb_obj): # Set config to pdb obj self.set_pdb_configuration(self._pdb_conf) - try: - self.kernel.frontend_call(blocking=False).set_debug_state( - len([s for s in self._namespace_stack - if isinstance(s, SpyderPdb)])) - except (CommError, TimeoutError): - logger.debug("Could not send debugging state to the frontend.") - def remove_pdb_session(self, pdb_obj): """Remove a pdb object from the stack.""" if self.pdb_session != pdb_obj: @@ -161,13 +154,6 @@ def remove_pdb_session(self, pdb_obj): # Set config to newly active pdb obj self.set_pdb_configuration(self._pdb_conf) - try: - self.kernel.frontend_call(blocking=False).set_debug_state( - len([s for s in self._namespace_stack - if isinstance(s, SpyderPdb)])) - except (CommError, TimeoutError): - logger.debug("Could not send debugging state to the frontend.") - def add_namespace_manager(self, ns_manager): """Add namespace manager to stack.""" self._namespace_stack.append(ns_manager) diff --git a/spyder_kernels/console/start.py b/spyder_kernels/console/start.py index 708319c0..82fe6612 100644 --- a/spyder_kernels/console/start.py +++ b/spyder_kernels/console/start.py @@ -21,8 +21,6 @@ # Local imports from spyder_kernels.utils.misc import is_module_installed -from spyder_kernels.utils.mpl import ( - MPL_BACKENDS_FROM_SPYDER, INLINE_FIGURE_FORMATS) def import_spydercustomize(): @@ -48,24 +46,6 @@ def import_spydercustomize(): except ValueError: pass - -def sympy_config(mpl_backend): - """Sympy configuration""" - if mpl_backend is not None: - lines = """ -from sympy.interactive import init_session -init_session() -%matplotlib {0} -""".format(mpl_backend) - else: - lines = """ -from sympy.interactive import init_session -init_session() -""" - - return lines - - def kernel_config(): """Create a config object with IPython kernel options.""" from IPython.core.application import get_ipython_dir @@ -150,57 +130,6 @@ def kernel_config(): 'figure.edgecolor': 'white' } - # Pylab configuration - mpl_backend = None - if is_module_installed('matplotlib'): - # Set Matplotlib backend with Spyder options - pylab_o = os.environ.get('SPY_PYLAB_O') - backend_o = os.environ.get('SPY_BACKEND_O') - if pylab_o == 'True' and backend_o is not None: - mpl_backend = MPL_BACKENDS_FROM_SPYDER[backend_o] - # Inline backend configuration - if mpl_backend == 'inline': - # Figure format - format_o = os.environ.get('SPY_FORMAT_O') - formats = INLINE_FIGURE_FORMATS - if format_o is not None: - spy_cfg.InlineBackend.figure_format = formats[format_o] - - # Resolution - resolution_o = os.environ.get('SPY_RESOLUTION_O') - if resolution_o is not None: - spy_cfg.InlineBackend.rc['figure.dpi'] = float( - resolution_o) - - # Figure size - width_o = float(os.environ.get('SPY_WIDTH_O')) - height_o = float(os.environ.get('SPY_HEIGHT_O')) - if width_o is not None and height_o is not None: - spy_cfg.InlineBackend.rc['figure.figsize'] = (width_o, - height_o) - - # Print figure kwargs - bbox_inches_o = os.environ.get('SPY_BBOX_INCHES_O') - bbox_inches = 'tight' if bbox_inches_o == 'True' else None - spy_cfg.InlineBackend.print_figure_kwargs.update( - {'bbox_inches': bbox_inches}) - else: - # Set Matplotlib backend to inline for external kernels. - # Fixes issue 108 - mpl_backend = 'inline' - - # Automatically load Pylab and Numpy, or only set Matplotlib - # backend - autoload_pylab_o = os.environ.get('SPY_AUTOLOAD_PYLAB_O') == 'True' - command = "get_ipython().kernel._set_mpl_backend('{0}', {1})" - spy_cfg.IPKernelApp.exec_lines.append( - command.format(mpl_backend, autoload_pylab_o)) - - # Enable Cython magic - run_cython = os.environ.get('SPY_RUN_CYTHON') == 'True' - if run_cython and is_module_installed('Cython'): - spy_cfg.IPKernelApp.exec_lines.append('%reload_ext Cython') - # Run a file at startup use_file_o = os.environ.get('SPY_USE_FILE_O') run_file_o = os.environ.get('SPY_RUN_FILE_O') @@ -220,12 +149,6 @@ def kernel_config(): greedy_o = os.environ.get('SPY_GREEDY_O') == 'True' spy_cfg.IPCompleter.greedy = greedy_o - # Sympy loading - sympy_o = os.environ.get('SPY_SYMPY_O') == 'True' - if sympy_o and is_module_installed('sympy'): - lines = sympy_config(mpl_backend) - spy_cfg.IPKernelApp.exec_lines.append(lines) - # Disable the new mechanism to capture and forward low-level output # in IPykernel 6. For that we have Wurlitzer. spy_cfg.IPKernelApp.capture_fd_output = False diff --git a/spyder_kernels/customize/spyderpdb.py b/spyder_kernels/customize/spyderpdb.py index e18248a8..ec505368 100755 --- a/spyder_kernels/customize/spyderpdb.py +++ b/spyder_kernels/customize/spyderpdb.py @@ -103,6 +103,9 @@ def __init__(self, completekey='tab', stdin=None, stdout=None, # Keep track of interrupting state to avoid several interruptions self.interrupting = False + # Should the frontend force go to the current line? + self._request_where = False + # Turn off IPython's debugger skip funcionality by default because # it makes our debugger quite slow. It's also important to remark # that this functionality doesn't do anything on its own. Users @@ -394,11 +397,8 @@ def do_where(self, arg): Take a number as argument as an (optional) number of context line to print""" - super(SpyderPdb, self).do_where(arg) - try: - frontend_request(blocking=False).do_where() - except (CommError, TimeoutError): - logger.debug("Could not send where request to the frontend.") + self._request_where = True + return super(SpyderPdb, self).do_where(arg) do_w = do_where @@ -810,6 +810,10 @@ def get_pdb_state(self): self._previous_step = None return state + if self._request_where: + self._request_where = False + state["do_where"] = True + # Get filename and line number of the current frame fname = self.canonic(frame.f_code.co_filename) if fname == self.mainpyfile and self.remote_filename is not None: diff --git a/spyder_kernels/utils/mpl.py b/spyder_kernels/utils/mpl.py index 7927e49d..ccd705d4 100644 --- a/spyder_kernels/utils/mpl.py +++ b/spyder_kernels/utils/mpl.py @@ -11,13 +11,6 @@ from spyder_kernels.utils.misc import is_module_installed -# Mapping of inline figure formats -INLINE_FIGURE_FORMATS = { - '0': 'png', - '1': 'svg' -} - - # Inline backend if is_module_installed('matplotlib_inline'): inline_backend = 'module://matplotlib_inline.backend_inline' From 3564ac929ecd12c2bb7069c7cfc875612a9055cc Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Wed, 5 Jul 2023 23:37:59 +0200 Subject: [PATCH 4/9] fix merge --- spyder_kernels/console/kernel.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index f86cabb9..1367c864 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -542,6 +542,7 @@ def get_mpl_interactive_backend(self): # magic but not through our Preferences. return -1 + @comm_handler def set_matplotlib_conf(self, conf): """Set matplotlib configuration""" pylab_autoload_n = 'pylab/autoload' From fb7fe85de40414fbd2ec43754ca45b3162ca65fd Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Thu, 6 Jul 2023 07:27:12 +0200 Subject: [PATCH 5/9] remove MPL_BACKENDS_FROM_SPYDER --- spyder_kernels/console/kernel.py | 9 +++++---- .../console/tests/test_console_kernel.py | 5 ++--- spyder_kernels/utils/mpl.py | 20 +++++-------------- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index 1367c864..a8441dfb 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -33,8 +33,7 @@ from spyder_kernels.comms.decorators import ( register_comm_handlers, comm_handler) from spyder_kernels.utils.iofuncs import iofunctions -from spyder_kernels.utils.mpl import ( - MPL_BACKENDS_FROM_SPYDER, MPL_BACKENDS_TO_SPYDER) +from spyder_kernels.utils.mpl import automatic_backend, MPL_BACKENDS_TO_SPYDER from spyder_kernels.utils.nsview import ( get_remote_data, make_remote_view, get_size) from spyder_kernels.console.shell import SpyderShell @@ -556,8 +555,7 @@ def set_matplotlib_conf(self, conf): if pylab_autoload_n in conf or pylab_backend_n in conf: self._set_mpl_backend( - MPL_BACKENDS_FROM_SPYDER[str( - conf.get(pylab_backend_n, inline_backend))], + conf.get(pylab_backend_n, inline_backend), pylab=conf.get(pylab_backend_n, False) ) if figure_format_n in conf: @@ -822,6 +820,9 @@ def _set_mpl_backend(self, backend, pylab=False): ) magic = 'pylab' if pylab else 'matplotlib' + + if backend == "auto": + backend = automatic_backend() error = None try: diff --git a/spyder_kernels/console/tests/test_console_kernel.py b/spyder_kernels/console/tests/test_console_kernel.py index d7efae21..e69eb79b 100644 --- a/spyder_kernels/console/tests/test_console_kernel.py +++ b/spyder_kernels/console/tests/test_console_kernel.py @@ -32,7 +32,6 @@ # Local imports from spyder_kernels.utils.iofuncs import iofunctions -from spyder_kernels.utils.mpl import MPL_BACKENDS_FROM_SPYDER from spyder_kernels.utils.test_utils import get_kernel, get_log_text from spyder_kernels.customize.spyderpdb import SpyderPdb from spyder_kernels.comms.commbase import CommBase @@ -1145,9 +1144,9 @@ def test_get_interactive_backend(backend): # Assert we got the right interactive backend if backend is not None: - assert MPL_BACKENDS_FROM_SPYDER[value] == backend + assert value == backend else: - assert value == '0' + assert value == 'inline' def test_global_message(tmpdir): diff --git a/spyder_kernels/utils/mpl.py b/spyder_kernels/utils/mpl.py index ccd705d4..7756fd39 100644 --- a/spyder_kernels/utils/mpl.py +++ b/spyder_kernels/utils/mpl.py @@ -20,11 +20,11 @@ # Mapping of matlotlib backends options to Spyder MPL_BACKENDS_TO_SPYDER = { - inline_backend: 0, - 'Qt5Agg': 2, - 'QtAgg': 2, # For Matplotlib 3.5+ - 'TkAgg': 3, - 'MacOSX': 4, + inline_backend: "inline", + 'Qt5Agg': 'qt5', + 'QtAgg': 'qt5', # For Matplotlib 3.5+ + 'TkAgg': 'tk', + 'MacOSX': 'osx', } @@ -37,13 +37,3 @@ def automatic_backend(): else: auto_backend = 'inline' return auto_backend - - -# Mapping of Spyder options to backends -MPL_BACKENDS_FROM_SPYDER = { - '0': 'inline', - '1': automatic_backend(), - '2': 'qt5', - '3': 'tk', - '4': 'osx' -} From 25902474db195186fc75de8041bb9a84526063de Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Thu, 6 Jul 2023 07:33:57 +0200 Subject: [PATCH 6/9] fix inline backend --- spyder_kernels/console/kernel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index a8441dfb..1e5e82de 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -551,7 +551,7 @@ def set_matplotlib_conf(self, conf): width_n = 'pylab/inline/width' height_n = 'pylab/inline/height' bbox_inches_n = 'pylab/inline/bbox_inches' - inline_backend = 0 + inline_backend = 'inline' if pylab_autoload_n in conf or pylab_backend_n in conf: self._set_mpl_backend( From ae4dc761783c403a0104ccb67699095e82a30ada Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Thu, 6 Jul 2023 21:28:27 +0200 Subject: [PATCH 7/9] fix autoload --- spyder_kernels/console/kernel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index 1e5e82de..91776378 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -556,7 +556,7 @@ def set_matplotlib_conf(self, conf): if pylab_autoload_n in conf or pylab_backend_n in conf: self._set_mpl_backend( conf.get(pylab_backend_n, inline_backend), - pylab=conf.get(pylab_backend_n, False) + pylab=conf.get(pylab_autoload_n, False) ) if figure_format_n in conf: self._set_config_option( From 1647a276de65db37e1e39cfdb860cb1dd97ba03d Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Tue, 1 Aug 2023 10:30:32 +0200 Subject: [PATCH 8/9] default inline --- spyder_kernels/console/kernel.py | 2 +- spyder_kernels/console/start.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index dac088f7..be9e1022 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -816,7 +816,7 @@ def _set_mpl_backend(self, backend, pylab=False): ) magic = 'pylab' if pylab else 'matplotlib' - + if backend == "auto": backend = automatic_backend() diff --git a/spyder_kernels/console/start.py b/spyder_kernels/console/start.py index 82fe6612..0502a134 100644 --- a/spyder_kernels/console/start.py +++ b/spyder_kernels/console/start.py @@ -130,6 +130,11 @@ def kernel_config(): 'figure.edgecolor': 'white' } + if is_module_installed('matplotlib'): + spy_cfg.IPKernelApp.exec_lines.append( + "get_ipython().kernel._set_mpl_backend('inline')" + ) + # Run a file at startup use_file_o = os.environ.get('SPY_USE_FILE_O') run_file_o = os.environ.get('SPY_RUN_FILE_O') From a33dfc86975704607247c7f7fdbecfe77426f750 Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Tue, 1 Aug 2023 10:56:32 +0200 Subject: [PATCH 9/9] fix tests --- spyder_kernels/console/kernel.py | 2 +- spyder_kernels/console/tests/test_console_kernel.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/spyder_kernels/console/kernel.py b/spyder_kernels/console/kernel.py index be9e1022..de5ed45b 100644 --- a/spyder_kernels/console/kernel.py +++ b/spyder_kernels/console/kernel.py @@ -528,7 +528,7 @@ def get_mpl_interactive_backend(self): if framework is None: # Since no interactive backend has been set yet, this is # equivalent to having the inline one. - return 0 + return 'inline' elif framework in mapping: return MPL_BACKENDS_TO_SPYDER[mapping[framework]] else: diff --git a/spyder_kernels/console/tests/test_console_kernel.py b/spyder_kernels/console/tests/test_console_kernel.py index f97f5d90..b7f17cce 100644 --- a/spyder_kernels/console/tests/test_console_kernel.py +++ b/spyder_kernels/console/tests/test_console_kernel.py @@ -1168,6 +1168,9 @@ def test_get_interactive_backend(backend): user_expressions = reply['content']['user_expressions'] value = user_expressions['output']['data']['text/plain'] + # remove quotes + value = value[1:-1] + # Assert we got the right interactive backend if backend is not None: assert value == backend