def run(self, args, config): def on_sigterm(loop): logger.info("GLib mainloop got SIGTERM. Exiting...") loop.quit() loop = GLib.MainLoop() GLib.unix_signal_add( GLib.PRIORITY_DEFAULT, signal.SIGTERM, on_sigterm, loop ) mixer_class = self.get_mixer_class(config, args.registry["mixer"]) backend_classes = args.registry["backend"] frontend_classes = args.registry["frontend"] core = None exit_status_code = 0 try: mixer = None if mixer_class is not None: mixer = self.start_mixer(config, mixer_class) if mixer: self.configure_mixer(config, mixer) audio = self.start_audio(config, mixer) backends = self.start_backends(config, backend_classes, audio) core = self.start_core(config, mixer, backends, audio) self.start_frontends(config, frontend_classes, core) logger.info("Starting GLib mainloop") loop.run() except ( exceptions.BackendError, exceptions.FrontendError, exceptions.MixerError, ): logger.info("Initialization error. Exiting...") exit_status_code = 1 except KeyboardInterrupt: logger.info("Interrupted. Exiting...") except Exception: logger.exception("Uncaught exception") finally: loop.quit() self.stop_frontends(frontend_classes) self.stop_core(core) self.stop_backends(backend_classes) self.stop_audio() if mixer_class is not None: self.stop_mixer(mixer_class) process.stop_remaining_actors() return exit_status_code
def run(self, args, config): def on_sigterm(loop): logger.info('GLib mainloop got SIGTERM. Exiting...') loop.quit() loop = GLib.MainLoop() GLib.unix_signal_add( GLib.PRIORITY_DEFAULT, signal.SIGTERM, on_sigterm, loop) mixer_class = self.get_mixer_class(config, args.registry['mixer']) backend_classes = args.registry['backend'] frontend_classes = args.registry['frontend'] core = None exit_status_code = 0 try: mixer = None if mixer_class is not None: mixer = self.start_mixer(config, mixer_class) if mixer: self.configure_mixer(config, mixer) audio = self.start_audio(config, mixer) backends = self.start_backends(config, backend_classes, audio) core = self.start_core(config, mixer, backends, audio) self.start_frontends(config, frontend_classes, core) logger.info('Starting GLib mainloop') loop.run() except (exceptions.BackendError, exceptions.FrontendError, exceptions.MixerError): logger.info('Initialization error. Exiting...') exit_status_code = 1 except KeyboardInterrupt: logger.info('Interrupted. Exiting...') except Exception: logger.exception('Uncaught exception') finally: loop.quit() self.stop_frontends(frontend_classes) self.stop_core(core) self.stop_backends(backend_classes) self.stop_audio() if mixer_class is not None: self.stop_mixer(mixer_class) process.stop_remaining_actors() return exit_status_code
import pykka from pykka.messages import ProxyCall from mopidy import config as config_lib from mopidy import exceptions from mopidy.audio import Audio from mopidy.core import Core from mopidy.internal import deps, process, timer, versioning from mopidy.internal.gi import GLib logger = logging.getLogger(__name__) _default_config = [ (pathlib.Path(base) / "mopidy" / "mopidy.conf").resolve() for base in GLib.get_system_config_dirs() + [GLib.get_user_config_dir()] ] DEFAULT_CONFIG = ":".join(map(str, _default_config)) def config_files_type(value): return value.split(":") def config_override_type(value): try: section, remainder = value.split("/", 1) key, value = remainder.split("=", 1) return (section.strip(), key.strip(), value.strip()) except ValueError: raise argparse.ArgumentTypeError(
def periodic_save_state(self): self.save_state() GLib.timeout_add_seconds(self.config["savestateperiod"]["period"], self.periodic_save_state)
def on_start(self): GLib.timeout_add_seconds(self.config["savestateperiod"]["period"], self.periodic_save_state)
def test_xdg_subsititution(self): expected = GLib.get_user_data_dir() + "/foo" result = path.expand_path("$XDG_DATA_DIR/foo") assert str(result) == expected
def test_xdg_subsititution(self): self.assertEqual( GLib.get_user_data_dir() + b'/foo', path.expand_path(b'$XDG_DATA_DIR/foo'))
import os import signal import sys import pykka from mopidy import config as config_lib, exceptions from mopidy.audio import Audio from mopidy.core import Core from mopidy.internal import deps, process, timer, versioning from mopidy.internal.gi import GLib logger = logging.getLogger(__name__) _default_config = [] for base in GLib.get_system_config_dirs() + [GLib.get_user_config_dir()]: _default_config.append(os.path.join(base, b'mopidy', b'mopidy.conf')) DEFAULT_CONFIG = b':'.join(_default_config) def config_files_type(value): return value.split(b':') def config_override_type(value): try: section, remainder = value.split(b'/', 1) key, value = remainder.split(b'=', 1) return (section.strip(), key.strip(), value.strip()) except ValueError: raise argparse.ArgumentTypeError(