def main(): signal.signal(signal.SIGTERM, process.exit_handler) signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks) loop = gobject.MainLoop() options = parse_options() try: log.setup_logging(options.verbosity_level, options.save_debug_log) check_old_folders() setup_settings(options.interactive) audio = setup_audio() backends = setup_backends(audio) core = setup_core(audio, backends) setup_frontends(core) loop.run() except exceptions.SettingsError as ex: logger.error(ex.message) except KeyboardInterrupt: logger.info('Interrupted. Exiting...') except Exception as ex: logger.exception(ex) finally: loop.quit() stop_frontends() stop_core() stop_backends() stop_audio() process.stop_remaining_actors()
def run(self, args, config): loop = gobject.MainLoop() mixer_class = self.get_mixer_class(config, args.registry['mixer']) backend_classes = args.registry['backend'] frontend_classes = args.registry['frontend'] exit_status_code = 0 try: mixer = self.start_mixer(config, mixer_class) audio = self.start_audio(config, mixer) backends = self.start_backends(config, backend_classes, audio) core = self.start_core(mixer, backends) self.start_frontends(config, frontend_classes, core) 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() self.stop_backends(backend_classes) self.stop_audio() self.stop_mixer(mixer_class) process.stop_remaining_actors() return exit_status_code
def main(): signal.signal(signal.SIGTERM, exit_handler) loop = gobject.MainLoop() try: options = parse_options() setup_logging(options.verbosity_level, options.save_debug_log) check_old_folders() setup_settings(options.interactive) setup_gstreamer() setup_mixer() setup_backend() setup_frontends() loop.run() except SettingsError as e: logger.error(e.message) except KeyboardInterrupt: logger.info(u'Interrupted. Exiting...') except Exception as e: logger.exception(e) finally: loop.quit() stop_frontends() stop_backend() stop_mixer() stop_gstreamer() stop_remaining_actors()
def run(self, args, config): loop = gobject.MainLoop() mixer_class = self.get_mixer_class(config, args.registry["mixer"]) backend_classes = args.registry["backend"] frontend_classes = args.registry["frontend"] try: mixer = self.start_mixer(config, mixer_class) audio = self.start_audio(config, mixer) backends = self.start_backends(config, backend_classes, audio) core = self.start_core(mixer, backends) self.start_frontends(config, frontend_classes, core) loop.run() except (exceptions.BackendError, exceptions.FrontendError, exceptions.MixerError): logger.info("Initialization error. Exiting...") except KeyboardInterrupt: logger.info("Interrupted. Exiting...") finally: loop.quit() self.stop_frontends(frontend_classes) self.stop_core() self.stop_backends(backend_classes) self.stop_audio() self.stop_mixer(mixer_class) process.stop_remaining_actors()
def run(self, args, config, extensions): loop = gobject.MainLoop() try: audio = self.start_audio(config) backends = self.start_backends(config, extensions, audio) core = self.start_core(audio, backends) self.start_frontends(config, extensions, core) loop.run() except KeyboardInterrupt: logger.info("Interrupted. Exiting...") return finally: loop.quit() self.stop_frontends(extensions) self.stop_core() self.stop_backends(extensions) self.stop_audio() process.stop_remaining_actors()
def start(config, extensions): loop = gobject.MainLoop() try: audio = start_audio(config) backends = start_backends(config, extensions, audio) core = start_core(audio, backends) start_frontends(config, extensions, core) loop.run() except KeyboardInterrupt: logger.info('Interrupted. Exiting...') return finally: loop.quit() stop_frontends(extensions) stop_core() stop_backends(extensions) stop_audio() process.stop_remaining_actors()
def run(self, args, config): loop = gobject.MainLoop() backend_classes = args.registry['backend'] frontend_classes = args.registry['frontend'] try: audio = self.start_audio(config) backends = self.start_backends(config, backend_classes, audio) core = self.start_core(audio, backends) self.start_frontends(config, frontend_classes, core) loop.run() except KeyboardInterrupt: logger.info('Interrupted. Exiting...') return finally: loop.quit() self.stop_frontends(frontend_classes) self.stop_core() self.stop_backends(backend_classes) self.stop_audio() process.stop_remaining_actors()
def main(): signal.signal(signal.SIGTERM, process.exit_handler) signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks) loop = gobject.MainLoop() options = parse_options() config_files = options.config.split(b':') config_overrides = options.overrides enabled_extensions = [] # Make sure it is defined before the finally block logging_initialized = False # TODO: figure out a way to make the boilerplate in this file reusable in # scanner and other places we need it. try: # Initial config without extensions to bootstrap logging. logging_config, _ = config_lib.load(config_files, [], config_overrides) # TODO: setup_logging needs defaults in-case config values are None log.setup_logging(logging_config, options.verbosity_level, options.save_debug_log) logging_initialized = True installed_extensions = ext.load_extensions() # TODO: wrap config in RO proxy. config, config_errors = config_lib.load(config_files, installed_extensions, config_overrides) # Filter out disabled extensions and remove any config errors for them. for extension in installed_extensions: enabled = config[extension.ext_name]['enabled'] if ext.validate_extension(extension) and enabled: enabled_extensions.append(extension) elif extension.ext_name in config_errors: del config_errors[extension.ext_name] log_extension_info(installed_extensions, enabled_extensions) check_config_errors(config_errors) # Read-only config from here on, please. proxied_config = config_lib.Proxy(config) log.setup_log_levels(proxied_config) create_file_structures() check_old_locations() ext.register_gstreamer_elements(enabled_extensions) # Anything that wants to exit after this point must use # mopidy.utils.process.exit_process as actors have been started. audio = setup_audio(proxied_config) backends = setup_backends(proxied_config, enabled_extensions, audio) core = setup_core(audio, backends) setup_frontends(proxied_config, enabled_extensions, core) loop.run() except KeyboardInterrupt: if logging_initialized: logger.info('Interrupted. Exiting...') except Exception as ex: if logging_initialized: logger.exception(ex) raise finally: loop.quit() stop_frontends(enabled_extensions) stop_core() stop_backends(enabled_extensions) stop_audio() process.stop_remaining_actors()
def main(): signal.signal(signal.SIGTERM, process.exit_handler) signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks) loop = gobject.MainLoop() options = parse_options() config_files = options.config.split(b':') config_overrides = options.overrides enabled_extensions = [] # Make sure it is defined before the finally block logging_initialized = False # TODO: figure out a way to make the boilerplate in this file reusable in # scanner and other places we need it. try: # Initial config without extensions to bootstrap logging. logging_config, _ = config_lib.load(config_files, [], config_overrides) # TODO: setup_logging needs defaults in-case config values are None log.setup_logging( logging_config, options.verbosity_level, options.save_debug_log) logging_initialized = True installed_extensions = ext.load_extensions() # TODO: wrap config in RO proxy. config, config_errors = config_lib.load( config_files, installed_extensions, config_overrides) # Filter out disabled extensions and remove any config errors for them. for extension in installed_extensions: enabled = config[extension.ext_name]['enabled'] if ext.validate_extension(extension) and enabled: enabled_extensions.append(extension) elif extension.ext_name in config_errors: del config_errors[extension.ext_name] log_extension_info(installed_extensions, enabled_extensions) check_config_errors(config_errors) # Read-only config from here on, please. proxied_config = config_lib.Proxy(config) log.setup_log_levels(proxied_config) create_file_structures() check_old_locations() ext.register_gstreamer_elements(enabled_extensions) # Anything that wants to exit after this point must use # mopidy.utils.process.exit_process as actors have been started. audio = setup_audio(proxied_config) backends = setup_backends(proxied_config, enabled_extensions, audio) core = setup_core(audio, backends) setup_frontends(proxied_config, enabled_extensions, core) loop.run() except KeyboardInterrupt: if logging_initialized: logger.info('Interrupted. Exiting...') except Exception as ex: if logging_initialized: logger.exception(ex) raise finally: loop.quit() stop_frontends(enabled_extensions) stop_core() stop_backends(enabled_extensions) stop_audio() process.stop_remaining_actors()