Skip to content

Commit 300a382

Browse files
authored
Merge pull request #66 from twisted/6
add 6 support
2 parents aa92bc5 + 2dd10ca commit 300a382

File tree

4 files changed

+77
-15
lines changed

4 files changed

+77
-15
lines changed

.github/workflows/ci.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,29 @@ jobs:
7676
wrapper:
7777
- name: PyQt5
7878
tox: pyqt5
79+
major: 5
80+
- name: PyQt6
81+
tox: pyqt6
82+
major: 6
7983
- name: PySide2
8084
tox: pyside2
85+
major: 5
86+
- name: PySide6
87+
tox: pyside6
88+
major: 6
8189
exclude:
8290
- python:
8391
tox: py311
8492
wrapper:
8593
tox: pyside2
94+
- python:
95+
tox: py35
96+
wrapper:
97+
major: 6
98+
- python:
99+
tox: py36
100+
wrapper:
101+
major: 6
86102
steps:
87103
- uses: actions/checkout@v2
88104
- name: Set up ${{ matrix.python.name }}

setup.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,18 @@ def read(fname):
5151
"pyqt5": [
5252
"pyqt5",
5353
],
54+
"pyqt6": [
55+
"pyqt6",
56+
],
5457
"pyside2": [
5558
# != 5.15.0 for:
5659
# https://bugreports.qt.io/browse/PYSIDE-1317
5760
# https://github.com/pytest-dev/pytest-twisted/pull/107#issuecomment-643679361
5861
"pyside2 != 5.15.0",
5962
],
63+
"pyside6": [
64+
"pyside6",
65+
],
6066
"test": [
6167
"coverage",
6268
"pytest",

src/qt5reactor/core.py

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -106,21 +106,53 @@
106106

107107
import sys
108108

109+
failures = {}
110+
found = False
111+
109112
try:
110113
# try PyQt5
111114
from PyQt5.QtCore import (
112115
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer,
113116
)
114-
except ImportError as e0:
115-
try:
116-
# try PySide2
117-
from PySide2.QtCore import (
118-
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer,
119-
)
120-
except ImportError as e1:
121-
raise ImportError(
122-
"Neither PyQt5 nor PySide2 installed.\nPyQt5: {}\nPySide2: {})".format(e0, e1)
123-
)
117+
except ImportError as e:
118+
failures["PyQt5"] = e
119+
else:
120+
found = True
121+
122+
try:
123+
# try PyQt6
124+
from PyQt6.QtCore import (
125+
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer,
126+
)
127+
except ImportError as e:
128+
failures["PyQt6"] = e
129+
else:
130+
found = True
131+
132+
try:
133+
# try PySide2
134+
from PySide2.QtCore import (
135+
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer,
136+
)
137+
except ImportError as e:
138+
failures["PySide2"] = e
139+
else:
140+
found = True
141+
142+
try:
143+
# try PySide6
144+
from PySide6.QtCore import (
145+
QCoreApplication, QEventLoop, QObject, QSocketNotifier, QTimer,
146+
)
147+
except ImportError as e:
148+
failures["PySide6"] = e
149+
else:
150+
found = True
151+
152+
if not found:
153+
raise ImportError(
154+
"No supported Qt wrapper found.\n{}".format("\n".join("{}: {}".format(k, v) for k, v in failures.items()))
155+
)
124156

125157
from twisted.internet.error import ReactorAlreadyInstalledError
126158
from twisted.internet import posixbase
@@ -143,7 +175,7 @@ def __init__(self, parent, reactor, watcher, socketType):
143175
fd = watcher.fileno()
144176
self.notifier = QSocketNotifier(fd, socketType, parent)
145177
self.notifier.setEnabled(True)
146-
if socketType == QSocketNotifier.Read:
178+
if socketType == QSocketNotifier.Type.Read:
147179
self.fn = self.read
148180
else:
149181
self.fn = self.write
@@ -238,11 +270,11 @@ def _add(self, xer, primary, type):
238270

239271
def addReader(self, reader):
240272
"""Add a FileDescriptor for notification of data available to read."""
241-
self._add(reader, self._reads, QSocketNotifier.Read)
273+
self._add(reader, self._reads, QSocketNotifier.Type.Read)
242274

243275
def addWriter(self, writer):
244276
"""Add a FileDescriptor for notification of data available to write."""
245-
self._add(writer, self._writes, QSocketNotifier.Write)
277+
self._add(writer, self._writes, QSocketNotifier.Type.Write)
246278

247279
def _remove(self, xer, primary):
248280
"""
@@ -318,7 +350,13 @@ def run(self, installSignalHandlers=True):
318350
else:
319351
self._blockApp = QEventLoop()
320352
self.runReturn(installSignalHandlers=installSignalHandlers)
321-
self._blockApp.exec_()
353+
354+
exec_method = getattr(self._blockApp, "exec", None)
355+
if exec_method is None:
356+
exec_method = self._blockApp.exec_
357+
358+
exec_method()
359+
322360
if self.running:
323361
self.stop()
324362
self.runUntilCurrent()

tox.ini

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
[tox]
22
minversion=3.1
3-
envlist = py{35,36,37,38,39,310,311}-py{qt5,side2}
3+
envlist = py{35,36,37,38,39,310,311}-py{qt5,qt6,side2,side6}
44

55
[testenv]
66
extras=
77
test
88
pyqt5: pyqt5
9+
pyqt6: pyqt6
910
pyside2: pyside2
11+
pyside6: pyside6
1012
passenv=
1113
TOXENV
1214
CI

0 commit comments

Comments
 (0)