Source code for spyder.api.shellconnect.status

# -*- coding: utf-8 -*-
#
# Copyright © Spyder Project Contributors
# Licensed under the terms of the MIT License
# (see spyder/__init__.py for details)

"""
Status bar widget that shows content that comes from the IPython console.
"""

# Standard library imports
import functools

# Local imports
from spyder.api.shellconnect.mixins import ShellConnectMixin
from spyder.api.widgets.status import StatusBarWidget


[docs] class ShellConnectStatusBarWidget(StatusBarWidget, ShellConnectMixin): """ Base class for status bar widgets whose info depends on the current shell. """ def __init__(self, parent): super().__init__(parent) # Mapping from shellwidgets to their corresponding statuses self.shellwidget_to_status = {} # Current associated shellwidget self.current_shellwidget = None # ---- Public API # -------------------------------------------------------------------------
[docs] def update_status(self, status): """ Actions to take to update the widget status after switching consoles. """ raise NotImplementedError
[docs] def on_kernel_start(self, shellwidget): """Actions to take when the kernel starts.""" raise NotImplementedError
[docs] def config_spyder_kernel(self, shellwidget): """Actions to take to configure the kernel.""" pass
# ---- ShellConnectMixin API # -------------------------------------------------------------------------
[docs] def set_shellwidget(self, shellwidget): """ Actions to take when setting (i.e. giving focus to) a shellwidget. """ self.current_shellwidget = None if shellwidget in self.shellwidget_to_status: status = self.shellwidget_to_status[shellwidget] if status is None: # This means the console failed to start or there was a problem # obtaining the status from the kernel. So, we don't need to # show this widget in those cases. self.hide() else: self.show() self.current_shellwidget = shellwidget self.update_status(status)
[docs] def add_shellwidget(self, shellwidget): """Actions to take when adding a shellwidget.""" shellwidget.sig_config_spyder_kernel.connect( functools.partial(self.config_spyder_kernel, shellwidget) ) shellwidget.sig_kernel_is_ready.connect( # We can't use functools.partial here because it gives memory leaks # in Python versions older than 3.10 lambda sw=shellwidget: self.on_kernel_start(sw) ) self.shellwidget_to_status[shellwidget] = None self.set_shellwidget(shellwidget)
[docs] def remove_shellwidget(self, shellwidget): """Actions to take when removing a shellwidget.""" if shellwidget in self.shellwidget_to_status: self.shellwidget_to_status.pop(shellwidget)
[docs] def add_errored_shellwidget(self, shellwidget): """Actions to take when a shellwidget errored.""" self.shellwidget_to_status[shellwidget] = None self.set_shellwidget(shellwidget)