diff options
author | Christoph Reiter <creiter@src.gnome.org> | 2017-03-21 14:46:00 +0100 |
---|---|---|
committer | Christoph Reiter <creiter@src.gnome.org> | 2017-03-22 09:20:23 +0100 |
commit | 20220d5eac510e3445a96e4e9061fd1bc6ec37c7 (patch) | |
tree | 87d0ccb3b362b4bf82efa9edb24b11dbdda8ae0c /pygtkcompat | |
parent | 4af42e85a1959cbae06a1bbb7268c76890b60db9 (diff) | |
download | pygobject-20220d5eac510e3445a96e4e9061fd1bc6ec37c7.tar.gz |
pygtkcompat: Allow multiple calls to enable(), enable_gtk() as long as the version matches
enable_gtk() isn't idempotent and was breaking the API when called multiple times.
This ignores the call in case the version passed is the same as for previous calls.
https://bugzilla.gnome.org/show_bug.cgi?id=759009
Diffstat (limited to 'pygtkcompat')
-rw-r--r-- | pygtkcompat/pygtkcompat.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/pygtkcompat/pygtkcompat.py b/pygtkcompat/pygtkcompat.py index fd651f57..27e97e85 100644 --- a/pygtkcompat/pygtkcompat.py +++ b/pygtkcompat/pygtkcompat.py @@ -84,7 +84,28 @@ def _install_enums(module, dest=None, strip=''): continue +_enabled_registry = {} + + +def _check_enabled(name, version=None): + """Returns True in case it is already enabled""" + + if name in _enabled_registry: + enabled_version = _enabled_registry[name] + if enabled_version != version: + raise ValueError( + "%r already enabled with different version (%r)" % ( + name, enabled_version)) + return True + else: + _enabled_registry[name] = version + return False + + def enable(): + if _check_enabled(""): + return + # gobject from gi.repository import GLib sys.modules['glib'] = GLib @@ -104,6 +125,9 @@ _unset = object() def enable_gtk(version='3.0'): + if _check_enabled("gtk", version): + return + # set the default encoding like PyGTK reload(sys) if sys.version_info < (3, 0): @@ -499,12 +523,18 @@ def enable_gtk(version='3.0'): def enable_vte(): + if _check_enabled("vte"): + return + gi.require_version('Vte', '0.0') from gi.repository import Vte sys.modules['vte'] = Vte def enable_poppler(): + if _check_enabled("poppler"): + return + gi.require_version('Poppler', '0.18') from gi.repository import Poppler sys.modules['poppler'] = Poppler @@ -512,6 +542,9 @@ def enable_poppler(): def enable_webkit(version='1.0'): + if _check_enabled("webkit", version): + return + gi.require_version('WebKit', version) from gi.repository import WebKit sys.modules['webkit'] = WebKit @@ -519,12 +552,18 @@ def enable_webkit(version='1.0'): def enable_gudev(): + if _check_enabled("gudev"): + return + gi.require_version('GUdev', '1.0') from gi.repository import GUdev sys.modules['gudev'] = GUdev def enable_gst(): + if _check_enabled("gst"): + return + gi.require_version('Gst', '0.10') from gi.repository import Gst sys.modules['gst'] = Gst @@ -565,6 +604,9 @@ def enable_gst(): def enable_goocanvas(): + if _check_enabled("goocanvas"): + return + gi.require_version('GooCanvas', '2.0') from gi.repository import GooCanvas sys.modules['goocanvas'] = GooCanvas |