From de0c5214d15b499287aa40e5fd277fd07db8f90f Mon Sep 17 00:00:00 2001 From: Adi Roiban Date: Wed, 13 Sep 2023 01:13:05 +0100 Subject: [PATCH 1/8] First try for GTK on windows on GHA. --- .github/workflows/test.yaml | 24 +++++++++++++++++++++++- src/twisted/newsfragments/11987.bugfix | 1 + tox.ini | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/twisted/newsfragments/11987.bugfix diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9330163dae3..44adcfd749a 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -156,6 +156,15 @@ jobs: # select a reactor. trial-args: '--reactor=select' + # Windows, newest Python supported version with gi reactor. + # This needs a python version supported by Deluge GTK distribution. + - python-version: '3.10' + runs-on: 'windows-2022' + tox-env: 'alldeps-withcov-winghagi-windows' + job-name: 'win-default-tests-gi' + # Distributed trial is not yet suported on Windows. + trial-args: '--reactor=gi' + # Windows, newest Python supported version with iocp reactor. - python-version: '3.11' runs-on: 'windows-2022' @@ -232,7 +241,7 @@ jobs: # Make sure the matrix is defined in such a way that this is triggered # only on Linux. - - name: Install GTK system deps + - name: Install GTK system deps on Linux if: matrix.platform-deps == 'gtk-platform' run: | # *-dev dependencies are for pygobject @@ -246,6 +255,19 @@ jobs: gir1.2-gtk-3.0 \ xvfb + # Make sure the matrix is defined in such a way that this is triggered + # only on Linux. + - name: Install GTK system deps on windows + if: matrix.tox-env == 'alldeps-withcov-winghagi-windows' + shell: pwsh + run: | + $WebClient = New-Object System.Net.WebClient + $WebClient.DownloadFile("https://github.com/deluge-torrent/gvsbuild-release/releases/download/latest/gvsbuild-py3.10-vs16-x64.zip","C:\GTK.zip") + 7z x C:\GTK.zip -oc:\GTK + echo "C:\GTK\release\lib" | Out-File -FilePath $env:GITHUB_PATH -Append + echo "C:\GTK\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Append + echo "C:\GTK\release" | Out-File -FilePath $env:GITHUB_PATH -Append + - name: Test run: | ${{ matrix.tox-wrapper }} tox ${{ matrix.trial-target }} diff --git a/src/twisted/newsfragments/11987.bugfix b/src/twisted/newsfragments/11987.bugfix new file mode 100644 index 00000000000..516a38c4eb6 --- /dev/null +++ b/src/twisted/newsfragments/11987.bugfix @@ -0,0 +1 @@ +gi and gtk reactors now work again on Windows. diff --git a/tox.ini b/tox.ini index d69a91ed119..b35dc0c2f4c 100644 --- a/tox.ini +++ b/tox.ini @@ -120,6 +120,9 @@ commands = posix: python -c "print('Running on POSIX (no special dependencies)')" + ; Install based on the the local GTK based on GitHub Actions and Deluge. + winghagi: python -m pip install --no-index --find-links="C:\GTK\release\python" PyGObject + ; Run tests without wrapping them using coverage. nocov: python -m twisted.trial --temp-directory={envtmpdir}/_trial_temp --reporter={env:TRIAL_REPORTER:verbose} {env:TRIAL_ARGS:-j8} {posargs:twisted} From 6993cda6eabfc928738468c25326afb95c2f0021 Mon Sep 17 00:00:00 2001 From: Adi Roiban Date: Wed, 13 Sep 2023 01:17:45 +0100 Subject: [PATCH 2/8] Try with general select reactor. --- .github/workflows/test.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 44adcfd749a..2df6ffa9ada 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -163,7 +163,8 @@ jobs: tox-env: 'alldeps-withcov-winghagi-windows' job-name: 'win-default-tests-gi' # Distributed trial is not yet suported on Windows. - trial-args: '--reactor=gi' + # TOOO; set selector to gi once GI support is available. + trial-args: '--reactor=select' # Windows, newest Python supported version with iocp reactor. - python-version: '3.11' From 9a44d0388a6e698764e75762e036ad24f972de5c Mon Sep 17 00:00:00 2001 From: Adi Roiban Date: Wed, 13 Sep 2023 01:58:57 +0100 Subject: [PATCH 3/8] Try default gtk on GHA. --- .github/workflows/test.yaml | 15 +-------------- tox.ini | 3 --- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 2df6ffa9ada..3c22924155d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -160,7 +160,7 @@ jobs: # This needs a python version supported by Deluge GTK distribution. - python-version: '3.10' runs-on: 'windows-2022' - tox-env: 'alldeps-withcov-winghagi-windows' + tox-env: 'alldeps-withcov-gtk-windows' job-name: 'win-default-tests-gi' # Distributed trial is not yet suported on Windows. # TOOO; set selector to gi once GI support is available. @@ -256,19 +256,6 @@ jobs: gir1.2-gtk-3.0 \ xvfb - # Make sure the matrix is defined in such a way that this is triggered - # only on Linux. - - name: Install GTK system deps on windows - if: matrix.tox-env == 'alldeps-withcov-winghagi-windows' - shell: pwsh - run: | - $WebClient = New-Object System.Net.WebClient - $WebClient.DownloadFile("https://github.com/deluge-torrent/gvsbuild-release/releases/download/latest/gvsbuild-py3.10-vs16-x64.zip","C:\GTK.zip") - 7z x C:\GTK.zip -oc:\GTK - echo "C:\GTK\release\lib" | Out-File -FilePath $env:GITHUB_PATH -Append - echo "C:\GTK\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Append - echo "C:\GTK\release" | Out-File -FilePath $env:GITHUB_PATH -Append - - name: Test run: | ${{ matrix.tox-wrapper }} tox ${{ matrix.trial-target }} diff --git a/tox.ini b/tox.ini index b35dc0c2f4c..d69a91ed119 100644 --- a/tox.ini +++ b/tox.ini @@ -120,9 +120,6 @@ commands = posix: python -c "print('Running on POSIX (no special dependencies)')" - ; Install based on the the local GTK based on GitHub Actions and Deluge. - winghagi: python -m pip install --no-index --find-links="C:\GTK\release\python" PyGObject - ; Run tests without wrapping them using coverage. nocov: python -m twisted.trial --temp-directory={envtmpdir}/_trial_temp --reporter={env:TRIAL_REPORTER:verbose} {env:TRIAL_ARGS:-j8} {posargs:twisted} From a429be7c4843cec25622eda37725c5371a84de07 Mon Sep 17 00:00:00 2001 From: Glyph Date: Tue, 12 Sep 2023 21:44:11 -0700 Subject: [PATCH 4/8] it can't be this simple, can it? --- src/twisted/internet/_glibbase.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/twisted/internet/_glibbase.py b/src/twisted/internet/_glibbase.py index 4a6d1323ab9..ce4c34a678f 100644 --- a/src/twisted/internet/_glibbase.py +++ b/src/twisted/internet/_glibbase.py @@ -22,7 +22,7 @@ from twisted.internet.interfaces import IReactorFDSet, IReadDescriptor, IWriteDescriptor from twisted.python import log from twisted.python.monkey import MonkeyPatcher -from ._signals import _UnixWaker +from ._signals import _Waker def ensureNotImported(moduleNames, errorMessage, preventImports=[]): @@ -52,7 +52,7 @@ def ensureNotImported(moduleNames, errorMessage, preventImports=[]): sys.modules[name] = None -class GlibWaker(_UnixWaker): +class GlibWaker(_Waker): """ Run scheduled events after waking up. """ From c1c6a0af7a6d28513d088e5dddee05c413277b3d Mon Sep 17 00:00:00 2001 From: Glyph Date: Tue, 12 Sep 2023 21:53:13 -0700 Subject: [PATCH 5/8] Revert "Try default gtk on GHA." This reverts commit 9a44d0388a6e698764e75762e036ad24f972de5c. --- .github/workflows/test.yaml | 15 ++++++++++++++- tox.ini | 3 +++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 3c22924155d..2df6ffa9ada 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -160,7 +160,7 @@ jobs: # This needs a python version supported by Deluge GTK distribution. - python-version: '3.10' runs-on: 'windows-2022' - tox-env: 'alldeps-withcov-gtk-windows' + tox-env: 'alldeps-withcov-winghagi-windows' job-name: 'win-default-tests-gi' # Distributed trial is not yet suported on Windows. # TOOO; set selector to gi once GI support is available. @@ -256,6 +256,19 @@ jobs: gir1.2-gtk-3.0 \ xvfb + # Make sure the matrix is defined in such a way that this is triggered + # only on Linux. + - name: Install GTK system deps on windows + if: matrix.tox-env == 'alldeps-withcov-winghagi-windows' + shell: pwsh + run: | + $WebClient = New-Object System.Net.WebClient + $WebClient.DownloadFile("https://github.com/deluge-torrent/gvsbuild-release/releases/download/latest/gvsbuild-py3.10-vs16-x64.zip","C:\GTK.zip") + 7z x C:\GTK.zip -oc:\GTK + echo "C:\GTK\release\lib" | Out-File -FilePath $env:GITHUB_PATH -Append + echo "C:\GTK\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Append + echo "C:\GTK\release" | Out-File -FilePath $env:GITHUB_PATH -Append + - name: Test run: | ${{ matrix.tox-wrapper }} tox ${{ matrix.trial-target }} diff --git a/tox.ini b/tox.ini index d69a91ed119..b35dc0c2f4c 100644 --- a/tox.ini +++ b/tox.ini @@ -120,6 +120,9 @@ commands = posix: python -c "print('Running on POSIX (no special dependencies)')" + ; Install based on the the local GTK based on GitHub Actions and Deluge. + winghagi: python -m pip install --no-index --find-links="C:\GTK\release\python" PyGObject + ; Run tests without wrapping them using coverage. nocov: python -m twisted.trial --temp-directory={envtmpdir}/_trial_temp --reporter={env:TRIAL_REPORTER:verbose} {env:TRIAL_ARGS:-j8} {posargs:twisted} From fb294742cdd45e2e8f8e40c9437281b8ce612804 Mon Sep 17 00:00:00 2001 From: Adi Roiban Date: Fri, 5 Apr 2024 17:56:51 +0100 Subject: [PATCH 6/8] Always import. --- src/twisted/internet/_signals.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/twisted/internet/_signals.py b/src/twisted/internet/_signals.py index 18793bfbba2..1b45b861236 100644 --- a/src/twisted/internet/_signals.py +++ b/src/twisted/internet/_signals.py @@ -49,9 +49,7 @@ from twisted.internet.interfaces import IReadDescriptor from twisted.python import failure, log, util from twisted.python.runtime import platformType - -if platformType == "posix": - from . import fdesc, process +from . import fdesc, process SignalHandler: TypeAlias = Callable[[int, Optional[FrameType]], None] From 4134e0f87f9f3dbc27ed93dd82d7549aa9db1619 Mon Sep 17 00:00:00 2001 From: Adi Roiban Date: Fri, 5 Apr 2024 17:58:33 +0100 Subject: [PATCH 7/8] Revert uniwaker. --- src/twisted/internet/_glibbase.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/twisted/internet/_glibbase.py b/src/twisted/internet/_glibbase.py index 9b958e3867c..587ec1bd05c 100644 --- a/src/twisted/internet/_glibbase.py +++ b/src/twisted/internet/_glibbase.py @@ -22,7 +22,7 @@ from twisted.internet.interfaces import IReactorFDSet, IReadDescriptor, IWriteDescriptor from twisted.python import log from twisted.python.monkey import MonkeyPatcher -from ._signals import _IWaker, _Waker +from ._signals import _IWaker, _UnixWaker def ensureNotImported(moduleNames, errorMessage, preventImports=[]): @@ -52,7 +52,7 @@ def ensureNotImported(moduleNames, errorMessage, preventImports=[]): sys.modules[name] = None -class GlibWaker(_Waker): +class GlibWaker(_UnixWaker): """ Run scheduled events after waking up. """ From 3f243562b594ddbf907207e94036b0081e1e3a7f Mon Sep 17 00:00:00 2001 From: Glyph Date: Fri, 5 Apr 2024 10:51:10 -0700 Subject: [PATCH 8/8] loosen `process` dependency --- src/twisted/internet/_signals.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/twisted/internet/_signals.py b/src/twisted/internet/_signals.py index 1b45b861236..a1d4fc53e74 100644 --- a/src/twisted/internet/_signals.py +++ b/src/twisted/internet/_signals.py @@ -49,7 +49,15 @@ from twisted.internet.interfaces import IReadDescriptor from twisted.python import failure, log, util from twisted.python.runtime import platformType -from . import fdesc, process +from . import fdesc + +if platformType == "posix": + from .process import reapAllProcesses +else: + + def reapAllProcesses() -> None: + "Do nothing on Windows." + SignalHandler: TypeAlias = Callable[[int, Optional[FrameType]], None] @@ -230,7 +238,7 @@ def install(self) -> None: # This should only happen if someone used spawnProcess # before calling reactor.run (and the process also exited # already). - process.reapAllProcesses() + reapAllProcesses() def uninstall(self) -> None: """ @@ -409,7 +417,7 @@ def wakeUp(self): if platformType == "posix": _Waker = _UnixWaker else: - # Primarily Windows and Jython. + # Windows, and possibly other platforms without signals support _Waker = _SocketWaker # type: ignore[misc,assignment] @@ -440,4 +448,4 @@ def doRead(self) -> None: method. """ super().doRead() - process.reapAllProcesses() + reapAllProcesses()