diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 1d9e8314..ee87b82d 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -4,26 +4,8 @@ import logging import os import signal import sys -import textwrap -try: - import gi - gi.require_version('Gst', '1.0') - from gi.repository import Gst -except ImportError: - print(textwrap.dedent(""" - ERROR: The GStreamer Python package was not found. - - Mopidy requires GStreamer to work. GStreamer is a C library with a - number of dependencies itself, and cannot be installed with the regular - Python tools like pip. - - Please see http://docs.mopidy.com/en/latest/installation/ for - instructions on how to install the required dependencies. - """)) - raise -else: - Gst.init() +from mopidy.internal.gi import Gst # noqa: Import to initialize try: # Make GObject's mainloop the event loop for python-dbus diff --git a/mopidy/audio/actor.py b/mopidy/audio/actor.py index 6f444758..834bee55 100644 --- a/mopidy/audio/actor.py +++ b/mopidy/audio/actor.py @@ -4,12 +4,6 @@ import logging import os import threading -import gi -gi.require_version('Gst', '1.0') -gi.require_version('GstPbutils', '1.0') -from gi.repository import GObject, Gst, GstPbutils -Gst.is_initialized() or Gst.init() - import pykka from mopidy import exceptions @@ -17,6 +11,7 @@ from mopidy.audio import tags as tags_lib, utils from mopidy.audio.constants import PlaybackState from mopidy.audio.listener import AudioListener from mopidy.internal import deprecation, process +from mopidy.internal.gi import GObject, Gst, GstPbutils logger = logging.getLogger(__name__) diff --git a/mopidy/audio/scan.py b/mopidy/audio/scan.py index 0ed26401..0b6831ea 100644 --- a/mopidy/audio/scan.py +++ b/mopidy/audio/scan.py @@ -4,15 +4,10 @@ from __future__ import ( import collections import time -import gi -gi.require_version('Gst', '1.0') -gi.require_version('GstPbutils', '1.0') -from gi.repository import Gst, GstPbutils -Gst.is_initialized() or Gst.init() - from mopidy import exceptions from mopidy.audio import tags as tags_lib, utils from mopidy.internal import encoding +from mopidy.internal.gi import Gst, GstPbutils # GST_ELEMENT_FACTORY_LIST: _DECODER = 1 << 0 diff --git a/mopidy/audio/tags.py b/mopidy/audio/tags.py index 79ab346c..62784bc0 100644 --- a/mopidy/audio/tags.py +++ b/mopidy/audio/tags.py @@ -5,13 +5,9 @@ import datetime import logging import numbers -import gi -gi.require_version('Gst', '1.0') -from gi.repository import GLib, Gst -Gst.is_initialized() or Gst.init() - from mopidy import compat from mopidy.internal import log +from mopidy.internal.gi import GLib, Gst from mopidy.models import Album, Artist, Track diff --git a/mopidy/audio/utils.py b/mopidy/audio/utils.py index 6a11c7a3..774de53d 100644 --- a/mopidy/audio/utils.py +++ b/mopidy/audio/utils.py @@ -1,10 +1,7 @@ from __future__ import absolute_import, unicode_literals -import gi -gi.require_version('Gst', '1.0') -from gi.repository import Gst - from mopidy import httpclient +from mopidy.internal.gi import Gst def calculate_duration(num_samples, sample_rate): diff --git a/mopidy/internal/deps.py b/mopidy/internal/deps.py index 8947025f..cc72d371 100644 --- a/mopidy/internal/deps.py +++ b/mopidy/internal/deps.py @@ -5,14 +5,10 @@ import os import platform import sys -import gi -gi.require_version('Gst', '1.0') -from gi.repository import Gst -Gst.is_initialized() or Gst.init() - import pkg_resources from mopidy.internal import formatting +from mopidy.internal.gi import Gst, gi def format_dependency_list(adapters=None): diff --git a/mopidy/internal/gi.py b/mopidy/internal/gi.py new file mode 100644 index 00000000..16931a90 --- /dev/null +++ b/mopidy/internal/gi.py @@ -0,0 +1,33 @@ +from __future__ import absolute_import, unicode_literals + +import textwrap + + +try: + import gi + gi.require_version('Gst', '1.0') + gi.require_version('GstPbutils', '1.0') + from gi.repository import GLib, GObject, Gst, GstPbutils +except ImportError: + print(textwrap.dedent(""" + ERROR: A GObject Python package was not found. + + Mopidy requires GStreamer to work. GStreamer is a C library with a + number of dependencies itself, and cannot be installed with the regular + Python tools like pip. + + Please see http://docs.mopidy.com/en/latest/installation/ for + instructions on how to install the required dependencies. + """)) + raise +else: + Gst.is_initialized() or Gst.init() + + +__all__ = [ + 'GLib', + 'GObject', + 'Gst', + 'GstPbutils', + 'gi', +] diff --git a/tests/audio/test_actor.py b/tests/audio/test_actor.py index 41f730e8..2bcc792a 100644 --- a/tests/audio/test_actor.py +++ b/tests/audio/test_actor.py @@ -3,10 +3,6 @@ from __future__ import absolute_import, unicode_literals import threading import unittest -import gi -gi.require_version('Gst', '1.0') -from gi.repository import Gst - import mock import pykka @@ -14,6 +10,7 @@ import pykka from mopidy import audio from mopidy.audio.constants import PlaybackState from mopidy.internal import path +from mopidy.internal.gi import Gst from tests import dummy_audio, path_to_data_dir diff --git a/tests/audio/test_tags.py b/tests/audio/test_tags.py index 6a838a27..01475124 100644 --- a/tests/audio/test_tags.py +++ b/tests/audio/test_tags.py @@ -4,12 +4,9 @@ from __future__ import absolute_import, unicode_literals import unittest -import gi -gi.require_version('Gst', '1.0') -from gi.repository import GLib, GObject, Gst - from mopidy import compat from mopidy.audio import tags +from mopidy.internal.gi import GLib, GObject, Gst from mopidy.models import Album, Artist, Track diff --git a/tests/audio/test_utils.py b/tests/audio/test_utils.py index 0ce15bcb..99c99eb6 100644 --- a/tests/audio/test_utils.py +++ b/tests/audio/test_utils.py @@ -1,12 +1,9 @@ from __future__ import absolute_import, unicode_literals -import gi -gi.require_version('Gst', '1.0') -from gi.repository import Gst - import pytest from mopidy.audio import utils +from mopidy.internal.gi import Gst class TestCreateBuffer(object): diff --git a/tests/internal/test_deps.py b/tests/internal/test_deps.py index ea102b47..84c79d9c 100644 --- a/tests/internal/test_deps.py +++ b/tests/internal/test_deps.py @@ -4,15 +4,12 @@ import platform import sys import unittest -import gi -gi.require_version('Gst', '1.0') -from gi.repository import Gst - import mock import pkg_resources from mopidy.internal import deps +from mopidy.internal.gi import Gst, gi class DepsTest(unittest.TestCase):