Skip to content

Commit

Permalink
clean up Gtk version requirement import warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
glyph committed Oct 6, 2022
1 parent e980be1 commit 6acd92d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 25 deletions.
9 changes: 4 additions & 5 deletions src/twisted/internet/gireactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@

from typing import Union

from os import environ

from gi import require_version, get_required_version # type:ignore[import]
from gi.repository import GLib # type:ignore[import]

from twisted.internet import _glibbase
Expand Down Expand Up @@ -57,11 +60,7 @@ class GIReactor(_glibbase.GlibReactorBase):
_gapplication = None

def __init__(self, useGtk=False):
_gtk = None
if useGtk is True:
from gi.repository import Gtk as _gtk

_glibbase.GlibReactorBase.__init__(self, GLib, _gtk)
_glibbase.GlibReactorBase.__init__(self, GLib, None)

def registerGApplication(self, app):
"""
Expand Down
39 changes: 19 additions & 20 deletions src/twisted/internet/test/test_gireactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,41 @@
# See LICENSE for details.

"""
GI/GTK3 reactor tests.
GObject Introspection reactor tests; i.e. `gireactor` module for gio/glib/gtk
integration.
"""


from unittest import skipIf

try:
from gi.repository import Gio # type: ignore[import]

from twisted.internet import gireactor as _gireactor
except ImportError:
gireactor = None
gtk3reactor = None
giImported = False
gtkVersion = None
else:
gireactor = _gireactor
# gtk3reactor may be unavailable even if gireactor is available; in
# particular in pygobject 3.4/gtk 3.6, when no X11 DISPLAY is found.
giImported = True
# If we can import Gio, we ought to be able to import our reactor.
from twisted.internet import gireactor
from gi import require_version, get_required_version
from os import environ
try:
from twisted.internet import gtk3reactor as _gtk3reactor
except ImportError:
gtk3reactor = None
gtkVersion = get_required_version("Gtk")
if gtkVersion is None:
require_version("Gtk", environ.get("TWISTED_TEST_GTK_VERSION", "4.0"))
gtkVersion = get_required_version("Gtk")
except ValueError as ve:
gtkVersion = str(ve)
else:
gtk3reactor = _gtk3reactor
from gi.repository import Gtk

from twisted.internet.error import ReactorAlreadyRunning
from twisted.internet.test.reactormixins import ReactorBuilder
from twisted.trial.unittest import SkipTest, TestCase

# Skip all tests if gi is unavailable:
if gireactor is None:
skip = "gtk3/gi not importable"
if not giImported:
skip = "GObject Introspection `gi` module not importable"


class GApplicationRegistrationTests(ReactorBuilder, TestCase):
Expand Down Expand Up @@ -89,21 +92,17 @@ def test_gApplicationActivate(self):

self.runReactor(app, reactor)

@skipIf(
gtk3reactor is None,
"Gtk unavailable (may require running with X11 DISPLAY env set)",
)
@skipIf((gtkVersion is None or gtkVersion not in "3.0", "4.0"), "Unknown GTK version: {repr(gtkVersion)}")
def test_gtkApplicationActivate(self):
"""
L{Gtk.Application} instances can be registered with a gtk3reactor.
"""
reactor = gtk3reactor.Gtk3Reactor()
reactor = gireactor.GIReactor()
self.addCleanup(self.unbuildReactor, reactor)
app = Gtk.Application(
application_id="com.twistedmatrix.trial.gtk3reactor",
flags=Gio.ApplicationFlags.FLAGS_NONE,
)

self.runReactor(app, reactor)

def test_portable(self):
Expand Down

0 comments on commit 6acd92d

Please sign in to comment.