Skip to content

Commit

Permalink
[pre-commit.ci] auto fixes from pre-commit.com hooks
Browse files Browse the repository at this point in the history
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Dec 8, 2022
1 parent 7bc5aed commit 380d5ab
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions ipykernel/eventloops.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,16 @@ def exit_decorator(exit_func):
def _notify_stream_qt(kernel):
import operator
from functools import lru_cache

from IPython.external.qt_for_kernel import QtCore

try:
from IPython.external.qt_for_kernel import enum_helper
except ImportError:

@lru_cache(None)
def enum_helper(name):
return operator.attrgetter(
name.rpartition(".")[0]
)(sys.modules[QtCore.__package__])

return operator.attrgetter(name.rpartition(".")[0])(sys.modules[QtCore.__package__])

def process_stream_events():
"""fall back to main loop when there's a socket event"""
Expand All @@ -95,7 +94,8 @@ def process_stream_events():
if not hasattr(kernel, "_qt_notifier"):
fd = kernel.shell_stream.getsockopt(zmq.FD)
kernel._qt_notifier = QtCore.QSocketNotifier(
fd, enum_helper('QtCore.QSocketNotifier.Type').Read, kernel.app.qt_event_loop)
fd, enum_helper('QtCore.QSocketNotifier.Type').Read, kernel.app.qt_event_loop
)
kernel._qt_notifier.activated.connect(process_stream_events)
else:
kernel._qt_notifier.setEnabled(True)
Expand All @@ -117,7 +117,7 @@ def process_stream_events():
@register_integration("qt", "qt4", "qt5", "qt6")
def loop_qt(kernel):
"""Event loop for all versions of Qt."""
_notify_stream_qt(kernel) # install hook to stop event loop.
_notify_stream_qt(kernel) # install hook to stop event loop.
# Start the event loop.
kernel.app._in_event_loop = True
# `exec` blocks until there's ZMQ activity.
Expand Down Expand Up @@ -421,6 +421,7 @@ def close_loop():
loop.run_until_complete(close_loop) # type:ignore[call-overload]
loop.close()


# The user can generically request `qt` or a specific Qt version, e.g. `qt6`. For a generic Qt
# request, we let the mechanism in IPython choose the best available version by leaving the `QT_API`
# environment variable blank.
Expand All @@ -438,16 +439,19 @@ def set_qt_api(gui, kernel):
raise RuntimeError('Kernel already running a Qt event loop.')
qt_api = os.environ.get("QT_API", None)
if qt_api is not None and gui != 'qt':
env2gui = {'pyside': 'qt4',
'pyqt': 'qt4',
'pyside2': 'qt5',
'pyqt5': 'qt5',
'pyside6': 'qt6',
'pyqt6': 'qt6',
}
env2gui = {
'pyside': 'qt4',
'pyqt': 'qt4',
'pyside2': 'qt5',
'pyqt5': 'qt5',
'pyside6': 'qt6',
'pyqt6': 'qt6',
}
if env2gui[qt_api] != gui:
print(f'Request for "{gui}" will be ignored because `QT_API` '
f'environment variable is set to "{qt_api}"')
print(
f'Request for "{gui}" will be ignored because `QT_API` '
f'environment variable is set to "{qt_api}"'
)
else:
if gui == 'qt4':
try:
Expand Down Expand Up @@ -491,16 +495,19 @@ def set_qt_api(gui, kernel):
if 'QT_API' in os.environ.keys():
del os.environ['QT_API']
else:
raise ValueError(f'Unrecognized Qt version: {gui}. Should be "qt4", "qt5", "qt6", or "qt".')
raise ValueError(
f'Unrecognized Qt version: {gui}. Should be "qt4", "qt5", "qt6", or "qt".'
)

if gui!= 'qt' and hasattr(kernel, 'last_qt_version') and 'QT_API' in os.environ.keys():
if gui != 'qt' and hasattr(kernel, 'last_qt_version') and 'QT_API' in os.environ.keys():
if kernel.last_qt_version != gui:
raise ValueError('Cannot switch Qt versions for this session; '
f'must use {kernel.last_qt_version}.')
raise ValueError(
'Cannot switch Qt versions for this session; ' f'must use {kernel.last_qt_version}.'
)

# Do the actual import now that the environment variable is set.
try:
from IPython.external.qt_for_kernel import QtGui, QtCore, QT_API
from IPython.external.qt_for_kernel import QT_API, QtCore, QtGui
except ImportError:
# Clear the environment variable for the next attempt.
if 'QT_API' in os.environ.keys():
Expand All @@ -519,6 +526,7 @@ def set_qt_api(gui, kernel):
# version so we can check for this and give an error.
kernel.last_qt_version = gui


def enable_gui(gui, kernel=None):
"""Enable integration with a given GUI"""
if gui not in loop_map:
Expand Down

0 comments on commit 380d5ab

Please sign in to comment.