PHP 8.5.2
Preview: gireactor.py Size: 3.42 KB
//lib/python3/dist-packages/twisted/internet/gireactor.py

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
This module provides support for Twisted to interact with the glib
mainloop via GObject Introspection.

In order to use this support, simply do the following::

    from twisted.internet import gireactor
    gireactor.install()

If you wish to use a GApplication, register it with the reactor::

    from twisted.internet import reactor
    reactor.registerGApplication(app)

Then use twisted.internet APIs as usual.

On Python 3, pygobject v3.4 or later is required.
"""


from typing import Union

from gi.repository import GLib

from twisted.internet import _glibbase
from twisted.internet.error import ReactorAlreadyRunning
from twisted.python import runtime

if getattr(GLib, "threads_init", None) is not None:
    GLib.threads_init()


class GIReactor(_glibbase.GlibReactorBase):
    """
    GObject-introspection event loop reactor.

    @ivar _gapplication: A C{Gio.Application} instance that was registered
        with C{registerGApplication}.
    """

    # By default no Application is registered:
    _gapplication = None

    def __init__(self, useGtk=False):
        _glibbase.GlibReactorBase.__init__(self, GLib, None)

    def registerGApplication(self, app):
        """
        Register a C{Gio.Application} or C{Gtk.Application}, whose main loop
        will be used instead of the default one.

        We will C{hold} the application so it doesn't exit on its own. In
        versions of C{python-gi} 3.2 and later, we exit the event loop using
        the C{app.quit} method which overrides any holds. Older versions are
        not supported.
        """
        if self._gapplication is not None:
            raise RuntimeError("Can't register more than one application instance.")
        if self._started:
            raise ReactorAlreadyRunning(
                "Can't register application after reactor was started."
            )
        if not hasattr(app, "quit"):
            raise RuntimeError(
                "Application registration is not supported in"
                " versions of PyGObject prior to 3.2."
            )
        self._gapplication = app

        def run():
            app.hold()
            app.run(None)

        self._run = run

        self._crash = app.quit


class PortableGIReactor(_glibbase.GlibReactorBase):
    """
    Portable GObject Introspection event loop reactor.
    """

    def __init__(self, useGtk=False):
        super().__init__(GLib, None, useGtk=useGtk)

    def registerGApplication(self, app):
        """
        Register a C{Gio.Application} or C{Gtk.Application}, whose main loop
        will be used instead of the default one.
        """
        raise NotImplementedError("GApplication is not currently supported on Windows.")

    def simulate(self) -> None:
        """
        For compatibility only. Do nothing.
        """


def install(useGtk: bool = False) -> Union[GIReactor, PortableGIReactor]:
    """
    Configure the twisted mainloop to be run inside the glib mainloop.

    @param useGtk: A hint that the Gtk GUI will or will not be used.  Currently
        does not modify any behavior.
    """
    reactor: Union[GIReactor, PortableGIReactor]
    if runtime.platform.getType() == "posix":
        reactor = GIReactor(useGtk=useGtk)
    else:
        reactor = PortableGIReactor(useGtk=useGtk)

    from twisted.internet.main import installReactor

    installReactor(reactor)
    return reactor


__all__ = ["install"]

Directory Contents

Dirs: 3 × Files: 57

Name Size Perms Modified Actions
- drwxr-xr-x 2026-01-08 12:56:22
Edit Download
test DIR
- drwxr-xr-x 2026-01-08 12:56:22
Edit Download
- drwxr-xr-x 2026-01-08 12:56:23
Edit Download
18.84 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.14 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
10.87 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
46.82 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
22.75 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.85 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
95.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
76.59 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.73 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.14 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.16 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.42 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.24 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.55 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
512 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
14.06 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
95.89 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
10.56 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1006 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.83 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
20.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
43.14 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
26.93 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
853 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.77 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.96 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.20 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.47 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1006 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
32.90 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
53.97 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
29.12 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.13 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.92 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
18.18 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
21.98 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.48 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
14.84 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.15 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.27 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.96 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
743 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.29 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.61 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.39 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.97 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
8.49 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.99 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.82 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
9.46 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
14.06 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
70.68 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
11.31 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.69 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.04 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
521 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).